İşlem serileştirme ve izolasyon

Bu sayfada, işlem verilerinin çekişmesi, serileştirilmesi ve izole ediliyor. İşlem kodu örnekleri için bkz. işlemler ve toplu yazma işlemleri.

İşlemler ve veri çakışması

Bir işlemin başarılı olması için okuma işlemleri tarafından alınan belgeler İşlem dışındaki işlemler tarafından değiştirilmeden kalmalıdır. Başka bir dokümanlardan birini değiştirmeye çalıştığında, bu işlem sırasında işlemle veri çakışması durumu.

Veri çakışması
İki veya daha fazla işlemin aynı dokümanı kontrol etmek için rekabet etmesi. Örneğin, bir işlem bir belgenin tutarlı kalmasını, eş zamanlı olarak işlemi, bu dokümanın alan değerlerini güncellemeye çalışıyor.

Cloud Firestore, aşağıdaki işlemlerden birini geciktirerek veya başarısız olarak sorumluyuz. Cloud Firestore istemci kitaplıkları veri çakışması nedeniyle başarısız olan işlemleri otomatik olarak yeniden dener. Ardından sayısız yeniden deneme sayısı, işlem işlemi başarısız olur ve hata döndürür mesaj:

ABORTED: Too much contention on these documents. Please try again.

Hangi işlemin başarısız veya gecikmeli olduğuna karar verilirken davranış, kullanabilirsiniz.

  • Mobil/web SDK'ları iyimser eşzamanlılık kullanıyor kontrol eder.

  • Sunucu istemci kitaplıkları, kötümser eşzamanlılık denetimlerini kullanıyor.

Mobil/web SDK'larında veri çakışması

Mobil SDK'lar (Apple platformları, Android, Web, C++), aşağıdakileri sağlamak için iyimser eşzamanlılık kontrollerini kullanır: veri anlaşmazlığını çözme.

İyimser eşzamanlılık kontrolleri
Veri çakışmasının olası olmadığı veya olmadığı varsayımına dayalı olarak veri tabanının kilitlerini tutmasına yardımcı olur. İyimser işlemler veritabanı kullanmaz diğer işlemlerin verileri değiştirmesini engellemek için kilitler.

Mobil/web SDK'ları iyimser eşzamanlılık denetimlerini kullanır, çünkü bu kontroller güvenilir olmayan ağ bağlantısı ve yüksek gecikme süreleri sunar. Kilitleniyor çok fazla veri uyuşmazlığına neden olabilir. başarısız olur.

Mobil/Web SDK'larında, bir işlem okuduğunuz tüm belgeleri takip eder inceleyebilirsiniz. İşlem yalnızca kendi yazma işlemlerini tamamlar. if işlemin yürütülmesi sırasında bu belgelerden hiçbiri değişmediyse. Varsa Doküman değiştirildiğinde, işlem işleyici işlemi yeniden dener. Eğer İşlem, birkaç yeniden denemeden sonra temiz bir sonuç alamaz. başarısız oldu.

Sunucu istemci kitaplıklarındaki veri çakışması

Sunucu istemci kitaplıkları (C#, Go, Java, Node.js, PHP, Python, Ruby) kötümser eşzamanlılık kontrolleri veri anlaşmazlığını çözüme kavuşturur.

Kötümser eşzamanlılık kontrolleri
Veri anlaşmazlığının olası olduğu varsayımını temel alır. Kötümser işlemler, diğer işlemlerin verileri değiştirmesini önlemek için veritabanı kilitleri kullanır.

Sunucu istemci kitaplıkları, kötümser eşzamanlılık denetimlerini kullanır çünkü veri tabanıyla güvenilir bir bağlantı kurulabilir ve gecikmenin düşük olduğu varsayılır.

Sunucu istemci kitaplıklarındaki işlemler, açtıkları dokümanlara okuyun. Belgelerdeki işlem kilidi diğer işlemleri engeller. ve işlemsel olmayan yazma işlemleri için bu belgenin değiştirilmesinden ibaret değildir. CEVAP işlem, kaydetme zamanında doküman kilitlerini serbest bırakır. Aynı zamanda zaman aşımına uğrarsa veya herhangi bir nedenle başarısız olursa kilitlerini açar.

Bir işlem dokümanı kilitlediğinde diğer yazma işlemlerinin, dokümanın işlemini gerçekleştirmeniz gerekir. İşlemler kronolojik sırada olmasını sağlar.

Serileştirilebilir izolasyon

İşlemler arasındaki veri çakışması, veritabanı izolasyonuyla yakından ilgilidir seviyelere dokunun. Bir veritabanının izolasyon düzeyi, sistemin ne kadar iyi performans gösterdiğini eşzamanlı işlemler arasındaki çakışmaları ele alır. Çatışma kaynağı şu veritabanı koşullarını karşılamanız gerekir:

  • İşlemler için doğru ve tutarlı veriler gerekir.
  • Kaynakların verimli bir şekilde kullanılması için veritabanları, işlemleri eşzamanlı olarak yürütür.

Yalıtım seviyesi düşük olan sistemlerde, işlem içinde bir okuma işlemi kaydedilmemiş değişikliklere ait yanlış verileri eşzamanlı olarak okuyabilir işlemidir.

Serizlenebilir yalıtım, en yüksek yalıtım düzeyini tanımlar. Serileştirilebilir izolasyon şu anlama gelir:

  • Veritabanının işlemleri seri olarak yürüttüğünü varsayabilirsiniz.
  • İşlemler, eşzamanlı işlemlerdeki kaydedilmemiş değişikliklerden etkilenmez.

Bu garanti, veritabanında birden fazla işlem gerçekleştirilse bile geçerli olmalıdır. paralel olarak işlem yapılır. Veritabanı, müşterilerin şu işlemleri yapmasını sağlamak için eşzamanlılık denetimlerini uygulamalıdır: bu garantiyi kıracak anlaşmazlıkları çözer.

Cloud Firestore, işlemlerin seri şekilde izole edilmesini garanti eder. Cloud Firestore'daki işlemler kayıt altına alınır ve kaydedilir gerekir.

Kaydetme süresine göre serileştirilebilir izolasyon

Cloud Firestore her işleme bir kaydetme süresi atar. Bu süre zaman içinde tek bir noktada: Cloud Firestore bir işlemin herhangi bir işlem yapılmadığından, dizindeki tüm okuma ve yazma işlemlerini İşlemin tam olarak taahhüt anında gerçekleşmesi gerekir.

Bir işlemin yürütülmesi biraz zaman gerektirir. Bir projenin işlemin taahhüt zamanından önce başlaması ve birden çok işlemler çakışabilir. Cloud Firestore, serileştirilebilir izolasyonu destekler ve aşağıdakileri garanti eder:

  • Cloud Firestore, işlemleri kaydetme zamanına göre sırayla kaydeder.
  • Cloud Firestore, işlemleri eşzamanlı verilerden izole eder kaydetme zamanına sahip olur.

Eşzamanlı işlemler arasında veri çakışması durumunda Cloud Firestore, anlaşmazlıkları çözüme ulaştırmak için iyimser ve kötümser eşzamanlılık kontrollerini kullanır.

İşlem içinde izolasyon

İşlem izolasyonu, bir işlem içindeki yazma işlemleri için de geçerlidir. Bir işlem içindeki sorgular ve okumalar, önceki yazma işlemlerinin sonuçlarını görmez. bir kontrol listesidir. Bir dokümanın içindeki bir dokümanı değiştirseniz veya silseniz bile, söz konusu işlemdeki tüm belge okumaları, İşlemin yazma işlemlerinden önceki bir belgede Belge o sırada mevcut değilse okuma işlemleri hiçbir şey döndürmez.

Veri çakışmasıyla ilgili sorunlar

Veri çakışması ve bunların nasıl çözüleceği hakkında daha fazla bilgi için sorun giderme sayfasına göz atın.