TerichDB架構簡介

2021-07-13 20:30:49 字數 2670 閱讀 2681

terichdb是一款高效能和高壓縮率的儲存引擎,既可以單獨作為資料庫使用,也可以作為已有資料庫的儲存引擎使用(如mysql/mongodb)

terichdb的定位類似於wiredtiger、rocksdb或leveldb

基於schema定義,並具有豐富的資料型別

terichdb有兩種使用方式,第一種是作為單獨的資料庫或儲存,第二種是作為其他資料庫的儲存引擎:

作為其他資料庫的儲存引擎(mongodb, mysql, fuse等)

terichdb的資料索引使用了 succinct 技術、nested succinct trie資料結構,壓縮率是b+樹的3到5倍,並且針對不同型別的字段進行了單獨的優化處理,同時使用者也可以指定字段使用的壓縮方式。

我們把自己 terichdb 的索引壓縮演算法稱為可檢索索引壓縮(searchable index compression),terichdb 的索引經過高度壓縮的同時,可以被直接檢索,而且無需事先解壓。

由於整個索引結構會非常的小,預設情況下 terichdb 會將所有的索引都載入到記憶體中,在高度壓縮的索引上檢索速度可以達到極快的速度。

terichdb的資料壓縮方式,與傳統的資料庫也有很大的不同,我們把自己的壓縮演算法稱為可定點訪問資料壓縮(seekable data compression):

terichdb 壓縮演算法

同時,資料的壓縮演算法,還針對以下兩種字段情況,進行了特殊處理

較大的字串

terichdb是一系列領先技術的結晶, 具有模組化、易擴充套件等特性,同時極大的降低了各種系統損耗。

terichdb中,最上層的邏輯層就是乙個表(table),從上圖可以看出,邏輯上乙個 table 就是乙個二維的**,其中recordid是邏輯連續的,當某一行的資料被刪除後,這個recordid還會繼續存在。

第二列是刪除標記,表示改行的刪除狀態,共有兩個標記,分別是:(邏輯刪除,物理刪除), 如(1, 0)表示邏輯刪除,物理上還沒有刪除。

雖然從邏輯上來說,recordid是連續的,但是實際上物理上每乙個表都是」分段(segment)」的,每一段的結構都與上圖一樣。

邏輯編號和物理編號的對映是通過rank select實現的,這部分的效能損耗非常的小(小於1%,甚至小於0.1%)。

特殊情況下,如果沒有做過刪除,物理編號和邏輯編號是完全相同的,這種情況下對映帶來效能損耗也就沒有了。

recordid是標示乙個表中的一行資料用的,當recordid的不變形被確保的情況下:

當然,我們可以配置recordid的不變性宣告週期:

輕微的提公升效能

未建立索引的列,會被儲存在列組(column group)中,列組是在table schema中提前定義好的。

常見的列組會使用我們的可定位資料壓縮(seekable data compression)演算法進行壓縮,同時定長的列組可以被定義為支援原地更新。

索引操作的過程:

索引操作的這兩個操作過程,能實現的功能如下:

根據recordid讀取目標資料

6.3.1. 可寫(writable) & 唯讀(readonly) 段

terichdb 的可寫段(writable segment):

terichdb的唯讀段(readonly)是我們的核心競爭力:

6.3.2. 正在寫(writing) 和 凍結(frozen) 段

凍結段

6.3.3. 正在寫的段 (writing segment)

正在寫的段中的記錄,可以被直接修改

寫資料時索引是同步的(插入/更新/刪除)

6.3.4. 凍結段 (frozen segment)

刪除: 設定刪除標記

更新: 設定邏輯刪除標記,並且在正在寫的段建立乙個新的記錄(即便是在可寫段進行的更新操作)

物理刪除

6.3.5. 唯讀段 (readonly segment)

唯讀段的概述:

如何會產生唯讀的段:

當乙個正在寫的段被凍結了

壓縮通常會比插入更慢一些

當壓縮(或合併、清除)結束

6.3.6. 原地更新的列組 (in-place updatable column groups)

當乙個段正在被壓縮、合併或物理刪除

限制 TerichDB 的寫速度

terichdb 在保持超高壓縮率的同時還有非常高的讀效能,為此付出的代價是 壓縮速度 如果在短時間內寫入大量資料,因為壓縮速度慢,會導致 terichdb 產生過多的 frozen writablesegment,進而影響讀效能。新版 terichdb 增加了對寫速度的限制 下稱限流 從而解決該問...

Entity Framework 架構簡介

當微軟的wcf 大行其道,通用資料訪問模型entity framework卻稍遜一籌,有很多需要完善和進步的地方,本文對entity framework 架構做一下簡介。實體框架 entitry framework 以下簡稱ef 看起來像乙個有趣的技術,更強大,比linq to sql 更先進。這兩...

Lucene 架構簡介

lucene總的來說是 在lucene in action中,lucene 的構架和過程如下圖,說明lucene是有索引和搜尋的兩個過程,包含索引建立,索引,搜尋三個要點。讓我們更細一些看lucene的各元件 那麼如何應用這些元件呢?讓我們再詳細到對lucene api 的呼叫實現索引和搜尋過程。搜...