Databend v1.0 Release 正式發(fā)布
尊敬的 Databenders,在 Databend Labs 成立兩周年之際,我們非常高興地宣布 Databend v1.0 正式發(fā)布。
Databend 社區(qū)一直在致力于解決大數(shù)據(jù)分析的成本和復(fù)雜度問(wèn)題,并正在被頂級(jí)場(chǎng)景和頂級(jí)需求所推動(dòng)。 根據(jù)可統(tǒng)計(jì)信息,每天約 700TB 數(shù)據(jù)在使用 Databend 寫入到云對(duì)象存儲(chǔ)并進(jìn)行分析,用戶來(lái)自歐洲、北美、東南亞、非洲、中國(guó)等地,每月為他們節(jié)省數(shù)百萬(wàn)美元成本。 Databend v1.0 是一個(gè)具有里程碑意義的版本,我們相信它將進(jìn)一步加速云端海量數(shù)據(jù)分析的發(fā)展。
今天,我將首先介紹 Databend v1.0 相比 v0.9 版本所做的改進(jìn),然后探討我們團(tuán)隊(duì)的愿景和未來(lái)展望?,F(xiàn)在就讓我們開始吧!
v1.0 改進(jìn)
Databend 在版本 v1.0 中實(shí)現(xiàn)了驚人的性能提升,在 ClickBench 測(cè)試中獲得:數(shù)據(jù)加載第一名,在查詢環(huán)節(jié), c6a.4xlarge 第一名, c5a.4xlarge 第二名,c6a.metal 第三名

此外,Databend 社區(qū)還在版本 v1.0 中推出了多項(xiàng)新功能:
UPDATE
現(xiàn)在,用戶可以使用 UPDATE 語(yǔ)句來(lái)更新 Databend 中的數(shù)據(jù)。
更新語(yǔ)句的格式如下:
-- Update a book (Id: 103)
UPDATE bookstore SET book_name='The long answer (2nd)' WHERE book_id=103;
通過(guò)支持 UPDATE 功能,Databend 實(shí)現(xiàn)了對(duì) CRUD 操作的完整支持。
ALTER TABLE
在 v1.0 中,用戶可以使用 ALTER TABLE 來(lái)修改 Databend 中的表結(jié)構(gòu):
-- Add a column
ALTER TABLE t ADD COLUMN c Int DEFAULT 10;
DECIMAL
在完成了 Databend 類型系統(tǒng)的大型重構(gòu)之后,社區(qū)在一個(gè)堅(jiān)實(shí)的基礎(chǔ)上實(shí)現(xiàn)了 DECIMAL 數(shù)據(jù)類型的支持!
-- Create a table with decimal data type.
create table tb_decimal(c1 decimal(36, 18));
-- Insert two values.
insert into tb_decimal values(0.152587668674722117), (0.017820781941443176);
select * from tb_decimal;
+----------------------+
| c1 ? ? ? ? ? ? ? ? ? |
+----------------------+
| 0.152587668674722117 |
| 0.017820781941443176 |
+----------------------+
Native Format
在 v0.9 版本中引入的 Native Format strawboat 得到了進(jìn)一步的完善!社區(qū)為 strawboat 增加了半結(jié)構(gòu)化數(shù)據(jù)的支持,并引入了多項(xiàng)性能優(yōu)化,幫助 Databend 在 HITS 數(shù)據(jù)集的性能取得了巨大提升。
CBO
引入了直方圖框架,可以利用統(tǒng)計(jì)信息更為精確地進(jìn)行代價(jià)估算。進(jìn)一步完善和強(qiáng)化 join reorder 算法,從而大大的提高多表 join 的性能,幫助 Databend 在 TPCH 數(shù)據(jù)集上的性能取得顯著提升。
SELECT FROM STAGE
STAGE 是 Databend 數(shù)據(jù)流轉(zhuǎn)的核心。我們之前已經(jīng)支持從 STAGE 中加載數(shù)據(jù)和向 STAGE 中導(dǎo)出數(shù)據(jù),現(xiàn)在我們更進(jìn)一步,支持了直接在 STAGE 中進(jìn)行數(shù)據(jù)查詢!
用戶只需要為 Databend 創(chuàng)建一個(gè)包含數(shù)據(jù)文件的 STAGE,就可以輕松進(jìn)行數(shù)據(jù)查詢,無(wú)需編寫復(fù)雜的建表語(yǔ)句或繁瑣的數(shù)據(jù)導(dǎo)入流程。
select min(number), max(number) from @lake (pattern => '.*parquet');
+-------------+-------------+
| min(number) | max(number) |
+-------------+-------------+
| ? ? ? ? ? 0 | ? ? ? ? ? 9 |
+-------------+-------------+
如果用戶只需要進(jìn)行一次性的查詢,還可以直接使用更簡(jiǎn)短的 URI 形式:
select count(*), author
from 'https://datafuse-1253727613.cos.ap-hongkong.myqcloud.com/data/books.parquet' ? ?(file_format => 'parquet') ? ?
group by author;
+----------+---------------------+
| count(*) | author ? ? ? ? ? ? ?|
+----------+---------------------+
| ? ? ? ?1 | Jim Gray ? ? ? ? ? ?|
| ? ? ? ?1 | Michael Stonebraker |
+----------+---------------------+
Query Result Cache
在 v1.0 版本中,Databend 社區(qū)借鑒了 ClickHouse 社區(qū)的設(shè)計(jì),并增加了 Query Result Cache 功能。當(dāng)?shù)讓訑?shù)據(jù)沒(méi)有發(fā)生變化時(shí),執(zhí)行相同的查詢會(huì)命中緩存,避免了重復(fù)執(zhí)行查詢的過(guò)程。
MySQL [(none)]> SELECT WatchID, ClientIP, COUNT(*) AS c, SUM(IsRefresh), AVG(ResolutionWidth)
FROM hits
GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10;
+--------------------+-------------+-----+----------------+----------------------+
| watchid ? ? ? ? ? ?| clientip ? ?| c ? | sum(isrefresh) | avg(resolutionwidth) |
+--------------------+-------------+-----+----------------+----------------------+
| 6655575552203051303| ?1611957945 | ? 2 | ? ? ? ? ? ? ?0 | ? 1638.0 |
| 8566928176839891583| -1402644643 | ? 2 | ? ? ? ? ? ? ?0 | ? 1368.0 |
| 7904046282518428963| ?1509330109 | ? 2 | ? ? ? ? ? ? ?0 | ? 1368.0 |
| 7224410078130478461| ?-776509581 | ? 2 | ? ? ? ? ? ? ?0 | ? 1368.0 |
| 5957995970499767542| ?1311505962 | ? 1 | ? ? ? ? ? ? ?0 | ? 1368.0 |
| 5295730445754781367| ?1398621605 | ? 1 | ? ? ? ? ? ? ?0 | ? 1917.0 |
| 8635802783983293129| ? 900266514 | ? 1 | ? ? ? ? ? ? ?1 | ? 1638.0 |
| 5650467702003458413| ?1358200733 | ? 1 | ? ? ? ? ? ? ?0 | ? 1368.0 |
| 6470882100682188891| -1911689457 | ? 1 | ? ? ? ? ? ? ?0 | ? 1996.0 |
| 6475474889432602205| ?1501294204 | ? 1 | ? ? ? ? ? ? ?0 | ? 1368.0 |
+--------------------+-------------+-----+----------------+---------------------+
10 rows in set (3.255 sec)
MySQL [(none)]> SELECT
WatchID, ClientIP, COUNT(*) AS c, SUM(IsRefresh), AVG(ResolutionWidth)
FROM hits
GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10;
+---------------------+-------------+------+----------------+--------------+
| watchid ? ? ? ? ? ? | clientip ? ?| c | sum(isrefresh)| avg(resolutionwidth) |
+---------------------+-------------+------+----------------+-------------+
| 6655575552203051303 | ?1611957945 | 2 | ? ? ? ? ? ? ?0| ? 1638.0 ? ? ? ?|
| 8566928176839891583 | -1402644643 | 2 | ? ? ? ? ? ? ?0| ? 1368.0 ? ? ? ?|
| 7904046282518428963 | ?1509330109 | 2 | ? ? ? ? ? ? ?0| ? 1368.0 ? ? ? ?|
| 7224410078130478461 | ?-776509581 | 2 | ? ? ? ? ? ? ?0| ? 1368.0 ? ? ? ?|
| 5957995970499767542 | ?1311505962 | 1 | ? ? ? ? ? ? ?0| ? 1368.0 ? ? ? ?|
| 5295730445754781367 | ?1398621605 | 1 | ? ? ? ? ? ? ?0| ? 1917.0 ? ? ? ?|
| 8635802783983293129 | ? 900266514 | 1 | ? ? ? ? ? ? ?1| ? 1638.0 ? ? ? ?|
| 5650467702003458413 | ?1358200733 | 1 | ? ? ? ? ? ? ?0| ? 1368.0 ? ? ? ?|
| 6470882100682188891 | -1911689457 | 1 | ? ? ? ? ? ? ?0| ? 1996.0 ? ? ? ?|
| 6475474889432602205 | ?1501294204 | 1 | ? ? ? ? ? ? ?0| ? 1368.0 ? ? ? ?|
+---------------------+-------------+---+---------------+-----------------+
10 rows in set (0.066 sec)
Table Data Cache
緩存是存算分離架構(gòu)中的重要組成部分。在 v1.0 版本中,Databend 社區(qū)為我們帶來(lái)了 Table Data Cache!當(dāng) Databend 執(zhí)行查詢時(shí),會(huì)根據(jù)訪問(wèn)數(shù)據(jù)的熱度情況決定是否將該數(shù)據(jù)塊保存到緩存中,以加速下一次訪問(wèn)。

Aggregate Spill
在 v1.0 版本中, Databend 引入了 Aggregate spill, 當(dāng)在 Databend 中執(zhí)行聚合查詢時(shí), 會(huì)根據(jù) Databend 當(dāng)前的內(nèi)存使用情況動(dòng)態(tài)決定將內(nèi)存中的聚合數(shù)據(jù)臨時(shí)保存并持久化到對(duì)象存儲(chǔ)中, 防止查詢過(guò)程中使用過(guò)高的內(nèi)存。
未來(lái)展望
經(jīng)過(guò)這些版本的打磨,Databend 終于有了一個(gè)雛形?,F(xiàn)在,讓我們重新認(rèn)識(shí)一下 Databend:
一個(gè)使用 Rust 開發(fā)的云原生數(shù)據(jù)倉(cāng)庫(kù):存算分離,面向?qū)ο蟠鎯?chǔ)設(shè)計(jì),極致彈性
支持完整的 CRUD 特性,提供了 MySQL/Clickhouse/HTTP RESTful 等協(xié)議支持
提供原生的 ARRAY、MAP、JSON 等復(fù)雜類型和 DECIMAL 高精度類型支持
構(gòu)建了類似于 Git 的 MVCC 列式存儲(chǔ)引擎,支持 Data Time Travel 和 Data Share 能力
不受存儲(chǔ)供應(yīng)商的限制,可以在任何存儲(chǔ)服務(wù)上運(yùn)行,并直接查詢?nèi)魏未鎯?chǔ)服務(wù)上的數(shù)據(jù)
目前已全面支持 HDFS/Cloud-Based Object Storage 協(xié)議,包括:阿里云 OSS,騰訊云 COS,華為云 OBS,以及 S3,Azure Blob, Google Cloud Storage
Databend 的征程遠(yuǎn)遠(yuǎn)不止于此,在未來(lái)我們希望 Databend 能擁有:
更強(qiáng)大的功能
在緊隨其后的 v1.1 版本中,我們希望實(shí)現(xiàn)如下功能:
JSON 索引:提高半結(jié)構(gòu)化數(shù)據(jù)檢索能力
分布式 Ingest 能力:提高數(shù)據(jù)寫入速度
MERGE INTO 功能:實(shí)現(xiàn)數(shù)據(jù)源增、刪、改的實(shí)時(shí) CDC 能力
Windows Function
我們希望這些功能能進(jìn)一步滿足用戶的需求,并且實(shí)現(xiàn) Databend 在 CDC 場(chǎng)景下的突破。
更開放的社區(qū)
Databend Labs 由一群開源愛(ài)好者組成,Databend 項(xiàng)目從創(chuàng)建之初就是采用 Apache 2.0 協(xié)議授權(quán)的開源項(xiàng)目。在借鑒和吸收 ClickHouse,CockroachDB 等開源項(xiàng)目?jī)?yōu)秀思想的同時(shí),我們也在以自己的方式回饋社區(qū):
開源了Databend 元數(shù)據(jù)服務(wù)集群的共識(shí)引擎 Openraft
向 Apache 軟件基金會(huì)捐贈(zèng)了底層的數(shù)據(jù)訪問(wèn)引擎 OpenDAL 并成功進(jìn)入孵化器開始孵化
成為向量計(jì)算基礎(chǔ)庫(kù) arrow2 等多個(gè)依賴項(xiàng)目的貢獻(xiàn)者
跟進(jìn)并采用 Rust Nightly,幫助 Rust 社區(qū)復(fù)現(xiàn)并驗(yàn)證問(wèn)題
沒(méi)有開源社區(qū)就沒(méi)有今天的 Databend,感謝 144 個(gè)參與 Databend 的貢獻(xiàn)者!接下來(lái),我們將更開放地與其他開源社區(qū)合作,支持讀寫 Iceberg、Delta Lake 等格式,打破數(shù)據(jù)間的壁壘,使數(shù)據(jù)能夠更自由靈活地流轉(zhuǎn)。
感謝大家!
關(guān)于 Databend
Databend 是一款開源、彈性、低成本,基于對(duì)象存儲(chǔ)也可以做實(shí)時(shí)分析的新式數(shù)倉(cāng)。期待您的關(guān)注,一起探索云原生數(shù)倉(cāng)解決方案,打造新一代開源 Data Cloud。
Databend Cloud:https://databend.cn
Databend 文檔:https://databend.rs/
Wechat:Databend
GitHub:https://github.com/datafuselabs/databend