Postgres переписали на Rust… и он прошел все тесты

BBetter Stack
컴퓨터/소프트웨어창업/스타트업AI/미래기술

스크립트

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Увидимся в следующем видео.

핵심 요약

PGRust успешно имитирует работу Postgres на уровне регрессионных тестов, доказывая возможность замены устаревшего кода на C более эффективной моделью потоков на языке Rust при помощи ИИ-инструментов.

하이라이트

  • Версия PGRust проходит все 46 000 стандартных регрессионных тестов базы данных Postgres 18.3.

  • Архитектура проекта заменяет традиционную модель «процесс на соединение» на модель «поток на соединение».

  • Неопубликованная версия для разработчиков заявляет о повышении производительности транзакционных нагрузок на 50% и аналитических запросов в 300 раз.

  • Использование ИИ-агентов позволило ускорить процесс переписывания миллиона строк кода на C на язык Rust.

  • Проект не является расширением, а представляет собой отдельную реализацию, совместимую с существующими каталогами данных Postgres.

타임라인

Техническая реализация и совместимость PGRust

  • PGRust проходит полный официальный набор из 46 000 регрессионных тестов Postgres.
  • Система поддерживает стандартный клиент PSQL и совместима с существующими данными Postgres 18.3.
  • Реализация полностью отделена от оригинального ядра и не является расширением или надстройкой.

Проект воспроизводит поведение Postgres, сохраняя привычный опыт работы через терминал. В ходе демонстрации стандартный клиент успешно выполняет вставку 100 000 строк и анализирует план выполнения запроса с использованием индексов. Это подтверждает статус проекта как полноценного сервера базы данных, а не просто экспериментального расширения.

Архитектурные изменения и риски модели потоков

  • Переход от модели «процесс на соединение» к модели «поток на соединение» снижает накладные расходы.
  • Использование потоков внутри одного процесса упрощает обмен состоянием между компонентами БД.
  • Отказ от изоляции процессов повышает риск влияния ошибок памяти или небезопасных расширений на весь сервер.

Оригинальный Postgres создает отдельный процесс для каждого клиента, что обеспечивает надежную изоляцию, но требует больших затрат ресурсов. PGRust в экспериментальной версии объединяет потоки, что теоретически ускоряет работу. Однако этот подход лишает систему защитных барьеров между соединениями, характерных для традиционной архитектуры.

Роль ИИ и перспективы проекта

  • Масштабное переписывание кода на Rust стало возможным благодаря активному применению ИИ-агентов.
  • Заявленные показатели производительности в 50% и 300 раз пока не подлежат независимой проверке.
  • Проект не готов к промышленной эксплуатации и имеет пробелы в поддержке экосистемы расширений.

ИИ существенно снизил стоимость проведения крупных инфраструктурных экспериментов, сделав возможным переосмысление кода объемом в миллион строк. Несмотря на многообещающие цифры разработчиков, отсутствие публичного доступа к оптимизированному коду оставляет эти заявления на уровне догадок. Сообщество остается разделенным в оценках, признавая ценность достижения совместимости при критическом отсутствии долгосрочного тестирования надежности.

커뮤니티 글

모든 글 보기