İçindekiler:
- Schema agnostic
- İlişkisel Olmayan
- Birçok NoSQL veritabanında kilit bir tasarım kararı, bütün veritabanını tek bir sunucuda toplamak yerine, tek bir veritabanında verileri depolamak için birden çok bilgisayar kullanmaktır.
Video: Common design patterns with Azure Cosmos DB | Azure Friday 2024
NoSQL kitapları ve blogları, NoSQL veritabanı nedir konusunda farklı görüşler sunmaktadır. Aşağıdaki listede gösterilen NoSQL'in dört temel özelliği çoğu NoSQL veritabanı için geçerlidir. Liste, NoSQL'i geleneksel ilişkisel DBMS ile karşılaştırır:
-
Şema tanımlayıcı: Bir veritabanı şeması, ilişkisel bir veritabanındaki olası tüm veri ve veri yapılarının açıklamasıdır. Bir NoSQL veritabanı ile, şema, ön şema tasarımını yapmadan bilgileri saklama özgürlüğünü sağlamak için gerekli değildir.
-
İlişkisel Olmayan: Bir veritabanındaki ilişkiler, veri tabloları arasında bağlantı kurar. Örneğin, işlem ayrıntılarının bir listesi, teslimat ayrıntılarının ayrı bir listesine bağlanabilir. NoSQL veritabanı ile bu bilgi toplama olarak depolanır - teslimat adresi de dahil olmak üzere işlemle ilgili her şeyin bulunduğu tek bir kayıt.
-
Emtia donanımı: Bazı veritabanları, özel depolama ve işleme donanımı ile en iyi (veya yalnızca) çalışacak şekilde tasarlanmıştır. NoSQL veritabanı ile ucuz hazır sunucular kullanılabilir. Bu ucuz sunuculardan daha fazlasını ekleme, NoSQL veritabanlarının daha fazla veri işlemek üzere ölçeklenmesini sağlar.
-
Yüksek oranda dağıtılabilir: Dağıtılmış veritabanlar birden fazla aygıta ilişkin bir dizi bilgiyi saklayabilir ve işleyebilir. NoSQL veritabanı ile tek bir büyük veritabanını tutmak için bir sunucu kümesi kullanılabilir.
Schema agnostic
NoSQL veritabanları şema dışıdır. NoSQL veritabanlarına veri depolamadan önce çok fazla ön tasarım çalışması yapmak zorunda değilsiniz. Kodlamaya başlayabilir ve veritabanının dahili olarak nasıl depolandığını ve çalıştığını bilmeden verileri saklar ve geri alabilirsiniz. (İleri işlevsellik ihtiyacınız olduğunda ve daha sonra dizinleri manuel olarak ekleyebilir veya veri depolama yapılarını değiştirebilirsiniz.) Schema agnosticism, NoSQL ve ilişkisel veritabanları arasındaki en önemli fark olabilir.
Şema dışı bir veritabanının en büyük yararı, geliştirme süresinin kısaltılmış olmasıdır. Birden fazla geliştirme sürümü geçtikçe ve veritabanındaki dahili veri yapılarını değiştirmeniz gerekirse, bu yarar artar.
Örneğin, geleneksel bir RDBMS'de şema yeniden tasarlama sürecinden geçersiniz. Şema, hangi verilerin bekleneceğini veritabanına bildirir. Depolanan verileri veya yapıları değiştirin ve veritabanını değiştirilen bir şema kullanarak yeniden başlatmanız gerekir. Bir değişiklik yapacak olsaydınız, mevcut verileri nasıl yeniden tasarlayacağınıza karar vermek için çok zaman harcamanız gerekirdi. NoSQL veritabanlarında, basitçe farklı bir veri yapısı saklarsınız. Veritabanına önceden haber vermek zorunda değilsiniz.
Sorgularınızı buna göre değiştirmeniz gerekebilir, belki zaman zaman belirli dizin 'ı (örneğin, veri türüne özel sorguların altında ve daha büyük verilere izin vermek için bir tamsayı aralığı dizini) ekleyebilirsiniz, ancak tüm işlem RDBMS'den daha az acı verici.
RDBMS, esnekliği ve SQL kullanması nedeniyle bir sorgu değiştirerek hız kazandı. NoSQL veritabanları, şema ve sorguyu değiştirmek için bu esnekliği sağlar; bu da zamanla giderek benimsenen temel nedenlerden biridir.
Sorguda bile, şema değişikliklerini bilmeyle ilgili endişelenmenize gerek olmayabilir - hesap numarası 'in bulunduğu alanın bir hesap numarası üzerinden bir dizin göz önüne alınmalıdır. bir NoSQL veritabanı. Yapıyı değiştirebilir ve hesap numarasının nerede saklandığını yeniden yerleştirebilir ve öğe belgedeki başka bir yerde aynı ada sahipse sorgu mekanizmanızdaki değişiklikler olmadan sorgunuz için hâlâ kullanılabilir.
Tüm NoSQL veritabanlarının tam olarak şema tanımlayıcısı olmadığını unutmayın. HBase gibi bazıları, sütun tanımlarını değiştirmek için veritabanını durdurmanızı gerektirir. Tanımlanmış tüm alanlar (bu durumda sütunlar) her bir kayıt için önceden bilinmesi gerektiği için sadece NoSQL veritabanları olarak kabul edilirler - sadece sütun aileleri.
RDBMS kayıttaki alanların boş değerleri olarak tanımlanmasına izin verir. Bir RDBMS ile ilgili problem, kayıt gelecekteki herhangi bir zamanda bu sütunda bir değere sahipse, depolama değeri boş değerler için ayrılmışsa, saklanan veri boyutu ve performansı olumsuz etkilenir. Cassandra'da, sorunu çözen o sütunun verilerini sunmazsınız.
İlişkisel Olmayan
İlişkisel veritabanı yönetim sistemleri, uygulama verilerini 20 yılı aşkın bir sürede saklamanın baskın yolu olmuştur. Onların temelini oluşturan teoriyi ispatlamak için çok sayıda matematik çalışması yapılmıştır.
Bu temel, tabloların birbirleriyle nasıl ilişkili olduğunu açıklamaktadır. Tek bir Sipariş satırı, birçok Teslimat Adresi satırıyla ilgili olabilir, ancak her Teslimat Adresi satırı aynı zamanda birden fazla Sipariş satırıyla ilgilidir. Bu çok - - - çok ilişkisi 'dır.
NoSQL veritabanları kayıtları arasındaki bu ilişki kavramına sahip değildir. Bunun yerine verileri normalleştirirler. Bu, bir NoSQL veritabanında Gönderi Adresi gömülü olan bir Sipariş yapısı olması anlamına gelir. Bu, teslim adresinin kullandığı her sipariş satırında çoğaltıldığı anlamına gelir. Bu yaklaşım, birden fazla veri yapısı (tablolar) arasında karmaşık sorgu zaman birleştirmeleri gerektirmese de avantaja sahiptir.
NoSQL veritabanları, bireysel kayıtların veritabanındaki diğer kayıtlarla nasıl ilişkili olduğu hakkında bilgi saklamaz; bu da bir sınırlama gibi gelebilir. Bununla birlikte, NoSQL veritabanları depolayabileceğiniz veri yapıları açısından daha esnektir.
Çevrimiçi perakendecinin siparişini düşünün. Sipariş, teslimat adresi ve ödeme bilgileri gibi, sipariş edilen kişi hakkında ürün kodları, miktarlar, madde fiyatları ve öğe açıklamalarını içerebilir.
Bir ilişkisel veritabanında çeşitli tablolarda on satır eklemeniz yerine, tüm bu sipariş bilgileri için tek bir yapı (örneğin, bir JSON veya XML belgesi olarak) depolayabilirsiniz.
İlişkisel veritabanı teorisinde hedef, verilerinizi normalleştirmektir (yani alanları ve tabloları yinelenen verileri kaldırmak için organize etmektir). NoSQL - veritabanlarında - özellikle Belge veya Agrega veritabanları - bazen verileri kasıtlı olarak denormalize ederek bazı verileri birkaç kez saklamış olursunuz. Örneğin, "Müşteri Teslimatı Adresi" ni, bir müşterinin bir kerede sakladığı birçok sipariş arasında defalarca saklamanız ve bir defada saklamanız ve birden fazla siparişte başvurmanız için saklayabilirsiniz. Bunu yapmak fazladan bir saklama alanı ve uygulamanızda yönetim konusunda biraz öngörü gerektirir. Peki neden yapıyorsun?
Verileri birden çok kez saklamanın iki avantajı vardır:
Kolay depolama ve alma:
-
Tek bir kayıt kaydedin ve kaydedin. Sorgu hızı:
-
İlişkisel veritabanlarında, sorgu sırasında tablolara bilgi eklemek ve kısıtlamalar eklemek. Bu, veritabanı motorunun birçok tabloyu değerlendirmesini gerektirebilir. Farklı tablolarda daha fazla sorgu kısıtlaması varsa, sorgu hızınızı ne kadar azaltırsanız o kadar çok olur. (Bu nedenle, bir RDBMS'in önceden hesaplanmış görünümleri vardır.) NoSQL veritabanında, sorgunuzu değerlendirmek için gereken tüm bilgiler tek bir belgededir. Bu nedenle, eşleşen belgelerin listesini hızlı bir şekilde belirleyebilirsiniz. İlişkisel görünümler ve NoSQL denormalizasyonları, kayıtlar arasında veri yayılmasına ilişkin farklı yaklaşımlardır. NoSQL'de, aynı verinin farklı görünümlerini temsil eden çoklu denormalizasyonları korumanız gerekebilir. Bu yaklaşım depolama maliyetini artırır, ancak size daha iyi bir sorgu süresi sağlar.
Depolamanın sürekli düşen maliyeti ve gelişme ve sorgulamanın hızının artışı göz önüne alındığında, denormalize edilmiş veriler (diğer bir deyişle
somutlaştırılmış görünümler ), NoSQL çözümlerini azaltmak için katil bir neden değildir. Aynı probleme kendi avantajları ve dezavantajlarıyla yaklaşmanın sadece farklı bir yolu. NoSQL çok dağıtılabilir ve emtia donanımını kullanır
Birçok NoSQL veritabanında kilit bir tasarım kararı, bütün veritabanını tek bir sunucuda toplamak yerine, tek bir veritabanında verileri depolamak için birden çok bilgisayar kullanmaktır.
Verileri birden fazla makineye kaydetmek ve sorgulanmasını sağlamak zordur. Sorguyu tüm sunuculara göndermeniz ve bir cevap beklemeniz gerekir. Umarım makinaları, dağıtılan soruları işlemek için birbirleriyle konuşacak kadar hızlı olacak şekilde kurarsınız!
Bu yaklaşımın en büyük avantajı çok büyük veri kümeleri olmasıdır, çünkü bazı depolama gereksinimleri için mevcut en büyük tek sunucunun bile ihtiyacınız olan tüm verileri depolayamaması veya işleyememesi. Twitter ve Facebook'daki tüm mesajları düşünün. Çoğunlukla insanların kahvaltı ve şirin kedi videoları için yaptıklarıyla ilgili olsa bile, tüm verileri etkili bir şekilde yönetmek için dağınık bir mekanizmaya ihtiyacınız var.
Veritabanınızı dağıtmanın bir avantajı, emtia sunucuları olarak adlandırılan daha ucuz sunucuları kullanabilmenizdir.Daha küçük veri setleri için bile, tek, yüksek güçlü bir sunucu yerine üç emtia sunucusu satın almak daha ucuz olabilir. Diğer bir önemli avantaj yüksek kullanılabilirlik eklemenin daha kolay olması; Verilerinizi dağıtarak zaten yarı yolda ilerliyorsunuz. Verilerinizi kümedeki diğer sunucular arasında bir veya iki kez çoğaltılıyorsanız, sunuculardan biri çökerse, yanarsa ve öldürülse bile verilerinize yine de erişilebilir olacaktır.
Veritabanının desteklenen ücretli sürümünü geliştiren şirketten satın almadıkça tüm açık kaynaklı veritabanları yüksek kullanılabilirliği desteklemez.
Grafik veritabanlarından çok dağıtım yapılabilir kurallara bir istisna söz konusudur. Bazı grafik sorgularını zamanında etkili bir şekilde cevaplandırmak için, verilerin tek bir sunucuda depolanması gerekir. Bu konuyu henüz kimse çözmedi.
Üçlü depoya mı yoksa bir grafik mağazasına mı ihtiyacınız var dikkatle düşünün. Üçlü mağazalar genellikle dağıtılabilirken, grafik mağazaları ise dağıtılabilir değildir. İhtiyacınız olan şey, desteklemeniz gereken sorgulara bağlı.