პროგრამული უზრუნველყოფის შემქმნელებისთვის, რომლებიც მონაცემთა ბაზების ოპტიმიზაციაზე მუშაობენ, Postgres-დან ანალიტიკურ სისტემებში მონაცემთა გადატანა ხშირად რთულ და რესურსტევად პროცესთანაა დაკავშირებული. ახალი პროექტი, სახელად Streambed, ამ პრობლემის გადაჭრას მარტივი გზით ცდილობს.

როგორ მუშაობს Streambed?

Streambed არის CDC (Change Data Capture) ძრავა, რომელიც Postgres-ის მონაცემებს რეალურ დროში გადასცემს Iceberg-ის ფორმატში. სისტემა იყენებს ლოგიკურ რეპლიკაციას WAL (Write-Ahead Logging) შეტყობინებების გასაშიფრად. შედეგად, მონაცემები იწერება Parquet ფაილებად S3-ზე, რასაც თან ერთვის Iceberg-ის მეტამონაცემების განახლება.

მთავარი უპირატესობა ისაა, რომ სისტემა არ საჭიროებს ETL პროცესებს ან Apache Spark-ის ინტეგრაციას. ეს ამცირებს ტექნიკურ სირთულეს და ზრდის მონაცემთა დამუშავების სიჩქარეს.

ანალიტიკა Postgres-ის პროტოკოლით

Streambed-ის ერთ-ერთი გამორჩეული მახასიათებელია ჩაშენებული საძიებო სერვერი. ის იყენებს DuckDB-ს და მხარს უჭერს Postgres-ის საკომუნიკაციო პროტოკოლს. ეს ნიშნავს, რომ მომხმარებლებს შეუძლიათ, ნებისმიერი სტანდარტული Postgres კლიენტით, მათ შორის psql-ით, დაუკავშირდნენ და შეასრულონ ანალიტიკური მოთხოვნები პირდაპირ Iceberg ცხრილებზე.

არქიტექტურა და შესაძლებლობები

სისტემა ავტომატურად მართავს მონაცემთა განახლებასა და წაშლას. განახლებები და წაშლის ოპერაციები ხორციელდება Copy-on-Write მეთოდით, რაც უზრუნველყოფს არსებული Parquet მონაცემების მთლიანობას. Streambed-ის გამოყენება არ მოითხოვს აპლიკაციის კოდის შეცვლას, რაც მას მიმზიდველს ხდის უკვე არსებული ინფრასტრუქტურისთვის.

CommandWhat it does
streambed syncMain daemon. Streams WAL, writes Iceberg, optionally serves queries.
streambed resync --table=public.usersOne-shot backfill via COPY under a consistent snapshot.
streambed queryStandalone query server (no sync). Points at existing Iceberg tables.
streambed cleanup --table=public.usersDeletes S3 objects and state for a table. Useful before resync.

ტექნიკური მოთხოვნები

პროექტი დაწერილია Go-ზე და საჭიროებს 1.22 ან უფრო ახალ ვერსიას. CGO-ს მხარდაჭერა აუცილებელია, რადგან სისტემა იყენებს go-duckdb და go-sqlite3 ბიბლიოთეკებს. დეველოპერებისთვის ხელმისაწვდომია ინტეგრაციის ტესტები, რომლებიც Docker-ის მეშვეობით მუშაობს Postgres-თან და MinIO-სთან.