Sdílet prostřednictvím


Co jsou záruky ACID v Azure Databricks?

Azure Databricks ve výchozím nastavení používá Delta Lake pro všechna čtení a zápisy a staví na zárukách ACID poskytovaných opensourcovým protokolem Delta Lake. ACID je zkratka pro atomicitu, konzistenci, izolaci a odolnost.

  • Atomicita znamená, že všechny transakce buď proběhnou úspěšně, nebo zcela selžou.
  • Záruky konzistence souvisejí s tím, jak je daný stav dat pozorován souběžnými operacemi.
  • Izolace označuje, jak souběžné operace mohou vzájemně kolidovat.
  • Stálost znamená, že potvrzené změny jsou trvalé.

I když mnoho technologií zpracování dat a skladování popisuje transakce ACID, konkrétní záruky se liší podle systému a transakce v Azure Databricks se můžou lišit od jiných systémů, se kterými jste pracovali.

Poznámka:

Tato stránka popisuje záruky pro tabulky zálohované službou Delta Lake. Jiné formáty dat a integrované systémy nemusí poskytovat transakční záruky pro čtení a zápisy.

Všechny zápisy Azure Databricks do cloudového úložiště objektů používají transakční potvrzení, která vytvářejí soubory metadat začínající datovými _started_<id> soubory a _committed_<id> společně s nimi. S těmito soubory nemusíte pracovat, protože Azure Databricks pravidelně vyčistí zastaralé soubory metadat potvrzení.

Jak jsou transakce vymezeny v Azure Databricks?

Azure Databricks spravuje transakce na úrovni tabulky. Transakce se vždy vztahují na jednu tabulku najednou. Pro správu souběžných transakcí používá Azure Databricks optimistickou kontrolu souběžnosti. To znamená, že neexistují žádné zámky při čtení nebo zápisu proti tabulce a zablokování není možné.

Azure Databricks ve výchozím nastavení poskytuje izolaci snímků při čtení a serializovatelné izolaci zápisu při zápisech. Izolace s možností serializovatelného zápisu poskytuje silnější záruky než izolace snímků, ale vztahuje se na silnější izolaci pouze pro zápisy.

Operace čtení odkazující na více tabulek vrací aktuální verzi každé tabulky v době přístupu, ale nepřerušují souběžné transakce, které mohou upravovat odkazované tabulky.

Azure Databricks nemá BEGIN/END konstrukty, které umožňují seskupit více operací jako jednu transakci. Aplikace, které upravují více tabulek potvrdí transakce do každé tabulky sériovým způsobem. V tabulce můžete zkombinovat vložení, aktualizace a odstranění do jedné transakce zápisu pomocí MERGE INTO.

Jak Azure Databricks implementuje atomicitu?

Transakční protokol řídí atomicitu potvrzení. Během transakce se datové soubory zapisují do adresáře souborů, který tabulku zálohuje. Po dokončení transakce se nová položka potvrdí do transakčního protokolu, který obsahuje cesty ke všem souborům zapsaným během transakce. Každé potvrzení zvýší verzi tabulky a zviditelní nové datové soubory pro operace čtení. Aktuální stav tabulky se skládá ze všech datových souborů označených jako platné v transakčních protokolech.

Datové soubory nejsou sledovány, pokud transakční protokol nezapíše novou verzi. Pokud transakce selže po zápisu datových souborů do tabulky, tyto datové soubory nebudou poškozeny stav tabulky, ale soubory nebudou součástí tabulky. Operace VACUUM odstraní všechny nesledované datové soubory v adresáři tabulky, včetně zbývajících nepotvrzených souborů z neúspěšných transakcí.

Jak Azure Databricks implementuje odolnost?

Azure Databricks používá cloudové úložiště objektů k ukládání všech datových souborů a transakčních protokolů. Cloudové úložiště objektů má vysokou dostupnost a odolnost. Vzhledem k tomu, že transakce jsou buď úspěšné, nebo zcela selžou a protokol transakcí se nachází společně s datovými soubory v cloudovém úložišti objektů, zdědí tabulky v Azure Databricks záruky odolnosti cloudového úložiště objektů, na kterém jsou uložené.

Jak Azure Databricks implementuje konzistenci?

Delta Lake používá řízení optimistické souběžnosti k poskytování transakčních záruk mezi zápisy. V rámci tohoto mechanismu se zápisy provádějí ve třech fázích:

  1. Čtení: Přečte (v případě potřeby) nejnovější dostupnou verzi tabulky, aby bylo možné zjistit, které soubory je potřeba upravit (to znamená přepsat).
    • Zápisy, které jsou jen pro připojení, před zápisem nepřečtou aktuální stav tabulky. Ověřování schématu využívá metadata z transakčního protokolu.
  2. Zápis: Zapisuje datové soubory do adresáře použitého k definování tabulky.
  3. Ověření a potvrzení:
    • Zkontroluje, jestli navrhované změny kolidují s jinými změnami, které mohly být souběžně potvrzeny od načtení snímku.
    • Pokud nedojde ke konfliktům, všechny fázované změny se potvrdí jako snímek s novou verzí a operace zápisu proběhne úspěšně.
    • Pokud dojde ke konfliktům, operace zápisu selže s výjimkou souběžné úpravy. Toto selhání brání poškození dat.

Optimistická souběžnost předpokládá, že většina souběžných transakcí na vašich datech nemůže být v konfliktu s ostatními, ale může dojít ke konfliktům. Viz Úrovně izolace a konflikty zápisu v Azure Databricks.

Jak Azure Databricks implementuje izolaci?

Azure Databricks ve výchozím nastavení používá serializovatelnou izolaci zápisu pro všechny zápisy a aktualizace tabulek. Izolace snímků se používá pro všechna čtení tabulek.

Zapisujte serializovatelnost a optimistické řízení souběžnosti společně, abyste zajistili vysokou propustnost pro zápisy. Aktuální platný stav tabulky je vždy dostupný a pro tabulku lze kdykoli spustit zápis. Souběžná čtení jsou omezená pouze propustností metastoru a cloudových prostředků.

Viz Úrovně izolace a konflikty zápisu v Azure Databricks.

Podporuje Delta Lake transakce s více tabulkami?

Delta Lake nepodporuje transakce s více tabulkami. Delta Lake podporuje transakce na úrovni tabulky .

Vztahy mezi primárním klíčem a cizím klíčem v Azure Databricks jsou informativní a nevynucují se. Viz Deklarujte vztahy primárního klíče a cizího klíče.

Co znamená, že Delta Lake podporuje zápisy do více clusterů?

Delta Lake zabraňuje poškození dat, když více clusterů zapisuje do stejné tabulky současně. Některé operace zápisu můžou během souběžného spuštění kolidovat, ale nepoškodí tabulku. Viz Úrovně izolace a konflikty zápisu v Azure Databricks.

Můžu upravit tabulku Delta z jiného pracovního prostoru?

Ano, stejnou tabulku Delta můžete souběžně upravovat z různých pracovních prostorů. Navíc pokud jeden proces píše z pracovního prostoru, čtenáři v jiných pracovních prostorech uvidí konzistentní zobrazení.