Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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:
deleteTxnişleme izin verilmez ve bir çakışma meydana gelir -
WriteSerializable:
deleteTxnişlemler sıralanabildiği için işlemeye izin verilir. Elde edilen tablo durumu,insertTxnolduktan sonradeleteTxngerç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'deinsertTxn,deleteTxnv2'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:
- Mantık, SQL mantığı veya ekleme modu kullanılarak
INSERTifade edilir - 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.