起初是由于看了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