閱讀目錄 背景 TiDB是什麼 環境部署 實戰 性能測試 結語 一、背景 在上一篇嘗試CockroachDB(傳送門在此:http://www.cnblogs.com/Zachary-Fan/p/cockroachdb_net_csharp.html)的過程中,發現如果從常規的RDBMS遷移過去幾乎 ...
閱讀目錄
一、背景
在上一篇嘗試CockroachDB(傳送門在此:http://www.cnblogs.com/Zachary-Fan/p/cockroachdb_net_csharp.html)的過程中,發現如果從常規的RDBMS遷移過去幾乎是不太可能的事情,所以掉頭開始調研一下也是這2年比較火的一個NewSQL,而且是我們國人做的產品,火爆程度甚不亞於CockroachDB —— TiDB。
二、TiDB是什麼
TiDB(https://www.pingcap.com/index-zh)也是受Google Spanner / F1 論文的啟發, 實現了自動的水平伸縮,強一致性的分散式事務,基於 Raft 演算法的多副本複製等重要 NewSQL 特性。 從對外提供的功能上它與CockroachDB是類似的,其中最大的區別在它完全相容MySQL協議,支持包括跨行事務,JOIN 及子查詢在內的絕大多數 MySQL 的語法(看著就用起來很爽的樣子)。
三、環境部署
官方文檔(https://www.pingcap.com/docs-cn)寫的非常詳細,按照做就好了。筆者在CentOS上直接使用Binary的方式進行的部署。然後使用任意一個可以連接Mysql的客戶端連上去即可。預設埠是4000,有一個內置的“test”資料庫。使用root賬戶,預設無需密碼即可連上。筆者使用DBeaver進行連接,如下圖1:
四、實戰
和上一篇一樣,我們現在在直接在test資料庫下創建好待測試的表,然後在Nuget上引用Oracle發佈的MySql官方DLL,直接就可以測試了,和MySql用法一模一樣,代碼如下:
using (var conn = new MySqlConnection(connectionString)) { using (var cmd = conn.CreateCommand()) { cmd.Connection = conn; cmd.CommandText = "SELECT id, balance FROM accounts"; cmd.CommandType = CommandType.Text; using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { Console.WriteLine(@" reader[id] is {0}", reader["id"]); Console.WriteLine(@" reader[balance] is {0}", reader["balance"]); } } } }
五、性能測試
好了測試環境和上篇一樣,客戶端機器是 4核 i5-4300U,資料庫所在的機器是 8核 Xeon(R) E5630。結果里包含了上篇的測試結果以作參考。其中增加了對Join的測試,結果見下圖1(點擊可查看大圖)。
特別註意的是,分散式資料庫對資源的消耗是單體資料庫的好幾個量級,其中CockroachDB和TiDB跑不上去都是因為CPU跑滿了。但是值得註意的是,其中TiDB的綜合結果比Cockroach更好(除了在長連接+少數據量的情況下)。由於硬體資源不夠本次未做分散式模式下的性能,這個我會在接下去進一步進行測試,主要是為了驗證在CPU未達到瓶頸的情況下,與傳統單體關係型資料庫的性能差異,敬請期待~
六、結語
算是將對標Google Spanner / F1 的2個數據都體驗了一把,欣喜的是,我們國人做的TiDB目前的功能和質量上都勝過CockroachDB一籌,還是很值得期待的。另外今年6月剛獲得B輪融資,希望越做越好吧~
作者:Zachary_Fan
出處:http://www.cnblogs.com/Zachary-Fan/p/cockroachdb_net_csharp.html
如果你想及時得到個人自寫文章的消息推送,歡迎掃描下麵的二維碼~。