İçindekiler:
Video: Azure Friday | Azure Cosmos DB: Get the Most Out of Provisioned Throughput 2024
Sözcük bölme, NoSQL arazisinde iki farklı kavram için kullanılır. veri bölümü , verilerin bir küme boyunca eşit şekilde dağıtılmasını sağlayan bir mekanizma. Öte yandan, ağ bölümü , aynı veritabanı kümesinin iki parçasının iletişim kuramadığı durumlarda oluşur.
Çok büyük kümelenmiş sistemlerde, bir ekipmanın arızalanması olasılığı giderek artmaktadır. Bir kümedeki sunucular arasındaki bir ağ geçişi başarısız olursa, (bilgisayar alanında jargon olarak anılacaktır) bir fenomen bölünmüş beyin oluşur. Bu durumda, tek tek sunucular hala istek alır, ancak birbirleriyle iletişim kuramazlar.
Bu senaryo, veri sunucusunda en az sunuculu ağ bölümü kümeden kaldırıldığından (veya "gerçek Big Brother modasında" oyundan çıkarılır ") veri tutarsızlığına veya yalnızca veri depolama alanındaki kapasitenin azalmasına neden olabilir).
Bölümlere tolerans gösterme
Bir ağ bölümü oluştuğunda iki seçeneğiniz vardır:
-
Okuma ve yazma işlemlerine hizmet vermek için bazı düzeylerde devam edin.
-
Bölümün bir bölümünü "devreden çıkar" ve her iki bölüm de iletişim kurduğunda verileri daha sonra düzeltmeye karar verin. Bu, genellikle, kümenin, eksik bir ana bölüm düğümü için yeni bir ana okuma kopyasını oylamasını gerektirir.
Riak, bir okumanın başarılı olması için kaç kez veri çoğaltılacağını (üç kopya, varsayılan olarak - n = 3) ve kaç sunucunun sorgulanması gerektiğini belirlemenize izin verir. Bu, bir anahtarın birincil ana kullanıcısının bir ağ bölümünün yanlış tarafında olması durumunda, diğer iki sunucu kullanılabilir olduğunda (yani, r = 2 okunabilir durumdaysa) okuma işlemleri başarılı olabilir demektir.
Riak, birincil bölüm sunucusu ima atıf olarak adlandırılan bir sistemi kullanarak çöktüğünde yazmaları yönetir. Veriler orijinal olarak çoğaltılırken, belirli bir anahtar bölümünün ilk düğümü (varsayılan olarak) aşağıdaki komşu düğümlerden ikisine yazılır.
Birincil yazılamazsa, halkadaki bir sonraki düğüme yazılır. Bu yazarlar etkili bir sonraki düğüme aktarılır. Birincil sunucu yeniden geldiğinde, yazma işlemleri, birincil yazma işlemlerini tekrar ele geçirmeden önce o düğüme tekrar gönderilir.
Bu işlemlerin her ikisinde de, sürüm uyuşmazlıkları olabilir, çünkü farklı çoğaltmalar birkaç milisaniye olsa bile farklı sürüm durumlarında olabilir.
Riak, bu sorunu hafifletmek için aktif anti - entropi adlı başka bir sistem kullanmaktadır. Bu sistem, güncellenmiş değerler üzerinden gezinir ve kopyaların bir noktada, tercihen daha geç olmadan güncellenmesini sağlar.Bu, diğer NoSQL veritabanları tarafından master-köle, paylaşımsız kümeleme desteği ile kullanılan iki aşamalı bir taahhütten kaçınan yüksek bir beslenme hızı sürerken çakışmaları önlemeye yardımcı olur.
Okunurken bir çelişki olursa, Riak yalnızca en yeni veriyi geri getirmeye çalışmak için okuma onarım 'ı kullanır. Sonunda, ve kullandığınız tutarlılık ve kullanılabilirlik ayarlarına bağlı olarak, istemci uygulaması birden fazla sürümle sunulabilir ve kendisi için karar vermenizi istedi.
Bazı durumlarda, bu ticaret avantajı arzu edilir ve sunulan pek çok uygulama, sunulan verilere, hangi sürümün kullanılacağına ve hangi sürümün atılacağına dayalı olarak sezgisel olarak bilinebilir.
İkincil endeksleme
İkincil endeksler, bir değerin içindeki belirli verilere ilişkin endekslerdir. Çoğu anahtar / değerli mağazalar, bu endekslemeyi uygulamaya bırakır. Bununla birlikte, Riak, doküman - tabanlı bölümleme olarak adlandırılan ve sekonder endeksleme yapılmasına izin veren bir şema kullanan farklıdır.
Belgeye dayalı bölümleme, JSON yapılarını Riak veritabanına yazdığınızı varsayar. Daha sonra, bu JSON yapısında aşağıdaki gibi belirli adlandırılmış özelliklerde dizinler oluşturabilirsiniz:
{"sipariş kimliği": 5001, "müşteri kimliği": 1429857, "sipariş tarihi": "2014-09-24 "," Total ": 134. 24}
Bir müşterinin bir önceki ay siparişlerini gösteren bir uygulamanız varsa, burada gösterildiği gibi tüm kayıtları sorgulamak istersiniz; müşteri kimliği sabit bir değerdir (1429857) ve sipariş tarihi belli bir aralıkta (ayın başı ve sonu).
Çoğu çoğu anahtar / değerli mağazada, kombine müşteri numarası ve ayı olan anahtar olan sipariş kimliğinin bir listesi olan başka bir kova oluşturursunuz. Bununla birlikte, Riak'ta ekstra depolama alanına sahip olmakla birlikte uygulama geliştiricisine şeffaf olmanın avantajına sahip olan yalnızca müşteri kimliği (tam sayı) ve sipariş tarihi (tarih) üzerinde ikincil bir dizin eklemeniz yeterlidir.
Bu indeksler de canlı olarak güncelleştirilir; yani, Riak'ta bir doküman değerinin güncellenmesi ile bugüne kadar olan dizinler arasında gecikme yoktur. Verilere olan bu canlı erişimi, göründüğünden daha zor çıkarmak zordur. Sonuçta, endeksler tutarlı değilse, sürekli olarak tutulan verileri bulamazsınız!
Riak'ın Değerlendirilmesi
Riak'ın arkasındaki ticari varlık olan Basho, yaklaşmakta olan 2,0 NoSQL veritabanının her zaman güçlü bir tutarlılığa sahip olduğunu ve diğer NoSQL satıcılarının yaptığı bir iddianın olduğunu söylüyor. NoSQL tedarikçilerinin her zaman güçlü tutarlılığa sahip oldukları iddiası, biftek bifteklerinin bulunduğu pazar günleri hariç, güçlü vejetaryen olmayı iddia etmek gibi bir şeydir.
Riak, ACID uyumlu bir veritabanı değildir. Yapılandırması, ACID uyumluluk modunda çalışacak şekilde değiştirilemez. İstemciler, normal işlemler sırasında veya ağ bölümleri sırasında tutarsız veri alabilir. Riak artan kullanılabilirlik ve bölüm toleransı için mutlak tutarlılık sağlar.
Riak'ı güçlü tutarlılık modunda çalıştırmak, okunan kopyalarının birincil ana ile aynı saatte güncellendiği anlamına gelir. Bu, iki aşamalı bir taahhüt içerir - temelde, ana düğüm yazmanın tamamlandığını onaylamadan önce diğer düğümlere yazar.
Bu yazının yazıldığı sırada Riak'ın güçlü tutarlılık modu ikincil dizinleri veya karmaşık veri türlerini desteklemez (örneğin, JSON). Umarım, Basho bu sorunu veritabanının gelecek sürümlerinde çözecektir.
Yeniden markalanmış ve entegre bir Apache Solr arama motoru, sonunda tutarlı bir güncelleme modeli kullanan Riak Search, güçlü tutarlılık kullanırken yanlış pozitif sonuçlar doğurabilir. Bu durum, verilerin yazılabileceği ve ardından işlemin terk edilebileceği, ancak veriler yine de "yanlış pozitif" arama sonucu bırakarak endeksleme için kullanıldığı - sonuç aslında arama sorgusu için geçerli değildir çünkü oluşur.
Riak ayrıca, yerine çalışma koşullarında hangi düğümün ana sunucu haline geldiğini belirlemek için ayrı bir bekçi işlemi kullanır. Bununla birlikte, bu süreç oldukça uygun değildir, yani birkaç saniye boyunca, bekçi süreci 'un yeni bir kopyası çevrimiçi duruma getirilirken yeni bir düğüm eklenemez veya yeni bir düğüm eklenemez usta seçildi. Yüksek stresli yerine çalışma koşullarında bu olasılığın farkında olmalısınız.
Riak, uygulama geliştiricileri için ikincil dizin oluşturma ve yerleşik JSON değeri desteği gibi bazı güzel özelliklere sahiptir. Diğer veri merkezlerine felaket kurtarma için veri tabanı çoğaltılması yalnızca fiyatı web sitelerinde bulunabilen ücretli sürümde kullanılabilir (gösterilen kira fiyatları, yalnızca lisanslı fiyat geçerlidir).
Riak Control küme izleme aracı, kümeleri izlerken gecikme süresi yüzünden de pek fazla kabul edilmemektedir. Riak çok fazla söz verir ve Basho gelecekteki sürümlerde daha fazla kurumsal - düzey küme yönetimi imkânı eklerseniz, sınıfının en iyisi haline gelecektir.