Strona głównaArtykuły

Od Jezera Danych do Lakehouse: Dlaczego Raw Object Storage Potrzebowało Warstwy Tablicowej

Jak niezarządzane jezera danych przekształciły się w niewielkie 'porywiska danych,' a jak formaty tabel, takie jak Delta Lake i Apache Iceberg, wracają ACID transakcje i nadzór schematów do ekonomicznych magazynów obiektowych.

mysimulator teamZaktualizowano — czerwiec 2026≈ 5 min czytania▶ Otwórz symulację

Obietniczko i pułapka magazynu danych

Prowoz magazynu danych brzmiał prosto i prawdziwie przyciągająco: przechowywując wszystko — strukturalne tabeli, półstrukturalne pliki JSON, oryginalne pliki dzienników, obrazy — w dość ekonomicznej, wytrzymalnej, prawie nieograniczonych magazynach obiektowych, takich jak S3, bez konieczności zdefiniowania schematu przed pisaniem. Ta filozofia 'schematowy podczas odczytu' oznaczała, że płyty przetwarzania nigdy nie musiały czekać na decyzję modelera danych dotyczącej typów kolumn; można było po prostu rzucić oryginalne dane i rozwiązać ich interpretację później, co było prawdziwą ulepszeniem w stosunku do zaciętych pipeline ładowania magazynu danych, które odrzucali rekordy niepasujące do przygotowanego schematu.

Pułapka polegała na tym, że folder pełen plików to nie jest baza danych, a większość gwarancji, z którymi ludzie liczą od bazy danych, nie istnieje w oryginalnych magazynach obiektowych. Dwa zadania piszące do tej samej lokalizacji jednocześnie mogą łączyć swoje wyjście w pomyślne chaos, ponieważ magazyny obiektów zazwyczaj nie dostarczają atomowych komitów wielu plików. Zadanie, które zakończyło się połowie pisania, zostawia folder w półpisanym stanie bez sposobu na wykrycie, które pliki należą do niepowodzenia. Nic nie gwarantuje, że pliki w folderze 'użytkowników' mają zgodny schemat, więc po sześciu miesiącach połowa plików ma dodatkową kolumnę i zadania dalsze zaczynają się zawracać ze schematowymi błądami, których nie można przewidzieć. Inżynierowie danych zaczęli nazywać oczekiwany rezultat 'zabawnym swampem danych': technicznie wszystkie Twoje dane, praktycznie bezużyteczne bez archeologii.

Co rzeczywiście dodaje format tablicowy

Formaty tabel — Apache Iceberg, Delta Lake i Apache Hudi to trzy główne z nich — rozwiązują to dodając warstwę metadanych na topie tych samych plików prostych przechowywanych w magazynie obiektowym, bez potrzeby oddzielnego motora bazy danych kontrolującego magazyn. Zamiast tabeli być 'takimi plikami, które się teraz znajdują w tym folderze', tabela staje się sekwencja niezmienionych zrzutów, każdy z którego to jest manifestem zawierającym dokładny zestaw danych plików tworzących tabelę na dany moment z rzutu. Operacja zapisu nie dotyka istniejących plików; zamiast tego pisze nowe pliki danych, a następnie atomicznie wymienia się nowy manifest wskazujący na stare pliki oraz nowe (dla dodawania) lub zmodyfikowane zestawy (dla modyfikacji lub usunięcia), i dopiero po pomyślnym wymianie atomowego wskaźnika, nowy zrzut stać się widoczny dla czytelników.

Tylko jedna mekanizm — atomowe wymiany manifestów — jest to, co dostarcza transakcji ACID na topie magazynu, który nigdy nie był zaprojektowany do ich dostarczania. Dwa pisarze rzucające się jednocześnie do zatwierdzenia zostaną seriale przez kontrolę współczesności optymistycznej: ten, który pierwszy zatwierdzi swój nowy manifest wygrywa, a drugi pisarz wykryje konflikt i albo ponowić operację przeciwko nowemu stanowi bazowego lub pomyślnie zakończyć, zamiast dwa zapisy nieco się łącząc w uszkodzone pliki. Czytelnicy natomiast zawsze widzą jednoznaczny zrzut spójny przez całe trwanie ich zapytania, ponieważ czytają stały manifest, a nie folder, którego zawartość może się zmienić podczas skanowania.

Evolucja schematu i czasopasa jako bocznym skutkiem

Dokument manifestu, a nie fizyczny układ plików, określa strukturę tabeli w dowolnym zrzędle. Dlatego formaty tabel mogą wspierać evolucję schematu — dodawanie kolumny, zmianę nazwy kolumny lub typu danych — bez ponownego pisania każdego istniejącego pliku danych. Stare pliki danych są czytane z starszymi schematami dla kolumn, które zawierają, a nowe kolumny pojawiają się jako null dla wierszy zapisanych przed utworzeniem tej kolumny; warstwa metadanych rozwiązuje różnicę podczas wykonywania zapytania, zamiast wymagać drogich operacji backfill na petabajtach historicznych plików.

Ten sam mechanizm zrzędliowy również daje Ci bezpłatnie możliwość czasopasu: ponieważ stare manifesty nie są usuwane natychmiast (tylko zbierane jako śmieci po pewnym okresie przechowywania), możesz pytać o tabelę „z daty” wcześniejszego zrzędla lub timestampu, co jest nieocenione w celach reprodukcji raportu, który wyglądał inaczej tygodniem wcześniej, lub przywracania po złym zapisie, przepinając tabelę do manifestu, który ją poprzedza. Konceptualnie to ta sama technika co czasopas Snowflake nad niewzruszanymi mikropartycjonami — inna implementacja, taka sama podstawa: nigdy naprawdę nie usuwaj starego stanu, dopóki na pewno go nie potrzebujesz.

Lakehouse: jedna kopię danych, wiele silników obliczeniowych

Termin 'lakehouse' opisuje otrzymany architekturę: dane spadają i pozostają w ekonomicznej usłudze przechowywania obiektowego w otwartym formacie tabel. Jednak wiele silników obliczeniowych — Spark, Trino, Snowflake, Flink — może czytać i pisać te same fizyczne tabele poprzez wspólny warstwy metadanych otwartych, zamiast blokować dane w własnych proprietarnych formatach przechowywania. To bezpośrednio atakuje tradycyjny problem magazynu danych polegający na utrzymywaniu oddzielnych i odchylonych kopii tych samych danych dla różnych narzędzi: zamiast zadania ETL skopiować dane z lake do formatu specyficznego dla magazynu danych dla narzędzi BI, silnik zapytania narzędzia BI czyta bezpośrednio tabelę lakehouse.

Zasada tożsamości polega na tym, że format tabeli lakehouse jest spekifikacją, a nie zarządzanym usługą, więc ktoś nadal musi uruchamiać kompaktowanie (połączenie wielu małych plików wyprodukowanych przez zapisy strumieniowe w mniej więcej większych dla efektywności skanowania) i oczyszczanie śmieci (faktyczne usunięcie starych plików obrazów, gdy przekraczają okno przechowywania) jako zadania utrzymania. Pominąć to utrzymanie spowoduje upadłość tabeli lakehouse dokładnie tak samo, jak bazy danych bez kompaktowania: wydajność zapytań spada wraz z wzrostem liczby małych plików, mimo że gwarancje ACID pozostają niezmienione przez cały czas.

Często zadawane pytania

Jaka jest rzeczywista różnica między jeziorem danych a lakehouse?

Jeziro danych to tylko pliki w magazynie obiektów bez gwarancji transakcyjnych; lakehouse dodaje warstwę metadanych w formacie tabeli (np. Delta Lake lub Iceberg) na ten sam magazyn, zapewniając transakcje ACID, sprawdzanie schematu i podróż w czasie, podczas zachowywania podstawowych plików dość drobnych i otwartych.

Jak table formaty osiągają zapisy atomowe na obiekcie przechowywania, który nie jest zaprojektowany na to?

Nigdy nie modyfikują istniejących plików miejscowo; pisanie tworzy nowe pliki danych i następnie wymieniają je w sposób atomowy poprzez nowy manifest metadanych, który wskaże na właściwą grupę plików, tak że czytelnicy albo widzą pełny stary obraz, albo pełen nowy, nigdy nie częściowego stanu.

Dlaczego jeziora danych otrzymały imię 'względnie zatępiłe jezioro danych'?

Bez gwarancji sprawdzania schematu ani transakcyjnych, jeziora akumulowały niejednorodne formaty plików, półzapisane zadania niepowodujące i niewyjaśnioną strukturę w czasie, co sprawiło, że dane były technicznie obecne, ale faktycznie niezawodne do zapytania.

Czy nadal muszę utrzymywać tabelę lakehouse, czy jest ona całkowicie automatyczna?

Nadal musisz okresowo kompaktować, aby łączyć małe pliki w większe i usuwać stare obrazy wygasłe; format tabeli gwarantuje poprawność, ale nie automatycznie optymalizuje układ fizyczny plików dla ciebie.

Wypróbuj na żywo

Wszystko powyżej działa bezpośrednio w Twojej przeglądarce — otwórz Data Lake to Lakehouse Explorer i zmieniaj parametry podczas działania. Nic nie jest instalowane ani przesyłane na serwer, cały model działa w jednej karcie.

▶ Otwórz symulację Data Lake to Lakehouse Explorer

Co znalazłeś?

Dodaj kroki odtworzenia (opcjonalnie)