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) |