SQLite шиг ажиллахаа болилоо: DuckDB 2.0 хувилбараар сүлжээгээр ажилладаг "жинхэнэ сервер" болсноо зарлалаа
Дата инженерүүд болон аналитик систем хөгжүүлэгчдийн дунд "өгөгдлийн аналитикийн SQLite" хэмээн өргөмжлөгддөг DuckDB сан өөрийн хамгийн том түүхэн шинэчлэл болох v2.0 "Cyanoptera" хувилбарынхаа дэлгэрэнгүй тоймыг албан ёсоор танилцууллаа.
Өнгөрсөн хугацаанд 10,000 гаруй коммит хийгдсэн энэхүү хувилбар нь зөвхөн бага сага сайжруулалт биш бөгөөд DuckDB-ийн суурь архитектурыг үндсээр нь шинэчилсэн, жинхэнэ утгаараа "Enterprise-ready" түвшинд хүргэх алхам болж байна.
Хөгжүүлэгчдэд нэн чухал 5 гол өөрчлөлтийг нарийвчлан авч үзье.
1. DuckDB Сервер боллоо: Quack протокол ба CONNECT команд
DuckDB-ийн анхны өдрөөс хойших гол үзэл баримтлал нь In-process буюу нэг программын санах ойн дотор ажилладаг сан байх явдал байв. Гэвч үүний сөрөг тал нь файл түвшний цоож (file lock) байсан бөгөөд нэг файлыг хоёр өөр процесс (жишээ нь, Jupyter Notebook ба backend API) зэрэг уншиж, бичих боломжгүй байв.
v2.0 хувилбараар энэ хязгаарлалт бүрэн арилж байна:
- Quack Protocol: DuckDB нь сүлжээгээр бие биетэйгээ шууд холбогдох боломжтой бие даасан lightweight сервер болж ажиллах боломжтой болсон.
- CONNECT оператор: Аливаа DuckDB процесс
CONNECT 'duckdb://remote-host:9494'командаар алсын DuckDB сервер рүү холбогдож, query-гээ шилжүүлэн гүйцэтгэх чадвартай болов.
-- Сервер талд (Нэг коммандаар сүлжээний сервер асаах)
CALL quack_serve(token = 'secret_token', port = 9494);
-- Клиент талд (Аливаа DuckDB сессээс алсын сервер рүү холбогдох)
CONNECT 'duckdb://analytics-node:9494' (TOKEN 'secret_token');
SELECT * FROM remote_events WHERE user_id = 42;
Хамгийн сонирхолтой нь клиент өөрөө ч бүтэн тооцооллын хөдөлгүүр тул локал хүснэгт болон алсын хүснэгтийг нэг SQL query дотор шууд JOIN хийх боломжтой. Мөн энэхүү remote pushdown архитектур нь PostgreSQL болон MySQL серверүүдтэй шууд холбогдон SQL-ийг алсын бааз дээр нь боловсруулах түвшинд оновчлогджээ.
2. Асинхрон I/O (Async I/O): S3 дээрх аналитик 19 дахин хурдаслаа
Клоуд орчинд (AWS S3, Google Cloud Storage, Cloudflare R2) байрлах Parquet, CSV файлуудыг унших үед уламжлалт синхрон thread-үүд сүлжээний хоцрогдлоос (network latency) болж сул зогсдог (thread stall) сул талтай байв.
DuckDB 2.0-д тооцоолол хийх REGULAR worker thread болон өгөгдөл татах ASYNC I/O thread pool-ийг (256 хүртэлх thread) бүрэн тусгаарлажээ.
Үр дүн:
- S3 дээрх CSV файл унших хугацаа 19.4 дахин, Parquet файл унших хугацаа 3 дахин хурдассан.
- Read-ahead queue буюу урьдчилан татах механизм, асинхрон санах ойн менежмент нэмэгдсэнээр олон цөмт (64-core) сервер дээр нэгэн зэрэг олон хэрэглэгчийн query ажиллах үед процессор ашиглалт 5.9 цөмөөс 48.1 цөм хүртэл үсрэнгүй өссөн байна.
3. Хагас бүтэцлэгдсэн өгөгдлийн хувьсгал: VARIANT Type
DuckDB 2.0-д VARIANT хэмээх шинэ суурь өгөгдлийн төрөл (first-class citizen) албан ёсоор орж ирэв. Энэ нь Snowflake болон Databricks-ийн дэвшилтэт хандлагатай төстэй бөгөөд JSON, динамик бүтцүүдийг хадгалахдаа доторх түлхүүр (schema)-үүдийг нь багана тус бүрээр задлан (shredding), баганан түвшинд шахаж хадгалдаг.
Ингэснээр бүтцийг нь урьдчилан тодорхойлоогүй unstructured/semi-structured өгөгдөл дээр массив болон JSON түлхүүрээр хайлт хийхэд бүх текстийг parse хийх шаардлагагүй, шууд баганан хурдаар индексжүүлэн шүүдэг болсон байна.
4. PostgreSQL-ээс тусгаарлагдсан шинэ SQL Parser ба Triggers
DuckDB өнөөг хүртэл PostgreSQL-ийн нээлттэй эхийн SQL parser-ийг fork хийн ашиглаж байсан бол v2.0 дээр өөрсдийн цоо шинэ PEG-based (Parsing Expression Grammar) бие даасан SQL parser-ийг анх удаа нэвтрүүлжээ.
Энэхүү шинэ parser нь DuckDB-ийн өөрийн өвөрмөц синтакс (жишээ нь, COLUMNS(* EXCLUDE ...), FROM түлхүүр үгийг SELECT-ийн өмнө бичих гэх мэт) болон шинэ боломжуудыг нэмэхэд илүү уян хатан болсон байна. Мөн реляци өгөгдлийн сангуудын сонгодог боломж болох Triggers, CTE дотор шууд INSERT/UPDATE/DELETE хийх DML синтакс нэмэгдэв.
5. Stable ABI ба Гуравдагч Extension-ий Экосистем
Өмнө нь DuckDB шинэ хувилбар гарах бүрд өөрсдийн бичсэн C/C++ extension-үүдийг дахин хөрвүүлэх (recompile) шаардлагатай байсан бол v2.0-оос эхлэн тогтвортой C API (Stable ABI) баталгаажиж байна.
Хөгжүүлэгчид өөрсдийн тусгай алгоритм, вектор хайлт, дотоод интеграцын өргөтгөлөө (extension) нэг л удаа build хийж, DuckDB-ийн дараа дараагийн бүх хувилбар дээр асуудалгүй ажиллуулах, мөн өөрийн байгууллагын хувийн Signed Extension Repository дээрээс дуудаж ашиглах боломж бүрдлээ.
Дүгнэлт: Энэ нь хөгжүүлэгчдэд ямар ач холбогдолтой вэ?
DuckDB 2.0 нь зөвхөн Python скрипт эсвэл Jupyter дээр ажилладаг "хөнгөн хэрэгсэл" байхаа больж, Snowflake, ClickHouse, BigQuery зэрэг томоохон үүлэн системүүдийн зардлыг хэмнэх, төвлөрсөн микросервисүүдийн дундын аналитик хөдөлгүүр болох бүрэн чадамжтай болж байна.
Хэрэв та өгөгдлийн дамжлага (ETL/ELT), клоуд дээрх Parquet боловсруулалт эсвэл өндөр ачаалалтай дата аналитик систем хөгжүүлдэг бол DuckDB 2.0-ийн preview хувилбарыг одооноос туршиж эхлэхийг зөвлөж байна.
Эх сурвалж: DuckDB Official Blog - A Preview of DuckDB v2.0
Сэтгэгдэл
Ачаалж байна...