Vertailu muihin järjestelmiin
Miten JDBIN suhteutuu Parquetiin, DuckDB:hen, ClickHouseen, SSTableihin ja Luceneen.
Vertailu muihin järjestelmiin
JDBIN ei ole "kopio" mistään yhdestä olemassa olevasta järjestelmästä. Siinä on piirteitä useista eri toteutuksista, mutta arkkitehtoninen lähtökohta on eri.
Lyhyt vastaus
JDBIN ei ole uusi Parquet eikä uusi DuckDB. Se muistuttaa niiden ideoita, kuten segmenttejä, indeksejä, immutable-rakennetta ja selektiivistä lukua, mutta yhdistää ne Cloudflare R2:n, HTTP byte-range -hakujen ja Worker-pohjaisen kyselymoottorin ympärille.
1. Parquet
Parquet on tiedostoformaatti.
CSV
-> Parquet file
-> Spark / DuckDB / Athena / BigQueryParquet sisältää esimerkiksi:
- columnar storage
- metadataa
- sivuja
- compressionia
- statistics-tietoa
Mutta se ei ole kyselymoottori. Se sanoo vain: "näin data on tallennettu".
JDBIN eroaa tästä siinä, että mukana ei ole vain formaatti vaan myös Workerissa toimiva kyselypolku.
2. Apache ORC
ORC on hyvin saman tyyppinen kuin Parquet.
Se tuo mukaan esimerkiksi:
- bloom filterit
- indeksit
- statistics-tiedon
- predicate pushdown -ajattelun
Mutta sekään ei itsessään ole kyselymoottori.
3. DuckDB storage engine
DuckDB on oikea tietokanta.
SQL
-> DuckDB parser
-> optimizer
-> execution engine
-> storage engine
-> Parquet / diskDuckDB sisältää:
- SQL-parserin
- optimizerin
- execution enginen
- storage enginen
JDBIN-polku näyttää enemmän tältä:
Worker
-> planner
-> range reader
-> JDBIN
-> R2Tärkeä ero on, että JDBINissä ei ainakaan nykyrajauksen mukaan ole yleistä SQL-parseria. Dokumentaatio korostaa Workerissa toimivaa query planneria, joka tekee vain tarvittavat byte-range-haut R2:sta.
4. ClickHouse MergeTree
Tämä on yksi lähimmistä vertailukohdista.
MergeTree käyttää esimerkiksi:
- partteja
- indeksejä
- markkeja
- granuleja
jotta voidaan lukea vain pieni osa tiedostosta.
JDBINissä ajatus muistuttaa tätä:
Worker
-> planner
-> range read
-> segment
-> string pool
-> manifestIso ero on, että MergeTree toimii oman levyn ja oman tietokantaprosessin päällä. JDBIN käyttää object storagea, tässä tapauksessa R2:ta.
5. SSTable
SSTable on erityisen kiinnostava vertailu.
SSTable-ajattelussa on:
- sorted key
- immutable rakenne
- indeksi
- lookup-polku
Kun kirjoitetaan uutta dataa, syntyy uusi SSTable eikä vanhaa ylikirjoiteta.
JDBINin write-path:
delta
-> manifest
-> active pointer
-> new viewon samantyyppinen siinä mielessä, että uutta näkymää rakennetaan ilman vanhan datan suoraa ylikirjoitusta.
6. Lucene
Lucene ei ole tietokanta vaan hakemistomoottori.
Siinä on esimerkiksi:
- inverted index
- segmenttejä
- immutable segmenttejä
JDBIN ei ole inverted index, mutta segmenttiajattelu muistuttaa Lucenea.
Oikea arkkitehtoninen ero
Dokumentaation mukaan JDBIN-arkkitehtuuri näyttää tältä:
Client
-> Cloudflare Worker
-> query planner
-> range reader
-> R2 object
-> JDBINWorker hakee vain tarvittavat tavualueet R2:sta ilman erillistä tietokantapalvelinta.
Useimmat perinteisemmät järjestelmät taas toimivat enemmän näin:
Disk
-> database process
-> query engine
-> clientEli tietokantaprosessi omistaa levyn ja kyselymoottorin.
Tässä mallissa taas:
Object Storage (R2)
-> HTTP Range GET
-> Cloudflare Worker
-> planner
-> JSONTämä on arkkitehtonisesti eri lähtökohta.
Yhteenveto
| Ominaisuus | Parquet | DuckDB | ClickHouse | SSTable | JDBIN |
|---|---|---|---|---|---|
| Binääriformaatti | Kyllä | Kyllä | Kyllä | Kyllä | Kyllä |
| Oma query planner | Ei | Kyllä | Kyllä | Osittain | Kyllä |
| Object Storage -natiivi | Ei | Ei | Ei | Ei | Kyllä |
| Byte-range-luku päämekanismina | Osittain | Ei | Osittain | Ei | Kyllä |
| Erillinen DB-palvelin vaaditaan | Käytännössä kyllä | Kyllä | Kyllä | Kyllä | Ei |
Turvallinen loppumuoto
JDBIN ei ole uusi Parquet eikä uusi DuckDB. Se yhdistää segmentti-, indeksi- ja immutable-ideoita object storage -natiiviin malliin, jossa Cloudflare Worker toimii kyselymoottorina ja R2 toimii kanonisena tallennuskerroksena.