Dolt: SQL, который ощущается как Git

BBetter Stack
Computing/SoftwareSmall Business/StartupsInternet Technology

Transcript

00:00:00У вас есть git для кода, а для данных? Вот в чём проблема: одна плохая CSV,
00:00:07одна правка в таблице — и приложение сломано. Нет нормального diff, ветки, pull request,
00:00:13очевидного отката. Это Dolt — SQL-база данных, которая работает прямо как git. Можно создавать ветки таблиц,
00:00:20редактировать строки, смотреть изменения, коммитить их и вливать обратно. Настоящий контроль версий
00:00:26для реальных данных. Покажу, как это запустить за пару минут.
00:00:35Мы знаем, что базы данных отлично справляются со своей задачей — хранить данные и позволять
00:00:41делать SQL-запросы. Но они плохо подходят для повседневных рабочих процессов: ветвления,
00:00:47просмотра изменений, слияния, отката и контроля того, кто именно внёс правки. Поэтому мы часто выбираем
00:00:54один из двух плохих вариантов. Первый: хранить данные в нормальной БД. Есть SQL-индексы,
00:01:00ограничения и структура, но при изменении данных процесс проверки изменений обычно отсутствует.
00:01:07Второй вариант: хранить данные в CSV, JSON или YAML, чтобы Git мог их отслеживать. Теперь есть
00:01:13коммиты и pull request, но теряются преимущества баз данных: нет реального SQL, слабая
00:01:20поддержка схем, болезненные diff и слияния. А когда кто-то спрашивает “кто изменил эту запись?”, ответ
00:01:27обычно сводится к “кто-то с доступом к базе данных”. Это несерьёзный рабочий процесс.
00:01:32Но представьте другое. Что, если можно было бы просто выполнить команду: dolt branch fix-data,
00:01:39dolt diff, dolt commit, dolt merge? Это привычные нам команды, но мы используем их
00:01:46прямо для таблиц нашей базы данных. Это и есть Dolt — контроль версий для БД.
00:01:52Если вам нравятся инструменты для ускорения работы, подписывайтесь. Мы выпускаем видео
00:01:57постоянно. Хватит разговоров, у нас есть варианты: Dolt для SQLite, Postgres и других. Давайте
00:02:04быстро попробуем. Перейду в папку и клонирую проект dolt-hub с GitHub,
00:02:10зайду в него. Сначала клонируем публичную базу Dolt, затем запустим dolt sql. Теперь мы
00:02:18внутри SQL, так что я могу выполнять команды прямо в терминале. Отлично, внесу небольшое изменение,
00:02:27и теперь мы запустим dolt diff, и это тот самый момент, когда хочется сказать: «подождите, что сейчас произошло?»
00:02:34Dolt не просто говорит, что какой-то файл изменился, он показывает diff таблицы: какая строка изменилась, какой столбец
00:02:43какой столбец, старое и новое значения. Я вижу это прямо здесь. Теперь можно сделать коммит: dolt add,
00:02:50затем dolt commit -m и добавим комментарий. Я могу создать целую ветку с помощью
00:02:56checkout, просто выполнив checkout -b [имя ветки]. Если сделаю ещё изменение, я снова могу
00:03:03сделать diff, снова закоммитить и добавить. Теперь, если я переключусь обратно
00:03:10и солью ветки, перейду на main и запущу dolt merge. Все эти команды мы уже знаем, просто теперь
00:03:17мы делаем это в SQL. В конце можно запустить dolt log. У базы появилась история коммитов, не просто бэкап,
00:03:24не дамп, не правка в таблице, а реальная версионируемая база данных. Вот основная идея:
00:03:31гит-воркфлоу для таблиц. Давайте подведём итоги и посмотрим, как это работает.
00:03:37Dolt кажется знакомым специально: есть команды status, diff, add, commit, branch,
00:03:44checkout. Если вы знаете Git, ваш мозг уже понимает структуру этого процесса.
00:03:48Dolt отслеживает не файлы, а реляционные таблицы. Можно использовать его из
00:03:55командной строки, или запустить dolt sql-server, чтобы подключаться с помощью
00:04:01MySQL-совместимых клиентов, ORM, BI-инструментов или кода приложения. Так что приложение видит Dolt
00:04:09как обычную SQL-базу, но вы получаете контроль версий данных. Это важно: не нужно выбирать
00:04:14базу данных и git-процессы: вы получаете и то, и другое в одном месте. Dolt использует технологию Prolly Tree. Если говорить просто,
00:04:22проще говоря: обычная база использует древовидные структуры для ускорения чтения и записи
00:04:29Dolt использует структуру, которая также хороша для версионирования. Вместо копирования всей
00:04:36базы при каждом коммите, Dolt может использовать общие неизменные части и отслеживать то, что
00:04:42действительно изменилось. Теперь мы не просто спрашиваем “какое значение сейчас?”, мы можем
00:04:47узнать: “как эта строка выглядела до того, как что-то случилось?” Это главное.
00:04:52Ведь когда что-то ломается, мы не хотим гадать. Вы хотите изучить историю.
00:04:56Можно посмотреть diff, изменения и, если нужно, откатиться. Это контроль версий
00:05:02для структурированных данных. Ветки, коммиты, diff, слияния, история для строк и столбцов. Так куда же
00:05:10вписывается Dolt? Звучит отлично, но здесь может возникнуть путаница.
00:05:15Вы можете услышать “Git для данных” и подумать: “Ну у нас же уже есть инструменты”.
00:05:21Да, они есть, но они решают другие задачи. Вы можете положить CSV и JSON в Git,
00:05:28это работает, когда данных мало и они простые. Но Git не понимает схему,
00:05:35первичные ключи, не обеспечит ограничения, не может делать JOIN между CSV,
00:05:41если не добавить больше инструментов. Git дает контроль версий, но не для БД.
00:05:47Ещё есть DVC. DVC хорош для ML-процессов, особенно с большими датасетами и артефактами моделей,
00:05:53но он не пытается быть вашей живой реляционной БД. Да, есть LakeFS, который приносит
00:06:00идеи Git в объектное хранилище и data-озёра. Очень полезно в масштабах озёр, но это другой уровень,
00:06:07это не то же самое, что ветвление SQL-таблицы, изменение строк, diff и слияние обратно.
00:06:13Традиционные БД тоже имеют инструменты истории: темпоральные таблицы, audit logs, CDC, но большинство из них
00:06:20не ощущаются как нормальный рабочий процесс. Они не дают чистый цикл ветвление-изменение-diff-слияние-откат.
00:06:27Я бы не стал бездумно внедрять Dolt в любую продакшн-систему. Суть в другом:
00:06:33если ваша работа включает структурированные данные, которые меняются со временем, и изменения могут что-то сломать,
00:06:40то Dolt стоит попробовать. Когда он в первый раз спасёт вас от тихого сбоя данных, процесс
00:06:46начнёт казаться очевидным. У нас есть Git, почему у нас нет чего-то подобного для данных? Теперь есть.
00:06:52Если вам нравятся такие инструменты, подписывайтесь на канал Better Stack. Увидимся в следующем
00:06:57видео.

Key Takeaway

Dolt трансформирует рабочий процесс с данными, объединяя надежность SQL-баз с гибкостью Git, что позволяет применять ветвление, коммиты и слияния непосредственно к таблицам.

Highlights

  • Dolt предоставляет полноценный контроль версий для SQL-баз данных, позволяя использовать привычные команды: branch, commit, diff, merge.

  • Технология Prolly Tree позволяет Dolt отслеживать изменения на уровне строк и столбцов без необходимости дублирования всей базы данных при каждом коммите.

  • В отличие от Git, работающего с файлами, Dolt отслеживает состояние реляционных таблиц, сохраняя поддержку SQL-схем, индексов и первичных ключей.

  • Dolt запускает SQL-сервер, совместимый с MySQL, что позволяет использовать его совместно с существующими ORM и BI-инструментами.

  • Система обеспечивает возможность просмотра истории изменений конкретных строк и отката данных к состоянию до совершения ошибочных правок.

Timeline

Ограничения существующих подходов к хранению данных

  • Традиционные SQL-базы данных не имеют встроенных механизмов для ветвления, отката изменений и аудита действий пользователей.
  • Хранение данных в форматах CSV или JSON в Git дает контроль версий, но лишает преимуществ SQL, таких как схемы и сложные индексы.

Популярные методы хранения данных часто вынуждают выбирать между функциональностью SQL и прозрачностью Git. Отсутствие контроля версий в стандартных СУБД приводит к тому, что любое неверное изменение таблицы делает невозможным быстрый откат или понимание того, кто именно внес правку.

Рабочий процесс и команды Dolt

  • Команды управления версиями в Dolt полностью аналогичны Git: dolt branch, dolt diff, dolt commit и dolt merge.
  • Dolt позволяет визуализировать изменения в таблицах, отображая старые и новые значения в конкретных ячейках через терминал.

Интеграция Git-воркфлоу в SQL позволяет разработчикам выполнять клонирование публичных баз, создание веток и слияние изменений без смены парадигмы. История коммитов в Dolt предоставляет детальный лог изменений, превращая базу данных из набора дампов в версионируемую систему.

Техническая архитектура и применение

  • Dolt использует структуру Prolly Tree для эффективного версионирования, сохраняя только измененные части данных.
  • Серверный режим dolt sql-server обеспечивает совместимость с MySQL, позволяя приложениям работать с базой как с обычным SQL-интерфейсом.

В отличие от DVC или LakeFS, ориентированных на файлы и объектные хранилища, Dolt предназначен для живых реляционных таблиц. Хотя это решение не заменяет специализированные инструменты для Big Data, оно минимизирует риски потери данных в структурированных проектах, позволяя изучать историю состояния строк в любой момент времени.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video