Co to są gwarancje ACID w usłudze Azure Databricks?

Usługa Azure Databricks domyślnie używa usługi Delta Lake dla wszystkich operacji odczytu i zapisu oraz opiera się na gwarancjach ACID dostarczonych przez protokół Delta Lake typu open source. ACID to niepodzielność, spójność, izolacja i trwałość.

  • Niepodzielność oznacza, że wszystkie transakcje kończą się powodzeniem lub niepowodzeniem.
  • Gwarancje spójności odnoszą się do tego, jak dany stan danych jest obserwowany przez jednoczesne operacje.
  • Izolacja odnosi się do tego, jak równoczesne operacje potencjalnie powodują konflikt ze sobą.
  • Trwałość oznacza, że zatwierdzone zmiany są trwałe.

Chociaż wiele technologii przetwarzania danych i magazynowania opisuje transakcje ACID, określone gwarancje różnią się w zależności od systemu, a transakcje w usłudze Azure Databricks mogą różnić się od innych systemów, z którymi pracujesz.

Uwaga

Na tej stronie opisano gwarancje dotyczące tabel wspieranych przez usługę Delta Lake. Inne formaty danych i zintegrowane systemy mogą nie zapewniać gwarancji transakcyjnych dla operacji odczytu i zapisu.

Wszystkie operacje zapisu w usłudze Azure Databricks w magazynie obiektów w chmurze używają zatwierdzeń transakcyjnych, które tworzą pliki metadanych rozpoczynające się od plików danych i _committed_<id> wraz z _started_<id> nimi. Nie musisz wchodzić w interakcje z tymi plikami, ponieważ usługa Azure Databricks rutynowo czyści nieaktualne pliki metadanych zatwierdzenia.

W jaki sposób transakcje są ograniczone do zakresu w usłudze Azure Databricks?

Usługa Azure Databricks zarządza transakcjami na poziomie tabeli. Transakcje zawsze mają zastosowanie do jednej tabeli naraz. Do zarządzania transakcjami współbieżnych usługa Azure Databricks używa optymistycznej kontroli współbieżności. Oznacza to, że nie ma blokad odczytu lub zapisu względem tabeli, a zakleszczenie nie jest możliwe.

Domyślnie usługa Azure Databricks zapewnia izolację migawek podczas odczytu i izolacji z możliwością serializacji zapisu na zapisach. Izolacja z możliwością serializacji zapisu zapewnia silniejsze gwarancje niż izolacja migawki, ale stosuje tak silniejszą izolację tylko dla zapisów.

Operacje odczytu odwołujące się do wielu tabel zwracają bieżącą wersję każdej tabeli w czasie dostępu, ale nie przerywają współbieżnych transakcji, które mogą modyfikować przywoływaną tabelę.

Usługa Azure Databricks nie ma BEGIN/END konstrukcji, które umożliwiają grupowanie wielu operacji jako pojedynczej transakcji. Aplikacje modyfikujące wiele tabel zatwierdzają transakcje do każdej tabeli w sposób seryjny. Można połączyć operacje wstawiania, aktualizacji i usuwania względem tabeli w ramach pojedynczej transakcji zapisu przy użyciu polecenia MERGE INTO.

Jak usługa Azure Databricks implementuje niepodzielność?

Dziennik transakcji kontroluje niepodzielność zatwierdzenia. Podczas transakcji pliki danych są zapisywane w katalogu plików, który obsługuje tabelę. Po zakończeniu transakcji nowy wpis jest zatwierdzany w dzienniku transakcji, który zawiera ścieżki do wszystkich plików zapisanych podczas transakcji. Każde zatwierdzenie zwiększa wersję tabeli i sprawia, że nowe pliki danych są widoczne dla operacji odczytu. Bieżący stan tabeli składa się ze wszystkich plików danych oznaczonych jako prawidłowe w dziennikach transakcji.

Pliki danych nie są śledzone, chyba że dziennik transakcji rejestruje nową wersję. Jeśli transakcja zakończy się niepowodzeniem po zapisaniu plików danych w tabeli, te pliki danych nie spowodują uszkodzenia stanu tabeli, ale pliki nie staną się częścią tabeli. Operacja VACUUM usuwa wszystkie nieśledzone pliki danych w katalogu tabel, w tym pozostałe niezatwierdzone pliki z transakcji, które zakończyły się niepowodzeniem.

Jak usługa Azure Databricks implementuje trwałość?

Usługa Azure Databricks używa magazynu obiektów w chmurze do przechowywania wszystkich plików danych i dzienników transakcji. Magazyn obiektów w chmurze ma wysoką dostępność i trwałość. Ponieważ transakcje kończą się powodzeniem lub kończą się niepowodzeniem, a dziennik transakcji znajduje się obok plików danych w magazynie obiektów w chmurze, tabele w usłudze Azure Databricks dziedziczą gwarancje trwałości magazynu obiektów w chmurze, na którym są przechowywane.

Jak usługa Azure Databricks implementuje spójność?

Usługa Delta Lake używa optymistycznej kontroli współbieżności w celu zapewnienia gwarancji transakcyjnych między zapisami. W ramach tego mechanizmu operacje zapisu działają na trzech etapach:

  1. Odczyt: Odczytuje (w razie potrzeby) najnowszą dostępną wersję tabeli, aby zidentyfikować pliki, które należy zmodyfikować (czyli przepisać).
    • Zapisy, które są tylko dołączane, nie odczytują bieżącego stanu tabeli przed zapisem. Walidacja schematu wykorzystuje metadane z dziennika transakcji.
  2. Zapis: zapisuje pliki danych w katalogu używanym do definiowania tabeli.
  3. Weryfikowanie i zatwierdzanie:
    • Sprawdza, czy proponowane zmiany powodują konflikt z innymi zmianami, które mogły zostać zatwierdzone współbieżnie od czasu odczytania migawki.
    • Jeśli nie występują konflikty, wszystkie przygotowane zmiany zostaną zatwierdzone jako nowa migawka w wersji, a operacja zapisu zakończy się pomyślnie.
    • Jeśli występują konflikty, operacja zapisu kończy się niepowodzeniem z wyjątkiem współbieżnej modyfikacji. Ta awaria uniemożliwia uszkodzenie danych.

Optymistyczna współbieżność zakłada, że większość współbieżnych transakcji na danych nie może powodować konfliktu ze sobą, ale mogą wystąpić konflikty. Zobacz Poziomy izolacji i konflikty zapisu w usłudze Azure Databricks.

Jak usługa Azure Databricks implementuje izolację?

Usługa Azure Databricks domyślnie używa izolacji z możliwością serializacji zapisu dla wszystkich zapisów i aktualizacji tabeli. Izolacja migawki jest używana dla wszystkich odczytów tabeli.

Możliwość serializacji zapisu i optymistyczna kontrola współbieżności współpracują ze sobą, aby zapewnić wysoką przepływność zapisu. Bieżący prawidłowy stan tabeli jest zawsze dostępny, a zapis można uruchomić względem tabeli w dowolnym momencie. Operacje odczytu współbieżnego są ograniczone tylko przez przepływność magazynu metadanych i zasobów w chmurze.

Zobacz Poziomy izolacji i konflikty zapisu w usłudze Azure Databricks.

Czy usługa Delta Lake obsługuje transakcje wielotabelowe?

Usługa Delta Lake nie obsługuje transakcji obejmujących wiele tabel. Usługa Delta Lake obsługuje transakcje na poziomie tabeli .

Relacje klucza podstawowego i klucza obcego w usłudze Azure Databricks są informacyjne i nie są wymuszane. Zobacz Deklarowanie relacji klucza podstawowego i klucza obcego.

Co to znaczy, że usługa Delta Lake obsługuje operacje zapisu w wielu klastrach?

Usługa Delta Lake zapobiega uszkodzeniu danych, gdy wiele klastrów zapisuje jednocześnie w tej samej tabeli. Niektóre operacje zapisu mogą powodować konflikt podczas jednoczesnego wykonywania, ale nie powodują uszkodzenia tabeli. Zobacz Poziomy izolacji i konflikty zapisu w usłudze Azure Databricks.

Czy mogę modyfikować tabelę usługi Delta z różnych obszarów roboczych?

Tak, można jednocześnie modyfikować tę samą tabelę delty z różnych obszarów roboczych. Ponadto jeśli jeden proces pisze z obszaru roboczego, czytelnicy w innych obszarach roboczych zobaczą spójny widok.