分布式 NewSQL 對比

2022-06-02 14:39:10 字數 3176 閱讀 7240

說明:

pingcap 公司基於 

google 

spanner / f1

**實現的開源分布式 

newsql 

資料庫。

開源分布式 newsql 

關係型資料庫 

tidb 

是新一代開源分布式 

newsql 

資料庫,模型受 

google spanner / f1 

**的啟發,實現了自動的水平伸縮,強一致性的分布式事務,基於 

raft 

演算法的多副本複製等重要 

newsql 

特性。tidb 

結合了 

rdbms 

和 nosql 

mysql

協議,使遷移使用成本降到極低

特性:sql支援(

tidb 

是 mysql 

相容的) 水平彈性擴充套件(吞吐可線性擴充套件) 分布式事務 跨資料中心資料強一致性保證 故障自恢復的高可用 海量資料高併發實時寫入與實時查詢(

htap 

混合負載) 

tidb 

的設計目標是 

100% 

的 oltp 

場景和 

80% 

的 olap 

場景,更複雜的 

olap 

分析可以通過 

tispark 

專案來完成。

說明:構建於事務處理及強一致性kv

儲存上的分布式

sql資料庫,支援水平擴充套件、自動容錯處理、強一致性事務,並且提供

sql介面用於資料處理,是

google spanner/f1

的開源實現。 

cockroachdb

適用於應用對資料要求精確、可靠、完全正確的場景,支援自動複製、均勻分布、基於極小配置的資料恢復,可用於分布式的、可複製的聯機事務處理(

oltp

),多資料中心的部署,私有雲的基礎構建,它不適用於讀少寫多的場景,可以用記憶體資料庫來代替,也不適用於複雜的

join

查詢,重量級的資料分析及聯機分析處理(

olap

)。特性:

支援postgresql

對標準sql

支援較完善

較穩定tidb和cockroach之間存在一些關鍵差異。

1.使用者介面和生態系統儘管tidb和cockroachdb都支援sql,但tidb與mysql協議相容,而cockroach選擇postgresql。您可以使用任何mysql客戶端直接連線到tidb伺服器。

2.體系結構整個tidb專案在邏輯上分為兩部分:無狀態sql層(tidb)和分布式儲存層(tikv)。由於tidb建立在tikv之上,開發人員可以根據自己的業務自由選擇使用tidb或tikv。如果您只需要分布式鍵值資料庫,則可以單獨使用tikv以獲得更高的效能和更低的延遲。

總之,我們的系統是高度分層和模組化的,而cockroachdb是乙個p2p系統。我們系統的設計導致我們使用兩種程式語言:go for tidb和rust for tikv以提高儲存效能。

並且受益於高度分層的架構,我們構建了另乙個專案[1],以便在tidb / tikv之上執行apache spark來回答複雜的olap查詢。它利用了spark平台和分布式tikv集群的優勢。

3.事務模型儘管cockroachdb和tidb都支援acid事務,但tidb使用了google的percolator引入的模型。該模型的關鍵特性是它需要乙個獨立的時間戳分配器。與spanner一樣,tidb中的每個事務都有乙個時間戳來隔離不同的事務。

cockroachdb使用的模型類似於google在其**中描述的truetime api。然而,與google不同,cockroachdb沒有構建原子鐘和gps接收器來保持不同資料中心的時間一致。相反,它使用ntp進行時鐘同步,這導致了不確定錯誤的問題。為了解決這個問題,cockroachdb採用了混合邏輯時鐘(hlc)演算法。

4.程式語言tidb使用go作為sql層,使用rust作為儲存引擎層。由於go具有垃圾收集器(gc)和執行時,我們認為調整效能將花費我們幾天的時間。因此,我們對tikv使用rust,一種靜態語言。它的表現要好得多。cockroachdb只使用go。

2018-4 重新開源,資料較少

根據foundationdb

的官方文件,

foundationdb

有一系列的侷限性:

單個事務資料量不能超過10mb

鍵的長度不能超過10kb, 

值的長度不能超過

100kb

系統針對並且只針對ssd

優化,使用傳統

hhd既不保證效能也不保證資料庫可用性

foundationdb對於需要讀比較大的主鍵值範圍的查詢效能不好

該系統沒有實現任何的安全和許可權管理,任何人都可以去讀和寫任意乙個主鍵

系統不支援長時間執行的事務 ,具體來說,乙個事務的第乙個操作後超過5

秒如果事務還沒有結束,系統就會報錯。

系統只在<500

個core

的情況下仔細測過,有效能保證

資料庫的資料大小不能超過100tb

系統對每個分割槽都做3

份拷貝,而不會自動對熱點增加更多的拷貝,所以讀的效能有上限。

spanner、

f1:谷歌

oceanbase:阿里

uddb:

ucloud

radondb:青雲中介軟體

對比一番後,tidb需要ssd及多台伺服器,cockroachdb 更友好,優先嘗試。

2018-11-30 更新:

找到tidb的二進位制檔案,可以簡單部署單機或集群版:

由於cockroachdb支援的是postgresql,如果要承接mysql,需要修改成本,而且不好估算;

tidb則幾乎完全相容mysql,承接mysql成本非常低,故對tidb進行了測試。

在一台服上分別啟動mysql和tidb單機版集群,對其進行oltp壓力測試:

debian伺服器一台(4核cpu+8g記憶體)

qps 

tps 

mysql

16000

800tidb

4100

200可見單機情況下mysql的吞吐量比tidb高幾倍,在集群情況下tidb表現會好點;

此處應該是沒有配置ssd硬碟導致結果沒有tidb官網所述好。

參考:

分布式訊息佇列對比

多個分布式訊息佇列比較 系統間耦合性太強,上游系統需要呼叫下游系統的介面,如果後期繼續增加其它下游系統,上游系統還需要增加呼叫介面的 將訊息寫入訊息佇列,只需要下游系統自己從佇列中訂閱,而上游系統不需要做任何修改。非強一致的業務邏輯 允許資料延遲,最終達到一致即可 如果上游系統呼叫多個下游系統的介面...

分布式 分布式鎖

本質是利用redis的setnx 方法的特性來加鎖,setnx 即key不存在則設定key,否則直接返回false,要求在分布式系統中使用同乙個redis服務,以下提供兩種解決方案 1 直接使用redistemplate 這其實並不能完全保證高併發下的安全問題,因為可能在鎖過期之後該執行緒尚未執行完...

分布式 分布式事務

是資料庫執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。事務的acid四大特性 原子性 atomicity 事務作為乙個整體被執行。一致性 consistency 從乙個一致的狀態轉換到另乙個一致的狀態。隔離性 isolation 多個事務併發執行時,併發事務之間互相影響的程度。永續性 d...