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ı olarak kabul görmüştür. Bu sayfa, NoSQL veritabanlarını daha iyi anlamanıza ve kullanmaya başlamanıza yardımcı olacak kaynaklar içermektedir.

AWS'deki Veritabanları: Doğru İş için Doğru Araç

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

NoSQL veritabanlarında, verilere erişmek ve onları yönetmek için çeşitli veri modelleri kullanılı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 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

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.

Belge: Geliştiriciler için verimli ve sezgisel bir veri modeli olduğundan veriler, uygulama kodunda genellikle bir nesne veya JSON benzeri bir belgeyle temsil edilir. Belge veritabanları, geliştiricilerin uygulama kodlarında kullandıkları aynı belge modeli biçimini kullanarak bir veritabanında veri depolamasını ve sorgulamasını kolaylaştırır. Belgelerin ve belge veritabanlarının esnek, yarı yapılandırılmış ve hiyerarşik yapısı sayesinde geliştiriciler, uygulamaların gereksinimleri doğrultusunda geliştirme yapabilirler. Bu belge modeli; kataloglar, kullanıcı profilleri ve her belgenin hem benzersiz olduğu hem de zamanla geliştiği içerik yönetim sistemleri ile birlikte oldukça kullanışlıdır. Amazon DocumentDB (MongoDB ile uyumlu) ve MongoDB, esnek ve yinelemeli geliştirme için hem güçlü hem de sezgisel API'ler sağlayan popüler belge veritabanlarıdır.

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.

Bellek içi: Oyun ve reklam teknolojisi uygulamalarının puan tabloları, oturum depoları ve gerçek zamanlı analiz gibi mikrosaniye düzeyinde yanıt süreleri gerektiren ve her an ani trafik artışları yaşanabilen kullanım örnekleri vardır. Amazon MemoryDB for Redis, mikrosaniye düzeyinde okuma gecikmesi, tek haneli milisaniye düzeyinde yazma gecikmesi ve Multi-AZ dayanıklılığı sağlayan, Redis uyumlu, dayanıklı, bellek içi bir veritabanı hizmetidir. MemoryDB, onu modern, mikro hizmet uygulamalarına yönelik birincil veritabanı olarak kullanabilmeniz için ultra hızlı performans ve dayanıklılık sunacak şekilde amaca özel tasarlanmıştır. Amazon ElastiCache, düşük gecikme süreli, yüksek aktarım hızlı iş yükleri sağlamak üzere, Redis ve Memcached ile uyumlu, tam olarak yönetilen, bellek içi bir önbelleğe alma hizmetidir. Uygulamalarından gerçek zamanlı yanıtlara ihtiyaç duyan Tinder gibi müşteriler, disk tabanlı veri depoları yerine bellek içi veri depoları kullanmaktadır. Amazon DynamoDB Accelerator (DAX), amaca özel tasarlanmış bir diğer veri deposu örneğidir. DAX, DynamoDB'nin okuma hızının bir üst düzeye çıkmasını sağlar.

Arama: Birçok uygulama, geliştiricilerin sorunları gidermesine yardımcı olmak için günlük oluşturur. Amazon OpenSearch Hizmeti, 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ştirme ve analizler sağlamak için amaca yönelik tasarlanmıştır. Amazon OpenSearch Hizmeti aynı zamanda tam metin arama kullanım örneklerine yönelik güçlü bir yüksek performanslı arama altyapısıdır. Expedia, operasyonel izlemeden sorun gidermeye, dağıtılmış uygulama yığını izlemeden fiyatlandırma optimizasyonuna kadar görev açısından kritik çeşitli kullanım örnekleri için 150'den fazla Amazon OpenSearch Hizmeti 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ı

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.

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.

NoSQL'i Kullanmaya Başlama
  İ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 veritabanları, düşük gecikme süreli uygulamaları içeren çeşitli veri erişimi desenleri için tasarlanmıştır. NoSQL arama veritabanları, yarı yapılandırılmış veriler üzerinde analiz 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ı, performans ve ölçek için optimize edilmiş anahtar-değer, belge ve grafik gibi ç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.
Performans 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. 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 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?