>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
Rust

Dlaczego przepisać Postgres w Rust

Wyobraź sobie, że postanowiłeś przebudować silnik klasycznego samochodu, ale zamiast oryginalnych części używasz części wydrukowanych w 3D z tytanu. Mniej więcej tym właśnie zajmuje się projekt pgrust. Deweloperzy wzięli Postgres 18.3 i metodycznie zaczęli przepisywać jego wnętrze w Rust.

Brzmi to jak szaleństwo lub studencki eksperyment, ale liczby mówią co innego. Projekt przechodzi już ponad 46 000 testów regresyjnych z oryginalnego Postgresa. To nie jest tylko "baza danych inspirowana czymś", ale próba stworzenia binarnego zamiennika, który rozumie te same pliki danych i te same zapytania.

Co to za projekt

pgrust to całkowita przebudowa rdzenia PostgreSQL. Główna idea jego autora, malispera, polega na tym, że oryginalny kod Postgresa w C stał się zbyt złożony przez dziesięciolecia, by wprowadzać radykalne zmiany. Implementacja wielowątkowości czy nowych mechanizmów storage'u to zadanie, które pochłonęłoby lata dyskusji na listach mailingowych.

Rust służy tutaj nie tylko jako "bezpieczny język", ale jako narzędzie do szybkiej iteracji. Deweloperzy używają asystentów AI, aby przyspieszyć przenoszenie kodu, ale ściśle kontrolują wyniki poprzez referencyjne testy Postgresa. Jeśli oryginalna baza danych zwraca błąd przy źle sformułowanym zapytaniu SQL, pgrust musi zwrócić dokładnie ten sam błąd.

Czym pgrust różni się od oryginału

Najciekawsze są plany i już zaimplementowane prototypy. W README wspomniano o nowej wersji, która jeszcze nie została udostępniona publicznie, ale wyniki są intrygujące.

Zamiast klasycznego modelu "jeden proces na połączenie", który zmusza nas do używania pgbouncer lub innych proxy, pgrust przechodzi na wątki. To natychmiast daje ogromny wzrost wydajności przy obciążeniach transakcyjnych. Według pomiarów autorów, ta architektura działa 50% szybciej niż oryginał.

W przypadku analityki liczby są jeszcze bardziej szalone: deklarowane jest 300-krotne przyspieszenie. Deweloperzy celują w wydajność na poziomie Clickhouse'a, pozostając w ramach znajomego interfejsu Postgresa.

Szczegóły techniczne i kompatybilność

Projekt zachowuje kompatybilność dyskową. Możesz wziąć istniejący katalog danych z Postgres 18.3 i "skierować" na niego pgrust. Picking up the files and starting to work.

Aby zbudować ze źródeł, potrzebujesz standardowego zestawu do pracy z Postgres: icu4c, openssl i libpq. Proces wygląda znajomo dla deweloperów Rust:

PGRUST_PGSHAREDIR="$PWD/vendor/postgres-18.3/share" \
cargo build --release --locked --bin postgres

Jeden ciekawy szczegół: przy uruchamianiu trzeba ręcznie zwiększyć limity stosu (ulimit -s 65520), ponieważ niektóre operacje Postgresa są bardzo贪婪 na pamięć na stosie, a środowisko wykonawcze Rust zachowuje się skromniej domyślnie.

Co dalej w planach

Plan projektu wygląda jak lista życzeń każdego administratora baz danych:

  • Wbudowany connection pooling (żegnaj, pgbouncer).
  • Eksperymenty z storage bez Vacuum. Jeśli uda się to zaimplementować, pgrust rozwiąże jeden z najbardziej "bolesnych" problemów Postgresa.
  • Zabezpieczenia przed złymi zapytaniami. Jest to szczególnie istotne teraz, gdy sieci neuronowe często generują SQL bez większego zastanowienia nad indeksami i planami wykonania.
  • Szybkie branchowanie danych.

Czy warto wypróbować

W tej chwili pgrust nie jest gotowy do produkcji. Autorzy sami przyznają to szczerze. Rozszerzenia takie jak PL/Python czy PL/Tcl nie są jeszcze obsługiwane, a wydajność w publicznej gałęzi nie została jeszcze w pełni zoptymalizowana.

Jednak to idealny plac zabaw do eksperymentów. Jeśli zawsze chciałeś zgłębić wnętrze DBMS, ale odstraszał Cię masywny kod w C, pgrust to Twoja szansa. Kod w Rust jest o rząd wielkości łatwiejszy do czytania i modyfikowania.

Możesz wypróbować projekt przez Docker za pomocą jednego polecenia:

docker run -d --name pgrust -e POSTGRES_PASSWORD=secret malisper/pgrust:v0.1

To uruchomi kontener z pgrust i otworzy standardowy psql w środku. Dla tych, którzy nie chcą niczego pobierać, istnieje demo na oficjalnej stronie działające w WebAssembly, działające прямо w przeglądarce.

Projekt wygląda jak jedno z najbardziej ambitnych wyzwań open source w ostatnich czasach. Nawet jeśli pgrust nie zastąpi Postgresa w ciągu najbliższych lat, z pewnością stanie się poligonem doświadczalnym dla technologii, które mogą później migrować do głównej gałęzi "słonia".

Powiązane projekty