Aracılığıyla paylaş


Yalıtım düzeyleri (WriteSerializable ve Serializable)

Azure Databricks'te Delta Lake, belirli bir tablodaki eşzamanlı işlemlerin nasıl etkileşim kurduğunu denetleen iki yalıtım düzeyini destekler:

Yalıtım düzeyi Açıklama
Serileştirilebilir En güçlü yalıtım düzeyi. Kaydedilmiş yazma işlemlerinin ve tüm okuma işlemlerinin Serileştirilebilir olmasını sağlar. Bir kerede bir kez yürütülürken tabloda görüldüğü gibi aynı sonucu oluşturan bir seri dizi olduğu sürece işlemlere izin verilir. Yazma işlemleri için bu seri dizisi, tablonun geçmişinde görülen sırayla aynıdır.
WriteSerializable (Varsayılan) Serileştirilebilir'den daha zayıf bir yalıtım düzeyi. Yalnızca yazma işlemlerinin (okuma değil) serileştirilebilir olmasını sağlar. Bu, anlık görüntü yalıtımından daha güçlüdür. En yaygın işlemler için iyi bir veri tutarlılığı ve kullanılabilirlik dengesi sağlar.

Yalıtım düzeyleri okumaları nasıl etkiler?

Okuma işlemleri her zaman anlık görüntü yalıtımı kullanır. Yazma yalıtım düzeyi, okuyucunun geçmişe göre "hiç varolmamış" bir tablonun anlık görüntüsünü görüp göremeyeceğini belirler.

  • Seri hale getirilebilir: Okuyucu her zaman yalnızca geçmişe uygun tabloları görür
  • WriteSerializable: Okuyucu Delta günlüğünde bulunmayan bir tablo durumunu görebilir

Örnek: Eşzamanlı silme ve ekleme

Uzun süre çalışan bir silme işlemi ile bir ekleme işleminin aynı anda başlatıldığı ve her ikisinin de sürüm v0'ü okuduğu bir senaryo düşünün. Ekleme işlemi önce işleme alır ve sürümünü v1oluşturur. Bundan sonra silme işlemi işlemeye v2çalışır:

t0: deleteTxn_START
t1: insertTxn_START
t2: insertTxn_COMMIT(v1)
t3: deleteTxn_COMMIT(v2)

Bu senaryoda, deleteTxn tarafından insertTxn eklenen verileri görmedim ve silmedim:

  • Serializable: deleteTxn işleme izin verilmez ve bir çakışma meydana gelir
  • WriteSerializable: deleteTxn işlemler sıralanabildiği için işlemeye izin verilir. Elde edilen tablo durumu, insertTxn olduktan sonra deleteTxn gerçekleşmiş gibi görünür, bu nedenle eklenen satırlar tablonun bir parçasıdır. Ancak Delta geçmişi fiziksel taahhüt sırasını v1'de insertTxn, deleteTxn v2'den önce gösterir.

Yalıtım düzeyini ayarlama

komutunu kullanarak ALTER TABLE yalıtım düzeyini ayarlayın:

ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.isolationLevel' = <level-name>)

<level-name> Serializable veya WriteSerializable'dir.

Example:

-- Change from default WriteSerializable to Serializable
ALTER TABLE my_table SET TBLPROPERTIES ('delta.isolationLevel' = 'Serializable')

Delta Lake tabloyu okumadan ne zaman işleme yapar?

Delta Lake INSERT veya ekleme işlemleri, aşağıdaki koşullar karşılandığında işlemeden önce tablo durumunu okumaz:

  1. Mantık, SQL mantığı veya ekleme modu kullanılarak INSERT ifade edilir
  2. Mantık, yazma işlemi tarafından hedeflenen tabloya başvuran alt sorgular veya koşullular içermiyor

Diğer işlemelerde olduğu gibi Delta Lake de işlemede tablo sürümlerini doğrulamak ve çözümlemek için işlem günlüğü meta verilerini kullanır, ancak tablonun hiçbir sürümü aslında okunmaz.

Uyarı

Birçok yaygın desen, tablo koşullarına göre veri eklemek için MERGE işlemleri kullanır. INSERT deyimlerini kullanarak bu mantığı yeniden yazmak mümkün olsa da, herhangi bir koşullu ifade hedef tablodaki bir sütuna başvuruda bulunursa, bu deyimler MERGEile aynı eşzamanlılık sınırlamalarına sahiptir.

Sonraki Adımlar