說明:
pingcap 公司基於
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...