起初是由於看了PingCAP的幾篇博客,而後知道了所謂的NewSQL。後來發現本身對於OLTP中的一些技術點並非特別瞭解,就決定從本身稍微熟悉一點的技術棧開始作一些探究。因此,這是數據庫系列中的第一篇 :)。算法
評價一個數據庫的事務性每每會從ACID四個方面來考慮,咱們先簡單看看ACID具體表明着什麼含義:數據庫
知道了ACID的概念以後,就很容易地去闡述HBase的事務性。apache
HBase性能高,適合OLAP查詢/計算。傳統數據庫MySQL支持事務性,可是沒法方便地支撐海量數據的存儲和查詢。若是HBase可以徹底地支持ACID的話,而且穩定性有所保障的 狀況下,相信有很多人會選擇棄用RDBMS吧。那麼咱們能夠看看,單純以ACID來說,HBase還須要作什麼才能彌補完整事務性的空缺。框架
若是要實現跨表、跨節點的事務保證,必需要想一個機制來保證,全部節點的事務同時成功或者同時失敗。比較經典的是2PC(2-Phase-Commit)機制,這個我在以前Flink的博客中提到過,將不一樣節點的提交分爲兩步驟,第一步爲Pre-Commit,待全部節點完成Pre-Commit以後,再真正的觸發事務。
來實現這個流程,首先須要有一個Manager和全部節點保持通訊,這樣才能保證你們的commit流程處於一致的狀態。固然,這個機制也不是萬能的,若是在真正觸發事務時gg了,那也沒轍了。目前沒有看到更好的算法或機制,也多是我見識太少?性能
重點是在不一致時實現回滾。這意味着在寫以前,必需要先讀取數據。其實在我看了一兩篇數據庫論文以後,發現大部分數據庫都是這樣作的...。因而一個寫事務的時間線就變成了這樣:線程
至於這兩部分,HBase目前倒也能夠達到標準。cdn
固然,已經有若干個線程的框架支持HBase的事務性,如Apache Tephra,感興趣的能夠自行研究。不出意外的話,我在這週會再寫一篇這個的系列的文章,若是喜歡就關注下面的公衆號吧!blog