database framework - ghdrako/doc_snipets GitHub Wiki


tags:

  • database

Database framework

1. Warstwa parsera i planera zapytań (SQL Frontend)

  • sqlparser-rs (Rust): Uniwersalny parser SQL generujący ścisłe drzewo składniowe (AST). Wspiera dialekty m.in. PostgreSQL, MySQL, DuckDB, Snowflake oraz ANSI SQL.
  • Apache Calcite (Java): Przemysłowy standard optymalizacji zapytań. Oferuje parser SQL, walidator relacyjny oraz zaawansowane silniki optymalizacji regułowej (RBO) i kosztowej (CBO) oparte na strukturze Volcano/Cascades Memo.
  • Substrait (Cross-language): Niezależny od języka standard serializacji planów zapytań (Protobuf). Umożliwia łączenie dowolnego frontendu (np. parser w C++/Pythonie) z niezależnymi silnikami wykonawczymi (np. DataFusion, Velox).

2. Szkielety obliczeniowe (Execution Engines)

  • Apache DataFusion (Rust):
    • Modułowy, wysoce rozszerzalny framework obliczeniowy dla silników SQL.
    • Zbudowany na bazie formatu pamięciowego Apache Arrow.
    • Oferuje kompletny stos: parser SQL, planer logiczny, optymalizator fizyczny oraz wielowątkowy, wektoryzowany silnik wykonawczy.
    • Wymaga jedynie implementacji cechy (traita) dostawcy danych (TableProvider), aby uzyskać działający silnik SQL.
  • Velox (Meta / C++):
    • Biblioteka komponentów wektoryzowanych w C++ zoptymalizowana pod kątem instrukcji SIMD (AVX-512).
    • Skupia się wyłącznie na warstwie fizycznego przetwarzania danych: haszowaniu, ewaluacji wyrażeń, sortowaniu i agregacji.
    • Służy jako warstwa egzekucyjna w systemach takich jak Presto C++ czy Apache Gluten.

3. Warstwa składowania i indeksowania (Storage Engines / KV)

Struktury B-Tree / Paging (OLTP)

  • LMDB (Lightning Memory-Mapped Database, C): Ekstremalnie szybki silnik klucz-wartość oparty na mapowaniu pamięci (mmap) i strukturze B+Tree z mechanizmem Copy-on-Write (MVCC). Zapewnia transakcje ACID przy zerowym narzucie serializacji w odczytach.
  • libmdbx (C/C++): Aktywnie rozwijany i rozszerzony fork LMDB, oferujący lepszą odporność na awarie, asynchroniczne I/O i optymalizacje pod duże obciążenia wielowątkowe.

Struktury LSM-Tree (Wysoki współczynnik zapisu)

  • RocksDB (C++): Standard rynkowy dla systemów wymagających intensywnego zapisu (wykorzystywany m.in. w TiKV, CockroachDB, MyRocks). Implementuje wielopoziomowe drzewo LSM, filtry Blooma i kompresję blokową.
  • Pebble / SlateDB (Go / Rust): Nowoczesne implementacje LSM-Tree – Pebble (rdzeń CockroachDB w Go) oraz SlateDB (warstwa LSM działająca bezpośrednio na obiektowych magazynach danych typu AWS S3).

4. Warstwa replikacji i konsensusu (Distributed Consensus)

  • raft-rs (Rust) / etcd/raft (Go): Biblioteki implementujące algorytm konsensusu Raft w postaci deterministycznych maszyn stanów (state machine). Pozwalają na implementację architektury Multi-Raft dla rozproszonych silników typu NewSQL.
  • Braft (C++): Wydajna implementacja Raft w C++ firmy Baidu, zintegrowana ze stosem RPC brpc.

Zestawienie komponentów wg typu architektury

Typ budowanego silnika Parser / Planer Silnik wykonawczy (Compute) Warstwa składowania (Storage)
Analityczny (In-Process / OLAP) sqlparser-rs Apache DataFusion (Arrow) Parquet / Object Store (S3)
Transakcyjny (OLTP / Embedded) AST z SQLite / własny Pętla iteratorów Volcano libmdbx / B+Tree + io_uring
Hybrydowy wektorowy (C++) Substrait / Apache Calcite Velox (Meta) Apache Arrow / Pamięć własna
Rozproszony NewSQL Warstwa frontowa PG (pgwire) Planer rozproszony (MPP) RocksDB + raft-rs (Multi-Raft)