C#和NewSQL更配 —— TiDB入門,
一、背景
在上一篇嘗試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輪融資,希望越做越好吧
原文:http://www.cnblogs.com/Zachary-Fan/p/tidb_net_csharp.html
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com