NoSQL Nedir?

Esnek veri modellerine sahip, yüksek performanslı, ilişkisel olmayan veritabanları

NoSQL veritabanı nedir?

NoSQL veritabanları, belirli veri modelleri için özel olarak tasarlanmıştır ve modern uygulamalar oluşturmaya yönelik esnek şemalara sahiptir. NoSQL veritabanları uygun ölçekte geliştirme kolaylığı, işlevselliği ve performansıyla geniş çaplı kabul görmüştür. Belge, grafik, anahtar-değer, bellek içi ve arama dahil olmak üzere çeşitli veri modelleri kullanır. Bu sayfa, NoSQL veritabanlarını daha iyi anlamanıza ve kullanmaya başlamanıza yardımcı olacak kaynaklar içerir.

Onlarca yıl boyunca uygulama geliştirme için ağırlıklı olarak kullanılan veri modeli Oracle, DB2, SQL Server, MySQL ve PostgreSQL gibi ilişkisel veritabanları tarafından kullanılan ilişkisel veri modeliydi. Diğer veri modellerinin önemli ölçüde hayata geçirilmesi ve kullanılması 2000'lerin ortasında ve sonunda gerçekleşmeye başladı. Bu yeni veritabanı ve veri modeli sınıflarının diğerlerinden ayırt edilmesi ve sınıflandırılması için “NoSQL” terimi bulundu. “NoSQL” terimi genellikle “ilişkisel olmayan” terimiyle aynı şeyi ifade etmek için kullanılır.


AWS Amaca Özel Tasarlanmış, İlişkisel Olmayan Veritabanlarındaki Yenilikler

NoSQL (ilişkisel olmayan) Veritabanları Nasıl Çalışır?

NoSQL veritabanları, verilere erişmek ve verileri yönetmek için belge, grafik, anahtar-değer, bellek içi ve arama dahil olmak üzere çeşitli veri modelleri kullanır. Bu tür veritabanları, özellikle büyük veri hacmi, düşük gecikme süresi ve esnek veri modelleri gerektiren uygulamalar için optimize edilmiştir. Bu gereksinimler, diğer veritabanlarının veri tutarlılığı kısıtlamalarının bir kısmı esnetilerek karşılanır.

Basit bir kitap veritabanının şemasını modelleme örneğini ele alalım:

  • İlişkisel bir veritabanında genellikle bir kitap kaydı gizlenerek (veya “normalleştirilerek”) ayrı tablolarda depolanırken, ilişkiler birincil ve yabancı anahtar kısıtlamaları tarafından tanımlanır. Bu örnekte Books (Kitaplar) tablosu ISBN, Book Title (Kitap Başlığı) ve Edition Number (Baskı Sayısı) sütunlarına; Authors (Yazarlar) tablosu AuthorID (Yazar Kimliği) ve Author Name (Yazar Adı) sütunlarına; Author-ISBN (Yazar-ISBN) tablosu ise AuthorID (Yazar Kimliği) ve ISBN sütunlarına sahiptir. İlişkisel model, veritabanının yedekliliği azaltacak şekilde normalleştirilmiş ve genel olarak depolama için optimize edilmiş tablolar arasında başvurusal bütünlük uygulamasına imkan tanıyacak şekilde tasarlanmıştır.
  • Bir NoSQL veritabanında, kitap kaydı genellikle bir JSON belgesi olarak saklanır. Her kitap için öğe, ISBN, Book Title (Kitap Başlığı), Edition Number (Baskı Sayısı), Author Name (Yazar Adı) ve AuthorID (Yazar Kimliği) bilgileri tek bir belgede öznitelikler olarak depolanır. Bu modelde, veriler sezgisel yazılım geliştirme ve yatay ölçeklenebilirlik için optimize edilir.

Neden NoSQL veritabanı kullanmalısınız?

NoSQL veritabanları, harika kullanıcı deneyimleri sunulması amacıyla esnek, ölçeklenebilir, yüksek performanslı ve yüksek oranda işlevsel veritabanları gerektiren mobil, web ve oyun gibi birçok modern uygulama için idealdir.

  • Esneklik: NoSQL genellikle daha hızlı ve daha fazla yinelemeli yazılım geliştirmeyi mümkün kılan esnek şemalar sağlar. Esnek veri modeli sayesinde NoSQL veritabanları yarı yapılandırılmış ve yapılandırılmamış veriler için idealdir.
  • Ölçeklenebilirlik: NoSQL veritabanları genellikle pahalı ve kalıcı sunucular eklenerek ölçeği artırılabilecek şekilde değil, dağıtılmış donanım kümeleri kullanılarak ölçeği genişletilebilecek şekilde tasarlanır. Bazı bulut sağlayıcıları bu işlemleri arka planda, tam olarak yönetilen bir hizmet olarak gerçekleştirir.
  • Yüksek performans: NoSQL veritabanları, benzer işlevlerin ilişkisel veritabanlarıyla gerçekleştirilmesi ile karşılaştırıldığında daha yüksek performansı mümkün kılan belirli veri modelleri (belge, anahtar-değer, grafik gibi) ve erişim desenleri için optimize edilmiştir.
  • Yüksek oranda işlevsel: NoSQL veritabanları, her biri ilgili veri modeli için özel olarak tasarlanmış yüksek oranda işlevsel API'ler ve veri türleri sağlar.

NoSQL Veritabanı Türleri

nosql_keyvalue_g

Anahtar-değer: Anahtar-değer veritabanları yüksek oranda bölümlendirilebilir ve diğer veritabanlarının ulaşamayacağı ölçeklerde yatay ölçeklendirmeye imkan tanır. Anahtar-değer veri modeli için özellikle de oyun, reklam teknolojisi ve IoT gibi kullanım örnekleri uygundur. Amazon DynamoDB her ölçekte iş yükü için tutarlı, milisaniye cinsinden tek basamaklı gecikme süresi sunacak şekilde tasarlanmıştır. Bu tutarlı performans, Snapchat'in depolamadaki en büyük yazma iş yükünü içeren Snapchat Stories özelliğinin DynamoDB'ye taşınmasındaki en önemli nedendir.

nosql_document_g

Belge: Bazı yazılım geliştiriciler veri modellerini demoralize satırlar ve sütunlar olarak görmez. Yazılım geliştiricilere veri modelini belge olarak düşünmek daha doğal geldiğinden, veriler genellikle uygulama katmanında bir JSON belgesi olarak temsil edilir. Yazılım geliştiriciler bir veritabanındaki verileri uygulama kodlarında kullandıkları belge modeli biçimini kullanarak kalıcı hale getirebildiğinden, belge veritabanlarının popülerliği artmıştır. DynamoDB ve MongoDB, esnek ve çevik yazılım geliştirme için güçlü ve sezgisel API'ler sağlayan popüler belge veritabanlarıdır.

nosql_graph_g

Grafik: Bir grafik veritabanının amacı, yüksek oranda bağlı veri kümeleriyle çalışan uygulamalar oluşturup çalıştırmayı kolaylaştırmaktır. Grafik veritabanlarının yaygın olarak karşılaşılan kullanım örnekleri arasında sosyal ağlar, öneri altyapıları, dolandırıcılık algılama ve bilgi grafikleri yer alır. Amazon Neptune, tam olarak yönetilen bir grafik veritabanı hizmetidir. Hem Property Graph modelini hem de Resource Description Framework'ü (RDF) destekleyen Neptune, iki grafik API'si seçeneği sunar: TinkerPop ve RDF/SPARQL. Popüler grafik veritabanlarına örnek olarak Neo4j ve Giraph verilebilir.

nosql_inmemory_g

Bellek içi: Oyun ve reklam teknolojisi uygulamalarının puan tabloları, oturum depoları ve gerçek zamanlı analitik gibi mikrosaniye düzeyinde yanıt süreleri gerektiren ve her an ani trafik artışları yaşanabilen kullanım örnekleri vardır. Amazon ElastiCache, disk tabanlı veri depolarıyla karşılanamayacak McDonald’s gibi düşük gecikme süreli, yüksek performanslı iş yüklerinin karşılanması için Memcached ve Redis sunar. Amaca özel tasarlanmış veri depolarının bir diğer örneği de Amazon DynamoDB Accelerator (DAX) ürünüdür. DAX, DynamoDB'nin okuma hızının bir üst düzeye çıkmasını sağlar.

nosql_search_g

Arama: Birçok uygulama, yazılım geliştiricilerin sorunları gidermesine yardımcı olmak için günlük oluşturur. Amazon Elasticsearch Service (Amazon ES), yarı yapılandırılmış günlükleri ve ölçümleri dizine ekleyerek, biriktirerek ve bunlarda arama yaparak makineler tarafından oluşturulan veriler için neredeyse gerçek zamanlı görselleştirmeler ve analitik sağlama amacına özel olarak tasarlanmıştır. Amazon ES aynı zamanda tam metin arama kullanım örnekleri için güçlü, yüksek performanslı bir arama altyapısıdır. Expedia, operasyonel izlemeden sorun gidermeye, dağıtılmış uygulama yığını izlemeden fiyatlandırma optimizasyonuna kadar çeşitli görev açısından kritik kullanım örnekleri için 150'den fazla Amazon ES etki alanı, 30 TB veri ve 30 milyar belge kullanıyor.

SQL (ilişkisel) ve NoSQL (ilişkisel olmayan) veritabanlarının karşılaştırması

NoSQL veritabanlarının değişken özelliklere sahip birçok türü olsa da aşağıdaki tabloda SQL ile NoSQL veritabanları arasındaki farklardan bazıları gösterilmiştir.

  İlişkisel veritabanları NoSQL veritabanları

En uygun iş yükleri

İşlemsel ve güçlü tutarlılığa sahip çevrimiçi işlem gerçekleştirme (OLTP) uygulamaları için tasarlanan ilişkisel veritabanları, çevrimiçi analitik işlem (OLAP) için uygundur. NoSQL anahtar-değer, belge, grafik ve bellek içi veritabanları, düşük gecikme süreli uygulamaları içeren çeşitli veri erişimi desenlerine yönelik olarak OLTP için tasarlanmıştır. NoSQL arama veritabanları, yarı yapılandırılmış veriler üzerinde analitik için tasarlanmıştır. 
Veri modeli

İlişkisel model, verileri satır ve sütunlardan oluşan tablolar halinde normalleştirir. Tablolar, satırlar, sütunlar, dizinler, tablolar arasındaki ilişkiler ve diğer veritabanı öğeleri bir şema tarafından kesin bir şekilde tanımlanır. Veritabanı, tablolar arasındaki ilişkilerde başvurusal bütünlük uygular. 

NoSQL veritabanları belge, grafik, anahtar-değer, bellek içi ve arama dahil olmak üzere çeşitli veri modelleri sağlar.
ACID özellikleri

İlişkisel veritabanları bölünmezlik, tutarlılık, yalıtım ve dayanıklılık (ACID) özelliklerini sağlar:

  • Bölünmezlik, bir işlemin ya tamamen yürütülmesini ya da hiç yürütülmemesini gerektirir.
  • Tutarlılık, bir işlem gönderildiğinde verilerin veritabanı şemasına uygun olmasını gerektirir.
  • Yalıtım, eş zamanlı işlemlerin birbirinden bağımsız olarak yürütülmesini gerektirir.
  • Dayanıklılık, beklenmeyen bir sistem hatasından veya güç kesintisinden son bilinen duruma kurtarma becerisi gerektirir.
NoSQL veritabanları yatay olarak ölçeklendirilebilen daha esnek bir veri modeli sağlamak için genellikle ilişkisel veritabanlarının bazı ACID özelliklerini esneterek bunlardan ödün verirler. Bu, tek bir bulut sunucusunun ulaşamayacağı derecede yatay ölçeklendirme gerektiren yüksek performanslı, düşük gecikme süreli kullanım örnekleri için NoSQL veritabanlarının mükemmel bir seçim olmasını sağlar.
Performance Performans genellikle disk alt sistemine bağlıdır. En üst düzey performans için genellikle sorguların, dizinlerin ve tablo yapısının optimize edilmesi gerekir. Performans genel olarak temel donanımın küme boyutu, ağ gecikme süresi ve çağrı yapan uygulama gibi etmenlerin birleşimine bağlıdır.
Ölçek İlişkisel veritabanları genellikle donanımın işlem kapasitesini artırarak ölçeği artırır veya salt okunur iş yüklerine yönelik replikalar ekleyerek ölçeği genişletir. Anahtar-değer erişim desenleri aktarım hızını artırmak için neredeyse sınırsız ölçekte tutarlı performans sağlayan dağıtılmış mimariyi kullanarak ölçeği genişletebildiğinden, NoSQL veritabanları genellikle bölümlendirilebilen veritabanlarıdır.
API'ler Veri depolama ve alma istekleri, yapılandırılmış sorgu diline (SQL) uygun sorgular kullanılarak iletilir. Bu sorgular ilişkisel veritabanı tarafından ayrıştırılır ve yürütülür. Nesne tabanlı API'ler, uygulama geliştiricilerinin bellek içi veri yapılarını kolayca depolamasına ve almasına imkan tanır. Bölüm anahtarları, uygulamaların anahtar-değer çiftlerini, sütun kümelerini veya seri hale getirilmiş uygulama nesneleri ve öznitelikleri içeren yarı yapılandırılmış belgeleri bulmasına imkan tanır.

SQL ve NoSQL Terminolojisinin Karşılaştırması

Aşağıdaki tabloda belirli NoSQL veritabanları tarafından kullanılan terminoloji ile SQL veritabanları tarafından kullanılan terminoloji karşılaştırılmıştır.

SQL MongoDB DynamoDB Cassandra  Couchbase
Tablo Koleksiyon Tablo Tablo Veri klasörü
Satır Belge Öğe Satır Belge
Sütun Alan Öznitelik Sütun Alan
Birincil anahtar Nesne Kimliği Birincil anahtar
Birincil anahtar Belge Kimliği
Dizin Dizin İkincil dizin Dizin Dizin
Görünüm Görünüm Genel ikincil dizin Gerçekleştirilmiş görünüm Görünüm
İç içe tablo veya nesne Katıştırılmış belge Harita Harita Harita
Dizi Dizi Liste Liste Liste
Liste
Liste
Birincil anahtar

DynamoDB'yi kullanmaya başlayın

DynamoDB'yi kullanmaya başlamak kolaydır. Birkaç tıklamayla ilk tablonuzu oluşturmak için DynamoDB Kullanmaya Başlama web sayfasına bakın. Ayrıca, iş yüklerini ilişkisel bir veritabanı yönetim sisteminden (RDBMS) DynamoDB'ye geçirmeye yönelik en iyi uygulamaları öğrenmek için bu AWS teknik incelemesini indirebilirsiniz.

Amazon DynamoDB nedir?