Databend 特性系列(1)|Databend 數(shù)據(jù)生命周期
Databend 是一個(gè)使用 Rust 研發(fā)、開源、完全面向云架構(gòu)的新式數(shù)倉,提供極速的彈性擴(kuò)展能力,致力于打造按需、按量的 Data Cloud 產(chǎn)品體驗(yàn)。具備以下特點(diǎn):
開源 Cloud Data Warehouse 明星項(xiàng)目
Vectorized Execution 和 Pull&Push-Based Processor Model
真正的存儲(chǔ)、計(jì)算分離架構(gòu),高性能、低成本,按需按量使用
完整的數(shù)據(jù)庫支持,兼容 MySQL ,Clickhouse 協(xié)議
完善的事務(wù)性,支持 Time Travel, Database Clone, Data Share 等功能
支持基于同一份數(shù)據(jù)的多租戶讀寫、共享操作
現(xiàn)在使用 Databend 的用戶越來越多后,大家面臨一個(gè)問題,使用 Databend 如何備份呢?是不是需要如同 MySQL 一樣每天做一個(gè)物理備份或是邏輯備份呢?答案是:可能還有更好的辦法。這篇文章和大家聊一下 Databend 中數(shù)據(jù)的生命周期,然后再來看 Databend 如何做備份管理。
首先我們來看一下 Databend 的架構(gòu)

Databend 的寫入操作是有事務(wù)性保證,基于事務(wù)隔離 RR 實(shí)現(xiàn)的,底層的數(shù)據(jù)存儲(chǔ)是基于對(duì)象存儲(chǔ),實(shí)質(zhì)上數(shù)據(jù)的持久化安全也是依賴于底層的對(duì)象存儲(chǔ),所以選擇云廠商的 S3, OSS, COS 也是不錯(cuò)的選擇,如果是自建的 minio, ceph 一定要做集群保證。因?yàn)槭腔趯?duì)象存儲(chǔ)寫入,所以任務(wù)的寫入都可以理解為是一個(gè)增量操作,這也讓 Databend 省掉了日志管理,更多的需要把表和對(duì)應(yīng)的 snapshot 關(guān)聯(lián)起來就可以讓數(shù)據(jù)恢復(fù)到任意的時(shí)間點(diǎn)。接下來分 4 個(gè)方面看看 Databend 如何利用對(duì)象存儲(chǔ)實(shí)現(xiàn)一個(gè)無須備份,但數(shù)據(jù)永遠(yuǎn)不丟失的方案。
Databend 數(shù)據(jù)生命周期核心:Snapshot
在講 Databend snapshot 之前,拋出來一個(gè)問題:
如果想訪問一個(gè)表 5 分鐘前的數(shù)據(jù)怎么處理,
一個(gè) delete from tb ; 沒有 where 條件怎么恢復(fù)?
如果在別的數(shù)據(jù)庫這兩個(gè)需求,基本都是災(zāi)難。但在 Databend 中,這些是非常輕松可以完成的。演示如下:
基于 snapshot 讀取數(shù)據(jù)
總共寫入了 4 行數(shù)據(jù),我們來看一下對(duì)應(yīng)的 snapshot 相關(guān)的數(shù)據(jù):
我們看到 previouse_snapshot_id 為 NULL 是第一次寫入的操作。對(duì)應(yīng)的數(shù)據(jù)是:insert into d_tb1 values(1,'databend');如果想讀取這個(gè) snapshot 的數(shù)據(jù)方法:
看到這里是不是覺得這里充滿了魔法了。同樣也可以使用時(shí)間來訪問歷史的數(shù)據(jù):
這個(gè)時(shí)間不用精確值,只用比當(dāng)行對(duì)應(yīng)的 timestamp 值大,小于上面一行的 timestamp 就可以獲取對(duì)應(yīng)的精確數(shù)據(jù)。
再來看一下 delete 沒有 where 條件的操作:
從上面的 snapshot 來看,增加一個(gè)新的 snapshot,所以我們?yōu)榱嗽L問 delete 的數(shù)據(jù),就可以利用 at 語句訪問前一個(gè) snapshot 就可以,如下:
恢復(fù)這個(gè)表,也可以考慮:
再進(jìn)行 rename 操作即可。關(guān)于 at 語法參考:https://databend.rs/doc/reference/sql/query-syntax/dml-at這些特性也是依賴于?Databend 使用底層時(shí)使用的對(duì)象存儲(chǔ),所有的寫入都是增量寫入。例如:對(duì)于 Delete 也只是操作的 meta 并沒有真正的刪除數(shù)據(jù)。這也是 Databend 的一個(gè)特性:Time travle。
Snapshot 終極大招
在上面的演示中,我們看到利用 Databend 的 at 語句加上 snapshot 和 timestamp 實(shí)現(xiàn)對(duì)表任意時(shí)間點(diǎn)和操作前的訪問。在最后恢復(fù)數(shù)據(jù)時(shí),我們還需要借助于建一個(gè)新表,然后 Select 出來數(shù)據(jù),然后對(duì)外訪問。那有沒有更快的方法呢?Databend 永遠(yuǎn)不會(huì)讓你失望,當(dāng)然更快的方法。接下來給你演示一下。首先我們來一下 d_tb1 和 snapshot_location 對(duì)應(yīng)關(guān)系:
從上面的信息中可以看來,每個(gè)表后面通過 SNAPSHOT_LOCATION 的對(duì)應(yīng)的版本對(duì)應(yīng)起來。那么如果我們創(chuàng)建一個(gè)基于前面 snapshot_id 對(duì)應(yīng)的 snapshot_location 對(duì)應(yīng)的位置,會(huì)怎么樣呢?來操作一下:
可以看到數(shù)據(jù)又回來了。這樣也可以通過 rename 的方式直接對(duì)外,提供服務(wù)。是不是感覺到更神奇?;?Snapshot 的引用創(chuàng)建表,也是我們 Databend 數(shù)據(jù) Share 的一個(gè)核心。Snapshot 方式的數(shù)據(jù)管理,也讓 Databend 天然具備了 RR 事務(wù)隔離級(jí)的讀寫操作。
總結(jié)
在上面的文章中我們演示了 snapshot 在 Databend 對(duì)于數(shù)據(jù)生命周期的訪問控制。這里有一個(gè)核心就是云對(duì)象存儲(chǔ)不能炸了。在這個(gè)前題下,如果備份 Databend 的數(shù)據(jù)可以有以下幾種方法:
每天備份一下對(duì)應(yīng)的表結(jié)構(gòu)。
每天備份一下對(duì)應(yīng)表的 fuse_snapshot 對(duì)應(yīng)輸出。
如果是自建的存儲(chǔ)可以增加副本數(shù)來增加安全性。
關(guān)于 Databend
Databend 是一款開源、彈性、低成本,基于對(duì)象存儲(chǔ)也可以做實(shí)時(shí)分析的新式數(shù)倉。期待您的關(guān)注,一起探索云原生數(shù)倉解決方案,打造新一代開源 Data Cloud。
Databend 文檔:https://databend.rs/
Twitter:https://twitter.com/Datafuse_Labs
Slack:https://datafusecloud.slack.com/
Wechat:Databend
GitHub :https://github.com/datafuselabs/databend
