스크립트
00:00:00Кто-то переписал Postgres на Rust, и выпущенная версия каким-то образом теперь проходит все 46 000 регрессионных тестов Postgres.
00:00:08Она работает с обычным PSQL. Может даже запустить существующий каталог данных Postgres 18.3.
00:00:14Звучит как готовая к продакшену замена. Но это не так.
00:00:17Но самая захватывающая версия этого проекта еще даже не была выпущена.
00:00:21Так что же мы здесь видим? Это будущее Postgres или просто ИИ-эксперимент?
00:00:30Чтобы понять, почему это важно, нужно сначала понять проблему.
00:00:36Посмотрим правде в глаза, Postgres — одна из лучших баз данных, когда-либо созданных.
00:00:40Но она также несет в себе почти четыре десятилетия архитектуры и около миллиона строк кода на C.
00:00:46Каждое клиентское соединение получает свой собственный фоновый процесс.
00:00:49Эта изоляция полезна, но она также означает больше накладных расходов на память, необходимость использования пулов соединений
00:00:56и трудности с обменом состоянием при параллельной работе.
00:01:00PGRust идет другим путем.
00:01:02Сохранить поведение Postgres, сохранить опыт работы клиента, сохранить форматы дисков, но заменить движок на Rust.
00:01:09Это не расширение для Postgres.
00:01:11Это не функция, добавленная поверх.
00:01:13Это нечто полностью отдельное, реализация, пытающаяся вести себя в точности как Postgres.
00:01:18Мы сейчас видим много переписываний на Rust, как, например, то, о котором мы говорили на днях: Bunn переписывает всю свою кодовую базу на Rust.
00:01:25Я прикреплю ссылку где-то здесь.
00:01:27И все это звучит неплохо, но ощущается ли это как настоящий Postgres?
00:01:31Едва ли полноценно протестировано.
00:01:32Если вам нравится кодить инструменты, ускоряющие ваш рабочий процесс, обязательно подпишитесь.
00:01:36У нас постоянно выходят новые видео.
00:01:38Итак, я начну с официального Docker-образа, а затем подключусь с помощью совершенно обычного PSQL-клиента.
00:01:43Никаких кастомизаций.
00:01:44Ну вот, я внутри.
00:01:46Для начала проверим версию.
00:01:48Как видите, она сообщает, что это PGRust с последней версией.
00:01:53Теперь я могу создать таблицу, вставить данные и посмотреть план запроса.
00:01:59Я просто запущу это прямо здесь в своем терминале.
00:02:01Внешне это совершенно неотличимо от Postgres.
00:02:05Тот же клиент, тот же SQL, тот же вывод.
00:02:08Вы даже можете увидеть, что планировщик запросов выбрал индексное сканирование и выдал нам реальную статистику выполнения.
00:02:14Теперь, чтобы сделать это немного интереснее, давайте вставим 100 000 строк и выполним еще один запрос.
00:02:20Это просто сгенерированные 100 000 строк данных.
00:02:23Мы сейчас их закинем.
00:02:25Итак, в чем смысл всего этого?
00:02:27Что ж, хороший вопрос.
00:02:28В текущей ранней версии мы не увидим кардинального улучшения скорости по сравнению с обычным Postgres.
00:02:35Более серьезные заявления о производительности исходят от невыпущенной версии для разработчиков, которая переходит на модель «поток на соединение».
00:02:43Однако все это доказывает, что это не просто частичная реализация.
00:02:47Она прошла полный официальный набор регрессионных тестов Postgres, более 46 000 запросов.
00:02:53Она говорит на реальном протоколе передачи данных, и у нее есть работающий планировщик запросов в движке хранения.
00:02:59Это настоящий сервер базы данных.
00:03:01Просто написанный на Rust.
00:03:03Так что, по мере развития, мы могли бы увидеть серьезные улучшения производительности в плане скорости.
00:03:08Итак, возникает вопрос: почему бы просто не создать еще одно расширение Postgres?
00:03:12Потому что расширения работают поверх оригинального ядра Postgres.
00:03:16Форк может изменить это ядро, но тогда он унаследует ту же архитектуру и вечную обязанность не отставать от оригинального Postgres.
00:03:25Есть такие базы данных, как CockroachDB и YugaByte, но это независимые распределенные базы данных.
00:03:31Точная совместимость с заменой — не их главная цель.
00:03:35PG Rust пробует кое-что другое.
00:03:37В качестве спецификации она использует реальное поведение Postgres.
00:03:41Текущий релиз нацелен на Postgres 18.3.
00:03:44Она проходит стандартный набор регрессионных тестов и тесты изоляции, и она достаточно совместима, чтобы загрузиться из существующего каталога данных Postgres 18.3.
00:03:53Более масштабный эксперимент происходит в отдельной неопубликованной версии, и эта версия, как сообщается, заменяет модель Postgres «процесс на соединение» моделью «поток на соединение».
00:04:05В обычной модели Postgres каждое соединение получает свой процесс.
00:04:09В новой модели каждое соединение получает поток внутри одного и того же процесса.
00:04:14Это может снизить накладные расходы на каждое соединение и облегчить обмен информацией между различными частями базы данных.
00:04:21Но при всем этом должен быть какой-то компромисс, верно?
00:04:24Отдельные процессы также создают полезные стены между соединениями.
00:04:28Если один процесс дает сбой, эта изоляция может помочь сдержать ущерб.
00:04:32При использовании потоков одно небезопасное расширение или ошибка памяти может затронуть большую часть сервера.
00:04:38Так что модель «поток на соединение» не является автоматически лучше.
00:04:41Она просто открывает новые возможности, но также может лишить некоторых мер безопасности.
00:04:45И еще есть вторая важная часть истории — ИИ.
00:04:49Майкл Малис и Джейсон Сибел активно использовали кодинг-агентов, чтобы ускорить переписывание кода.
00:04:54Выпущенная версия намеренно следует оригинальной структуре Postgres во многих местах.
00:04:59В неопубликованной версии они пытаются внести более серьезные архитектурные изменения.
00:05:03Так что настоящий эксперимент — это не просто «может ли Rust сделать Postgres быстрее?»
00:05:08Скорее, может ли ИИ сделать переписывание такого масштаба достаточно доступным, чтобы разработчики могли действительно переосмыслить архитектуру?
00:05:16Ведь ИИ здесь активно использовался.
00:05:19Меняет ли это что-то?
00:05:20Возможно.
00:05:21Это также то место, где нам нужно немного притормозить.
00:05:25Выпущенная версия не сильно оптимизирована.
00:05:28Основные заявления о производительности исходят от неопубликованной версии с потоками на соединение, которую мы пока не можем толком протестировать.
00:05:36Разработчики заявляют о повышении производительности транзакционных рабочих нагрузок примерно на 50%.
00:05:40Они также заявляют о производительности аналитических нагрузок примерно в 300 раз выше, чем у Postgres.
00:05:45Цифры огромные, но код, стоящий за этими результатами, в данный момент недоступен для какой-либо проверки или бенчмаркинга.
00:05:53Так что, следовательно, здесь все еще много догадок.
00:05:57Кажется, здесь есть четкое разделение мнений 50 на 50, по крайней мере, судя по онлайн-обсуждениям, с вопросами примерно такого рода.
00:06:03Это лишь проблемы здесь, на GitHub.
00:06:05Есть даже один такой вопрос, да?
00:06:08Что является вполне разумным вопросом.
00:06:10По мере того как читаешь этот запрос, разработчики кажутся непреклонными в том, чтобы заставить это работать.
00:06:15Так что у нас пока нет реальных статистических данных.
00:06:17Однако это автоматически не означает, что цифры ложные.
00:06:20Это просто означает, что мы должны относиться к ним как к многообещающим заявлениям, а не как к установленным фактам.
00:06:24И, честно говоря, точный множитель может быть не самой важной частью.
00:06:28Нам не нужно менять весь проект Postgres, прежде чем узнать, работает ли идея на самом деле.
00:06:34Эта свобода может быть более ценной, чем любой отдельный бенчмарк, который мы можем получить.
00:06:38Реакция разработчиков на все эти переписывания на Rust, даже на этот PG Rust, была масштабной.
00:06:44Основная дискуссия на Hacker News набрала сотни баллов и комментариев, но опять же, отклик разделился.
00:06:50Обе стороны приводят веские аргументы.
00:06:52Во-первых, прохождение всех регрессионных тестов — это серьезное достижение.
00:06:56Многие проекты претендуют на совместимость с Postgres.
00:06:59Эта фраза может означать что угодно.
00:07:01У PG Rust есть измеримая цель.
00:07:04Настоящие тесты Postgres — вот судья в этом вопросе.
00:07:07И скорость этого переписывания говорит о том, что кодинг-агенты могут полностью изменить стоимость проведения крупных инфраструктурных экспериментов.
00:07:13Идеи, которые когда-то казались слишком дорогими, чтобы пытаться их реализовать, теперь, по-видимому, становятся более доступными.
00:07:19Что касается другой стороны, прохождение регрессионных тестов — это не то же самое, что завоевание доверия для использования в продакшене.
00:07:24Эти тесты не заменяют годы тестирования восстановления после сбоев и репликации, или баз данных, которые работают месяцами без остановки.
00:07:31Проект может пройти все известные тесты и все равно потерпеть неудачу в ситуации, о которой никто даже не подумал.
00:07:37Генерация сотен тысяч строк кода — это одна задача.
00:07:42Совместимость с расширениями — это еще один серьезный пробел.
00:07:45Стоит ли вам заменять свой продакшен-кластер Postgres на PG Rust?
00:07:49Нет, абсолютно нет.
00:07:51Сам проект не готов к продакшену.
00:07:53Об этом заявлено.
00:07:54Он не полностью оптимизирован.
00:07:56В ключевых областях совместимости, включая экосистему расширений, проект все еще незакончен.
00:08:02Но стоит ли попробовать?
00:08:03Конечно.
00:08:03Если вы работаете с базами данных, Rust, выполнением запросов, тестированием совместимости или разработкой ИИ, почему бы не попробовать?
00:08:10Запустите Docker-образ, протестируйте свою клиентскую библиотеку, прочитайте исходный код и посмотрите, что получится.
00:08:16Оставьте свой вердикт в комментариях.
00:08:18Куда движется этот проект?
00:08:20Будем ли мы начинать переписывать больше на Rust?
00:08:21Мы узнаем.
00:08:23Если вам нравятся подобные советы и подсказки по программированию, подпишитесь на канал BetterStack.
00:08:26Увидимся в следующем видео.