Порушення та пастки озера даних
Пропозиція щодо озера даних була простою і справді переконливою: зберігати все — структуровані таблиці, напівструктурований JSON, необроблені файли журналів, зображення — у дешевому, довготривалому, практично нескінченному сховищі об’єктів, такому як S3, без необхідності впроваджувати схеми до запису. Ця філософія «схема на зчитуванні» означала, що конвеєри введення даних ніколи не блокувалися через те, що моделі даних вирішували типи стовпців заздалегідь; ви могли спочатку скидати необроблені дані та визначити пізніше, як їх інтерпретувати, що було значним покращенням порівняно з жорсткими конвеєрами завантаження сховищ, які відхиляли будь-який запис, який не відповідав попередньо визначеній структурі.
Пастка полягала в тому, що папка з файлами не є базою даних, і більшість гарантій, які люди вважають за гордість, просто не дійсні для сховищ об’єктів. Дві роботи, які записують у одне й те саме місце одночасно, можуть переплітати свої вихідні дані в пошкоджений безлад, оскільки сховища об'єктів зазвичай не надають атомічних транзакцій для багатофайлового запису. Робота, яка зазнає невдачі посередині процесу запису, залишає каталог у частково написаному стані без можливості визначити, які файли належать невдалим спробу. Ніщо не гарантує, що файли в каталозі «користувачі» дійсно мають узгоджену схему, тому через шість місяців половина файлів має додатковий стовпець і подальші роботи з обробки даних падають через несумісність схем, яку неможливо передбачити. Інженери даних почали називати прогнозований результат «болотом даних»: технічно все ваше дані, практично непридатні без археологічних розкопок.”]} طالما لا توجد أخطاء في JSON. (Just in case.)
paragraphs_uk_alternative_version_1
paragraphs_uk_alternative_version_2
paragraphs_uk_alternative_version_3
paragraphs_uk_alternative_version_4
paragraphs_uk_alternative_version_5
paragraphs_uk_alternative_version_6
paragraphs_uk_alternative_version_7
paragraphs_uk_alternative_version_8
paragraphs_uk_alternative_version_9
paragraphs_uk_alternative_version_10
paragraphs_uk_alternative_version_11
paragraphs_uk_alternative_version_12
paragraphs_uk_alternative_version_13
paragraphs_uk_alternative_version_14
paragraphs_uk_alternative_version_15
paragraphs_uk_alternative_version_16
paragraphs_uk_alternative_version_17
paragraphs_uk_alternative_version_18
paragraphs_uk_alternative_version_19
paragraphs_uk_alternative_version_20
paragraphs_uk_alternative_version_21
paragraphs_uk_alternative_version_22
paragraphs_uk_alternative_version_23
paragraphs_uk_alternative_version_24
paragraphs_uk_alternative_version_25
paragraphs_uk_alternative_version_26
paragraphs_uk_alternative_version_27
paragraphs_uk_alternative_version_28
paragraphs_uk_alternative_version_29
paragraphs_uk_alternative_version_30
Чому це важливо
Ця схема — додавання шару таблиць — вирішує проблему шляхом додавання метаданих шару поверх тих самих необроблених об’єктів зберігання, без необхідності в окремому движку баз даних для володіння сховищем. Замість того, щоб «таблиця» була «тим файлом, який випадково знаходиться в цьому каталозі зараз», таблиця стає послідовністю незмінних знімків, кожен з яких є маніфестом, що перераховує точний набір файлів даних, які утворюють таблицю на момент цього знімка. Операція запису ніколи не торкається існуючих файлів; вона пише нові файли даних, а потім атомійно замінює маніфест, який вказує на старі файли плюс нові (для додавання) або змінений набір (для оновлення чи видалення), і лише після того, як успішно завершиться ця атомарна заміна посилань, з’являється новий знімок для читання.
Ця єдина схема — атомічні заміни маніфестів — забезпечує ACID-транзакції поверх сховищ, які ніколи не були розроблені для їх надання. Двоє авторів, що поспішають із внесенням змін одночасно, будуть мати свої зміни узаряджені через оптимістичний контроль конфліктів: той автор, який першим внесе свій новий маніфест, переможе, а другий автор виявить конфлікт і або повторить спробу проти нової базової версії, або завершить операцію з помилкою, замість того, щоб дві зміни безшумно перепліталися в пошкоджені файли. Читачі, з іншого боку, завжди бачать єдиний узгоджений знімок протягом усього часу виконання запиту, оскільки вони читають фіксований маніфест, ніколи не каталог, вміст якого може змінитися під час сканування.
Еволюція схеми та подорожі в часі як побічні ефекти
Оскільки проміжне представлення визначає схему та структуру таблиці на певному моменті часу, воно підтримує еволюцію схеми — додавання стовпця, перейменування стовпця, зміну типу — без переписування кожного існуючого файлу даних. Старі файли даних просто читаються згідно зі старою схемою для стовпців, які вони містять, а нові стовпці відображаються як NULL для рядків, написаних до існування стовпця; шар метаданих узгоджує різницю під час запиту, а не вимагає дорогого переповнення через петабайти історичних файлів.
Такий же механізм знімків також дає вам подорожі в часі безкоштовно: оскільки старі проміжні представлення не видаляються негайно (лише збираються для утилізації після певного періоду зберігання), ви можете запитувати таблицю «на момент» ранішого знімка або мітки часу, що є неоціненним для відтворення звіту, який виглядав інакше минулого тижня, або для відновлення від поганого запису, просто повертаючи таблицю до проміжного представлення, яке передувало йому. Це концептуально такий самий трюк, як Snowflake's подорожі в часі над незмінними мікро-розділами — різні реалізації, одна й та сама основна ідея: ніколи справді не видаляти старий стан, поки ви не впевнені, що вам більше не потрібен.
Lakehouse: один примірник даних, багато двигунів
Термін «lakehouse» описує архітектуру результату: дані знаходяться та живуть у дешевому форматі об’єктів зберігання в табличному форматі з відкритим кодом, але декілька обчислювальних двигунів — Spark, Trino, Snowflake, Flink — можуть читати та записувати одні й ті самі фізичні таблиці через один і той самий шар відкритої метаданих, замість того, щоб кожен двигун блокував дані в свій власний специфічний формат зберігання. Це безпосередньо атакує класичну проблему сховища даних щодо підтримки окремих, з часом розходяться копій одного й того ж набору даних для різних інструментів: замість ETL-завдання, яке копіює дані з озера в формат, специфічний для сховища даних, для запитів BI-інструментами, BI-інструмент читає таблицю lakehouse безпосередньо.
Угоди полягають у тому, що табличний формат lakehouse є специфікацією, а не керованим сервісом, тому хтось все ще повинен виконувати завдання з компактування (об’єднання багатьох невеликих файлів, створених потоковими записами, у меншу кількість більших файлів для ефективності сканування) та збору сміття (фактично видалення старих файлів знімків після вичерпання терміну зберігання) як постійні завдання. Пропустіть це обслуговування, і таблиця lakehouse деградує так само, як і база даних без операцій очищення: продуктивність запитів падає, коли кількість невеликих файлів збільшується, хоча гарантії ACID залишаються незмінними протягом усього цього часу.
Часті запитання
Яка різниця між даними озера та lakehouse?
Дані озера – це просто файли в об’єктному сховищі без гарантій транзакційної цілісності; lakehouse додає шар метаданих у форматі таблиць (наприклад, Delta Lake або Iceberg) поверх того ж сховища, забезпечуючи ACID-транзакції, підтримку схеми та можливість повернення в часі, зберігаючи при цьому базові файли дешевими та відкритими.
Як формати таблиць досягають атомарних записів у об’єктному сховищі, яке не було створене для цього?
Вони ніколи не змінюють існуючі файли на місці; запис створює нові файли даних і потім амотно замінює метадані-маніфест, який вказує на правильний набір файлів, щоб читачі бачили повний старий знімок або повний новий, ніколи не часткове стан.
Чому дані озера отримали прізвисько «дані болота»?
Без підтримки схеми або гарантій транзакційної цілісності озера накопичували невідповідні формати файлів, незавершені невдалих завдань та не документовану структуру, роблячи дані технічно присутніми, але практично ненадійними для запитів.
Чи все ще потрібно підтримувати lakehouse-таблицю або це повністю автоматично?
Все одно потрібен періодичний злиття невеликих файлів у більші та збирання сміття для видалення застарілих старих знімків; формат таблиці гарантує правильність, але не автоматично оптимізує фізичне розташування файлів для вас.
Спробуйте наживо
Усе, що вище, працює прямо у вашому браузері — відкрийте the simulation і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.
▶ Відкрити симуляцію the simulation