Nosql'de Nedensel Tutarlılık Nedir?

Yayınlanan: 2022-12-13

Kuruluşlar geleneksel ilişkisel veritabanlarına alternatifler aradıkça, NoSQL veritabanları son yıllarda giderek daha popüler hale geldi. NoSQL veritabanlarının en önemli avantajlarından biri, verilerin nasıl depolandığı ve erişildiği konusunda yüksek derecede esneklik sağlayabilmeleridir. Ancak bu esnekliğin bir bedeli vardır ve ödünleşimlerden biri de nedensel tutarlılığın genellikle garanti edilememesidir. Nedensel tutarlılık, dağıtık sistemlerde sıklıkla kullanılan güçlü bir tutarlılık modelidir. Nedensel olarak tutarlı bir sistemde, nedensel olarak ilişkili olan tüm yazmalar, tüm istemciler tarafından aynı sırada görülmelidir. Bu, iki istemci nedensel olarak ilişkili yazma işlemleri gerçekleştirirse, bu yazma işlemlerinin diğer tüm istemciler tarafından aynı sırada görülmesi gerektiği anlamına gelir. Bu esnekliğin karşılığı, NoSQL veritabanlarında nedensel tutarlılığın genellikle garanti edilmemesidir. Bu, iki istemci nedensel olarak ilişkili yazma işlemleri gerçekleştirirse, bu yazma işlemlerinin diğer tüm istemciler tarafından aynı sırada görüleceğinin garantisi olmadığı anlamına gelir. Bu, veritabanında depolanan verilerde tutarsızlıklara neden olabilir. Bir NoSQL veritabanında nedensel tutarsızlıklara katkıda bulunabilecek bir dizi faktör vardır. Biri, NoSQL veritabanlarında sıklıkla kullanılan bir tutarlılık modeli olan nihai tutarlılığın kullanılmasıdır. Sonunda tutarlı bir sistemde, yazma işlemleri tüm istemciler tarafından hemen görülmeyebilir, ancak sonunda tüm kopyalara yayılacaktır. Bu, yazma işlemlerinin farklı istemciler tarafından sıra dışı olarak görülebileceği bir zaman penceresi olduğu anlamına gelir. Nedensel tutarsızlıklara katkıda bulunabilecek diğer bir faktör, çatışma çözümünün son yazar tarafından kullanılmasıdır. Son yazan kazanır sisteminde, iki istemci birbiriyle çelişen yazma işlemleri gerçekleştirdiğinde, işlemi en son gerçekleştiren istemciden gelen yazma önceliğe sahip olacaktır. Yazma işlemlerinin gerçekleştirilme sırası tüm istemcilerde aynı değilse, bu tutarsızlıklara yol açabilir. Son yazan kazanır çatışma çözümü, en son yazmanın tüm istemciler tarafından görülebilir olmasını sağlamaya yardımcı olabileceğinden, genellikle sonunda tutarlı olan sistemlerde kullanılır. Ancak, yazma işlemlerinin gerçekleştirilme sırası tüm istemcilerde aynı değilse tutarsızlıklara da yol açabilir. Genel olarak, NoSQL veritabanlarının esnekliğinin ödünleşimi, nedensel tutarlılığı garanti etmemeleridir. Bu, saklanan verilerde tutarsızlık riski olduğu anlamına gelir.

Bu makalede, MongoDB'nin Nedensel Tutarlılık Garantilerinin gerçek zamanlı olarak nasıl bozulabileceğini göstereceğim. Çoğunluk, bunu düzeltmek için de kullanılır, ilk denemede çoğunluk okuma ve yazma işlemleri kullanılır. Bunu takiben, Mongo'daki mantıksal saat aralıklarına ve kaotik oturumlara bakacağız. Bu durumda kodlama için Mongo C# sürücüsünü kullanacağım, ancak bu tamamen bana kalmış. Çoğaltma kümesi üyelerinin çoğu, Çoğunluk Okumasındaki bir sorgudan döndürülen verileri onayladı. Bir Çoğunluk Yazma ve ardından Çoğunluk Okuma kullanma düşüncesi, Yazmanızı Yazın sorunumuza çekici bir çözüm gibi görünebilir. Çoğunluk yazma işlemi anlaşıldığında, her ikincil sunucu en son Çoğunluk Yazma işleminin bellek içi anlık görüntüsünü tutar.

Her nesne, onu kullanarak uygulanan nedensel tutarlılık modelinde çok parçalı bir zaman damgasına atanır. Bu zaman damgaları, her kopyada nesnenin sürüm numarasını içeren bir vektörde depolanır.

Bir tanım var. Tutarlılık, işlemler arasındaki potansiyel nedensel ilişkileri yakalayarak tüm süreçlerin değişmeli işlemleri aynı sırayla gözlemlemesini sağlar. Diğer bir deyişle, sistemdeki tüm süreçler, nedensel olarak ilişkili işlemlerin nasıl gerçekleştirileceği konusunda ortak bir anlayışa sahiptir.

Aşağıdakiler, sıralı tutarlılığa yönelik adımlardır: a) sıralı yazmaların tutarlı sırası ; b) sıralı yazma işlemlerinin tutarlı sırası; ve c) sıralı yazma işlemlerinin tutarlı sırası. Nedensel tutarlılıkta yazarken, nedensel olarak ilişkili okumaları aynı sırada tutmak gerekir.

Nosql'de Tutarlılık Nedir?

Nosql'de Tutarlılık Nedir?
Görüntü Kaynağı: https://slidesharecdn.com

Sonuç olarak, NoSQL veritabanları, yüksek kullanılabilirliği sürdürmek için önemli miktarda tutarlılık gerektirir. Güçlü bir tutarlılık elde etmezler; bunun yerine uzun vadeli tutarlılığa yol açarlar. Base işlevselliğini garanti eden veri depoları bunu yapamayabilir.

Bir belge veri deposunun uygulanmasını değiştirmek, ilişkisel bir modelin uygulanmasından çok daha zor olacaktır. Ek olarak, bir uçak içi mağazada verileri yeniden düzenlemenin karmaşıklığı, RDBMS'nin basit ETL dönüşümlerinden önemli ölçüde daha fazladır. Farkında olmayan, anlamayan veya hata yaptıklarında işlerini kaybetmekten korkan müteahhitler ve mimarlar bu fırsatı kaçıracaktır. Çoğaltma ve gecikmenin süreçler olduğunu hatırlamak ve daha da kötüsü üçüncü taraf sistemleri sürece sürüklemek yerine atomik işlemleri mantıksal parçalara ayıracaklar. Eninde sonunda dışarıdan temin edilecek ve departmanı başka biri yönetmeye devam edecek.

Veritabanlarındaki tutarsızlıklar, yanlış veya eksik veriler, eksik kısıtlamalar, geçersiz tetikleyiciler veya yanlış yapılandırılmış basamaklar gibi çeşitli faktörlerden kaynaklanır. Tüm bu sorunlar nedeniyle veritabanında yanlış veriler saklanabilir. Sonuç olarak, analitiğin ve karar vermenin doğruluğu ve etkinliği açısından önemli sonuçlar olabilir. Eksiksiz ve tutarlı bir veritabanı şeması, verilerin doğruluğunu ve tutarlılığını sağlamaya yönelik en önemli adımdır. Ayrıca, iyi tanımlanmış bir şema, verilerin bir veritabanına doğru bir şekilde girilmesini ve verileri yöneten kuralların doğru bir şekilde yorumlanmasını sağlayacaktır. Bu, analitiklerin tutarsızlıkları önleyerek veritabanındaki verileri doğru bir şekilde yansıtmasını sağlar.

Nosql Veritabanları Bankacılık Ve Atm İşlemlerine Uygun Değil

Nosql ile veritabanı güvenilirliği, SQL ile olduğu kadar sorunsuz değildir çünkü çoğu daha sonraki tutarlılık modelini kullanır. Sonuç olarak, veriler zaman zaman tutarlı olmayabileceğinden, bankacılık ve ATM'den para çekme gibi işlemler için pek uygun değildirler.

Eşzamanlı ve Nedensel Olarak İlişkili Tutarlılık Nedir?

Eşzamanlı ve Nedensel Olarak İlişkili Tutarlılık Nedir?
Görsel Kaynak: https://slideserve.com

Eşzamanlı ve nedensel olarak ilişkili tutarlılık, iki veya daha fazla olay aynı anda meydana geldiğinde ve birbiriyle ilişkili olduğunda var olan bir tutarlılık türüdür. Bu tür bir tutarlılık, olayların tutarlı bir şekilde gerçekleşmesini sağlamanın gerekli olduğu fizik ve mühendislik gibi birçok alanda önemlidir.

Dağıtılmış bir sistem, verilerin paylaşıldığı ve çoğaltıldığı birçok bilgi işlem düğümünden oluşur. Tutarlılık, düğümlerin ve replikaların aynı anda aynı veri görünümüne sahip olmasını sağlayan dağıtılmış bir sistem özelliğidir. Zayıf bir tutarlılık biçimi kullanarak nedensel olarak ilişkili işlemlerde düzeni sağlamak için deneysel bir yöntemdir. Nedensel tutarlılık ile ardışık tutarlılık arasındaki temel fark, nedensel tutarlılığın toplam bir büyüklük sıralaması gerektirmemesidir. Sezgisel bir tutarlılık duygusu, okumaların yalnızca yazmalar nedensel olarak bağımlı olduğunda taze olduğunu ima eder. Aşağıda dört süreçten oluşan bir dağıtılmış sistem örneği verilmiştir: P1, P2, P3 ve P4.

Nedensellik kurma görevini yerine getiren işlemlerin sırasına göre kararlaştırılan süreçlerin sayısı alınarak hesaplanabilen bir özelliktir. Aşağıdaki gereksinimleri karşılayan herhangi bir sürecin tutarlı olduğu söylenir: herhangi iki P ve Q süreci için, eğer P Q'ya neden oluyorsa ve Q R'ye neden oluyorsa, o zaman P başka herhangi bir süreçte R'ye neden olur. Nedensel olarak ilgili tüm işlemlerin gerçekleştirilme sırası üzerinde anlaşmaya varan süreçlerin sayısının bir ölçüsüdür. Bir süreç, aşağıdaki gereksinimleri karşılıyorsa tutarlıdır: P, Q'ya neden olur ve Q, R'ye neden olur, ardından P, R'ye neden olur. Tutarlılık gereksinimi, gereksinimlerden biridir. Tutarlı süreçler, tutarlı bir şekilde kullanıldığında doğru sonuçları üretme olasılığı daha yüksektir. Bir sürecin tutarlılığı çeşitli şekillerde ölçülebilir. Buna bakmanın bir yolu, nedensel olarak ilişkili işlemlerin meydana geldiği sırada kaç işlemin kabul edildiğini düşünmektir. Sonuç olarak, bir tutarlılık indeksi vardır. Tutarlılık indeksi, bir sürecin ne kadar tutarlı bir şekilde sürdürüldüğünün bir ölçüsüdür. Tutarlı olmak için, bir süreç aşağıdaki gereksinimleri karşılamalıdır: herhangi iki süreç için, P, Q'ya neden olur ve Q, R'ye neden olur; dolayısıyla P, R'nin yanı sıra Q ve Q'ya da neden olur. Bir sürecin tutarlılık indeksi, onun ne kadar kararlı olduğunun bir ölçüsüdür. Bir süreç bu gereksinimleri karşılıyorsa, aşağıdakilerle tutarlı olduğu söylenir: P, Q'ya neden oluyorsa ve Q, R'ye neden oluyorsa, P, herhangi iki P ve Q işlemi için R'ye neden olur. Bir süreç tutarlılık gereksinimini karşılamıyorsa, kabul edilir tutarsız. Tutarsız bir sürecin yanlış bir sonuca yol açması daha olasıdır. Tutarlılık indeksi, bir sürecin ne kadar tutarlı olduğunu değerlendirmek için kullanılabilir. Bir sürecin tutarlılığını ölçme ve daha doğru nedensel sonuçlar üreten süreçleri belirleme yöntemidir.

Nedensel Tutarlılık ve Nihai Tutarlılık

Dağıtılmış sistemlerde iki ana tutarlılık türü vardır: nedensel tutarlılık ve nihai tutarlılık. Nedensel tutarlılık, iki olay birbiriyle ilişkiliyse, tüm süreçler tarafından aynı sırada görülmelerini garanti eder. Nihai tutarlılık, yeterli zaman verildiğinde, aynı ara durumları görmeseler bile tüm süreçlerin sistemin aynı son durumunu görmesini garanti eder.

Dağıtılmış Sistemde Nedensel Tutarlılık

Dağıtılmış veritabanlarında nedenselliği [1] belirlemek için bir tutarlılık tutarlılık kriteri kullanılabilir. Bir işlem nedensel olarak ilişkiliyse, dağıtılmış bir sistemin her düğümü aynı verileri okuma ve yazma sırasında görüntüler.

Nihai ve nedensel gibi diğer tutarlılık modelleri de iyi bilinmektedir. Dağıtılmış sistemlerde, geleneksel veritabanlarından daha yaygındırlar. Tutarlı bir model, bir sistem ve kullanıcılarının tutarlı bir anlaşmaya sahip olduğunu söylemenin süslü bir yoludur. Bir etkileşim oluştuğunda, bu özellikler sistemin nasıl davranacağını açıklar. Sistemimiz seri hale getirilebilir olduğunu iddia ediyorsa, konumu ne olursa olsun, tüm işlemlere küresel sıralarında görünen tüm işlemlerle tek bir küresel konum olarak görünmelidir. Sistemin uygun gördüğü şekilde serpiştirme işlemlerine izin verilir. Sürecin gerçek sırası garanti edilmese de (tanıma göre), bir operasyon sırası korunduğunda sağlanır.

Hatta bazı operasyonların yıllar önce gerçekleşmiş gibi görünmesi bile mümkündür. İşlemlerin (yazma/yazma) nedensel olarak ilişkili olması, bunların dağıtılma sırasının tüm işlemler için tek tip olması gerektiği anlamına gelir. Aşağıdaki görselde görüldüğü gibi her iki işlem de x'e farklı değerler yazdığı için sipariş garantisi yoktur. Yeni yazılar yazmayı bıraktığımızda, sistem sonunda daha tutarlı bir duruma yaklaşacaktır. Nihai tutarlılık garantisi, sistemde hiçbir güncelleme (yazma) yapılmayacağını ve tüm istemcilerin tam olarak nasıl çalıştığını görebileceğini belirtir. 100$'lık bir hesaba monoton karakterler yazarsanız, 165$ ücretlendirilirsiniz. Bir istemci, yazmalarınızın okunmasında (RYW) bir öğeyi güncellediğinde, güncelleme tamamlandıktan sonra o öğenin değeri döndürülür. PRAM, süreçlerin tüm işlemlere tek bir süreçten aynı şekilde bakmasını sağlayan bir ardışık düzen belleği türüdür.

Mongodb Nihai Tutarlılığı

Bu, okuduğunuz verilerin şu anda tutarlı olmayabileceği, ancak eninde sonunda tutarlı olacağı anlamına gelir. Bu, bir ikincilden okuyabilen herhangi bir readPreferences kullanılarak elde edilir.

MongoDB'de birincil veriler her zaman eşzamansız olarak çoğaltılırken, ikincil veriler eşzamanlı olarak çoğaltılır. MongoDB, günlük kaydı için varsayılan olarak w1: (başarılı bir şekilde birincil öğeye yazılır) ve j:false şeklindedir. Zaman uyumsuz çoğaltma nedeniyle, bir bölüm azınlık tarafında bölündüğünde veya birincilini kaybettiğinde, genellikle tutarlılık kaybı olur. Bölme sırasında, çeşitli düzeylerde gecikme ve tüm panoda tutarlı garantiler elde etmek için w ve j değerlerini ayarlayabiliriz. Partition olmadığında yazma hızı düşer, write olduğu zaman ise write replikasyon beklemez. Bir w & j kombinasyonu kullanıyorsanız, ikincil dosyalardan okuma/okumama tutarlılık seviyeleri üzerinde önemli bir etkiye sahip olabilir. MongoDB'nin dört farklı tutarlılık düzeyi vardır.

Yazmak için en iyi zaman, hiçbir bölümün olmadığı ve tüm düğümlerin etkin olduğu zamandır; MongoDB tutarlıdır ve düşük gecikme süresine sahiptir. İşlem yapan birincil kaybolduğunda ve bölüm doldurulduğunda, başarısız olan en yaygın yazma türüdür (hatalı writeTimeout). MongoDB'de Best Effort Availability'ye sahibiz çünkü kümeyi nasıl bölümlediğimizden bağımsız olarak her zaman bir kısmını, en azından bir yüzdesini kaybedeceğiz. PACELC Teoreminin CAP ve CP/EC'sinde, w:majority, j:true ve yalnızca birincilden READ, MongoDB'yi CP olarak kategorize etmek için kullanılabilir.

Mongodb Tutarlılığı Nasıl Sağlar?

Birden çok istemci aynı MongoDB verilerini aynı anda okuyabilir ve yazabilir. MongoDB, müşterilerinin aynı verileri aynı anda değiştirmesini önlemek için kilitleme ve eşzamanlılık yönetimi kullanır. Tek bir belgeye yazdığımızda, ya tamamen yazarız ya da hiç yazmayız ve müşteri her zaman tutarlı sonuçlar görür.

Nosql'de Nihai Tutarlılık Nedir?

Veri modellemede nihai tutarlılık kavramı, birden fazla düğüme dağıtılan NoSQL veritabanlarında yapılan değişikliklerin hepsine yansıtılmasını sağlamaktır. Sonuç olarak, aynı veritabanı sorgusu zaman içinde aynı sonuçları döndürür.