Elkülönítési szintek (WriteSerializable és Szerializált)

Az Azure Databricks Delta Lake két elkülönítési szintet támogat, amelyek szabályozzák, hogy egy adott tábla egyidejű műveletei hogyan működnek együtt:

Elkülönítési szint Leírás
Szerializálható A legerősebb elkülönítési szint. Biztosítja, hogy a véglegesített írási műveletek és az összes olvasás szerializálható legyen. A műveletek akkor engedélyezettek, ha van olyan sorozat, amely egyenként hajtja végre a táblában látható eredményt. Az írási műveletek esetében ez a sorozat megegyezik a táblázat előzményeiben látható sorrenddel.
WriteSerializable (alapértelmezett) A szerializálhatónál gyengébb elkülönítési szint. Biztosítja, hogy csak az írási műveletek (nem olvasások) szerializálhatók legyenek. Ez még mindig erősebb, mint a Pillanatkép elkülönítése. Az adatok konzisztenciájának és rendelkezésre állásának egyensúlyát biztosítja a leggyakoribb műveletekhez.

Az elkülönítési szintek hatása az olvasásokra

Az olvasási műveletek mindig pillanatkép-elkülönítést használnak. Az íráselkülönítési szint határozza meg, hogy az olvasó lát-e pillanatképet egy tábláról, amely az előzmények szerint "soha nem létezett".

  • Szerializálható: Az olvasó mindig csak az előzményeknek megfelelő táblákat látja
  • WriteSerializable: Az olvasó olyan táblázatállapotot láthat, amely nem létezik a Delta-naplóban

Példa: Egyidejű törlés és beszúrás

Fontolja meg azt a forgatókönyvet, amikor egy hosszú ideig futó törlési tranzakció és egy beszúrási tranzakció egyidejűleg indul el, és olvassa el a verziót v0. Az insert tranzakció először véglegesíti a műveletet, és létrehozza a v1 verziót. Ezt követően a törlési tranzakció megpróbálja véglegesíteni a következőt v2:

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

Ebben a forgatókönyvben insertTxn által beszúrt adatokat deleteTxn nem látta, és nem törölte őket.

  • Serializable: deleteTxn nem véglegesíthető, és ütközés lép fel
  • WriteSerializable: deleteTxn véglegesíthető, mert a tranzakciók megrendelhetők. Az eredményként kapott táblaállapot olyan, mintha insertTxn utána deleteTxntörtént volna, így a beszúrt sorok a táblázat részét képezik. A Delta előzményei azonban a fizikai kötelezettségsorrendet jelenítik meg (insertTxn a v1-nél korábbi deleteTxn a v2-nél).

Az elkülönítési szint beállítása

Az elkülönítési szint beállítása a ALTER TABLE következő paranccsal:

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

Ahol <level-name>, ott Serializable vagy WriteSerializable.

Example:

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

Mikor véglegesíti a Delta Lake a táblázat olvasása nélkül?

A Delta Lake INSERT vagy hozzáfűzési műveletek nem olvassák be a tábla állapotát a véglegesítés előtt, ha a következő feltételek teljesülnek:

  1. A logika SQL-logikával INSERT vagy hozzáfűzési móddal van kifejezve
  2. A logika nem tartalmaz olyan al lekérdezéseket vagy feltételes elemeket, amelyek hivatkoznak az írási művelet által megcélzott táblára

Más véglegesítésekhez hasonlóan a Delta Lake a tranzakciónapló metaadataival ellenőrzi és feloldja a táblaverziókat a véglegesítéskor, de a tábla egyik verziója sem olvasható be.

Megjegyzés:

Számos gyakori minta MERGE műveleteket használ az adatok táblázatfeltételek alapján történő beszúrásához. Bár lehetséges lehet újraírni ezt a logikát INSERT utasítások használatával, ha bármely feltételes kifejezés a céltábla egyik oszlopára hivatkozik, ezek az utasítások ugyanolyan egyidejűségi korlátozásokkal rendelkeznek, mint MERGE.

Következő lépések