MaxCompute, eşzamanlı yazma işleri için atomiklik, tutarlılık, yalıtım ve kalıcılık (ACID) garantileri sunar. Sunulan garantiler, standart tabloları mı yoksa işlem tabanlı (transactional) tabloları mı kullandığınıza bağlı olarak değişir.
Temel kavramlar
| Terim | Tanım |
|---|---|
| İşlem | MaxCompute'da gönderilen tek bir iş. |
| Veri nesnesi | Bölümlenmemiş bir tablo veya bölüm gibi verileri depolayan bir nesne. |
| INTO işi | INTO anahtar sözcüğünü içeren bir SQL işi; örneğin INSERT INTO veya DYNAMIC INSERT INTO. |
| OVERWRITE işi | OVERWRITE anahtar sözcüğünü içeren bir SQL işi; örneğin INSERT OVERWRITE veya DYNAMIC INSERT OVERWRITE. |
| Tunnel kullanarak veri yükleme | Bir INTO veya OVERWRITE işi. |
ACID garantileri
Atomiklik
Standart tablolar
Birden fazla iş çakışırsa MaxCompute yalnızca birinin başarılı olmasını sağlar.
Tek bir tablo veya bölüm üzerindeki CREATE, OVERWRITE ve DROP işlemleri için atomiklik garanti edilir.
MULTI-INSERT gibi tablolar arası işlemler için atomiklik garanti edilmez.
-
Atomiklik aşağıdaki uç durumlarda da garanti edilmeyebilir:
10.000'den fazla bölümde gerçekleştirilen bir DYNAMIC INSERT OVERWRITE işlemi.
Bir INTO işlemi. İşlem geri alma (rollback) gerçekleşirse veri temizleme başarısız olabilir. Orijinal veriler kaybolmaz ancak başarısız işten kalan artık veriler sistemde bulunabilir.
İşlem tabanlı tablolar (ek garanti)
Bölümlenmemiş bir tablo veya bölüm üzerinde UPDATE, DELETE ve küçük dosya BİRLEŞTİRME (MERGE) işlemleri için atomiklik garanti edilir. Örneğin, aynı bölümde eşzamanlı olarak iki UPDATE işlemi çalıştırılırsa tam olarak biri başarılı olur; kısmi yürütme veya her ikisinin de başarılı olması mümkün değildir.
Tutarlılık
Standart tablolar
OVERWRITE işleri için tutarlılık garanti edilir.
Bir INTO işi çakışma nedeniyle başarısız olursa başarısız işten kalan veriler sistemde bulunabilir.
İşlem tabanlı tablolar (ek garanti)
Bir INTO işi çakışma nedeniyle başarısız olursa başarısız işten kalan veriler sistemde bulunmaz.
Yalıtım
Standart tablolar
INTO dışı işlemler için MaxCompute okuma işlemlerinin gönderilmesini sağlar.
INTO işlemleri için bazı okuma işlemleri gönderilmeyebilir.
İşlem tabanlı tablolar (ek garanti)
INTO işlemleri: MaxCompute okuma işlemlerinin gönderilmesini sağlar.
Kalıcılık
MaxCompute tüm tablo türleri için veri kalıcılığı garantisi sunar. Bir işlem tamamlandıktan sonra değiştirilen veriler kalıcı olarak saklanır ve sistem arızası oluşsa bile kaybolmaz.
Çakışmaların nasıl çözüldüğü
Aynı hedef tablo veya bölümde işler eşzamanlı olarak çalıştırıldığında çakışma meydana gelebilir. Çözüm kuralı şöyledir:
Önce biten iş başarılı olur. Daha sonra biten iş başarısız olabilir.
Örnek
Aşağıdaki senaryo aynı bölüm üzerinde gerçekleştirilen iki UPDATE işlemini göstermektedir:
t0: job_A starts (UPDATE on partition p1)
t1: job_B starts (UPDATE on partition p1)
t2: job_A commits — succeeds, partition p1 is updated
t3: job_B attempts to commit — detects that p1 changed since job_B started reading → reports a conflict error
Job B, okuduğu verilerin artık eski sürümde olduğu için hata bildirir. Job A'nın sonucu korunur.
Çakışma sonuç matrisi
Aşağıdaki tablo, aynı bölümlenmemiş tablo veya bölümde aynı anda gönderilen iki işin sonuçlarını gösterir. "Daha erken" ve "daha geç", hangi işin önce bittiğini ifade eder.
| Daha erken biten iş | Daha geç biten INSERT OVERWRITE veya TRUNCATE | Daha geç biten INSERT INTO | Daha geç biten UPDATE veya DELETE | Daha geç biten küçük dosya MERGE |
|---|---|---|---|---|
| INSERT OVERWRITE veya TRUNCATE | Her ikisi de başarılı olur. Daha geç biten işin verileri daha erken biten işin verilerinin üzerine yazar. | Her ikisi de başarılı olur. Daha geç biten INSERT INTO, verilerini daha erken biten işin sonucuna ekler. | Daha geç biten UPDATE veya DELETE hata bildirir. | Daha geç biten küçük dosya MERGE hata bildirir. |
| INSERT INTO | Her ikisi de başarılı olur. Daha geç biten OVERWRITE verileri daha erken biten INSERT INTO sonucunun üzerine yazar. | Her ikisi de başarılı olur. Daha geç biten INSERT INTO, verilerini daha erken biten sonuca ekler. | Daha geç biten UPDATE veya DELETE hata bildirir. | Daha geç biten küçük dosya MERGE hata bildirir. |
| UPDATE veya DELETE | Her ikisi de başarılı olur. Daha geç biten OVERWRITE verileri daha erken biten UPDATE veya DELETE sonucunun üzerine yazar. | Her ikisi de başarılı olur. Daha geç biten INSERT INTO, verilerini daha erken biten sonuca ekler. | Daha geç biten UPDATE veya DELETE hata bildirir. | Daha geç biten küçük dosya MERGE hata bildirir. |
| Küçük dosya MERGE | Her ikisi de başarılı olur. Daha geç biten OVERWRITE verileri daha erken biten MERGE sonucunun üzerine yazar. | Her ikisi de başarılı olur. Daha geç biten INSERT INTO, verilerini daha erken biten sonuca ekler. | Daha geç biten UPDATE veya DELETE hata bildirir. | Daha geç biten küçük dosya MERGE hata bildirir. |
Özet kurallar
INSERT işlemleri (OVERWRITE ve INTO) birbirleriyle asla çakışmaz. Sıralamadan bağımsız olarak iki INSERT işi her zaman başarılı olur.
Hedef veriler değiştiğinde UPDATE, DELETE ve küçük dosya MERGE işlemleri başarısız olur. Hedef bölümlenmemiş tablo veya bölüm daha erken biten bir iş tarafından değiştirildiyse daha geç gelen UPDATE, DELETE veya küçük dosya MERGE işlemi çakışma hatası bildirir.
Meta verilerin güncellendiği sırada birden fazla işin eşzamanlı olarak çalıştığı uç durumlarda, işler meta veri değişikliklerinden kaynaklanan çakışma hataları da bildirebilir.