Hypertable v.HBase和BigTable v.SQL

时间:2011-05-15 02:19:09

标签: sql postgresql nosql hbase hypertable

由于Hypertable和HBase似乎是两个主要的开源BigTable实现,这两个数据库之间的主要优缺点是什么?

此外,BigTable和SQL RDBMS之间的主要优缺点是什么,以及在使用像Postgres和Hypertable这样的传统RDBMS编写项目时我可以期待哪些重大差异?

1 个答案:

答案 0 :(得分:5)

冒着扩大你的第二个问题的风险(我从未玩过BigTable,但我玩过MongoDB和CouchDB)......

最重要的区别,就我所知,无论如何,RDBMS都使用基于行的存储,而NoSQL引擎使用基于列的存储。优点和缺点主要源于这一点。

http://en.wikipedia.org/wiki/Column-oriented_DBMS

我倾向于记住的主要考虑因素是ACID合规性:NoSQL引擎最终一致,而不是始终一致。可以把它想象成一个行为类似于网站缓存的存储:后者通常是有效且一致的,但偶尔会略微过时/不一致。

这里没有对错:对于某些用例(例如搜索引擎,博客),稍微不一致是一个非常可接受的选择;对于其他人(例如银行,计费系统),它不是。 (我倾向于研究需要原子性的东西。)

然后,有很多性能考虑因素可以分解为实现细节。

争取最终一致性的直接后果是完整性检查等通常在应用程序而不是数据存储中完成(即,没有触发器或存储过程可以说)。您的数据存储最终会减少工作量,从而带来明显的性能优势。

基于列的存储意味着如果从文档更新单个列,则只会使该列无效。相反,基于行的存储会使整个行无效。根据您通常更新数据的方式(即只有几列与大多数列相比),任何一种方法都可以相加。

基于列的存储的另一面是它使连接变得更加棘手(从实现的角度来看)。用过于简单的术语,将其视为每列有一个EAV表;这适用于几张桌子。如果您需要一个需要十几个销售或股票连接的大型报告(一个好的RDBMS可以处理得很好),这是一个不同的故事。

更有经验的用户希望能够加入NoSQL分片和复制。在这方面,我只觉得Postgres自9.0以来具有内置的复制功能,并且非常擅长处理跨多个分区的查询。

无论如何......简而言之:除非你已经知道在下一个项目中你需要立即扩展到数PB和数百万的数据中心请求,我认为你唯一的考虑因素是在选择SQL或NoSQL实现时,您应该记住是否绝对需要ACID合规性。

最后,如果您的主要兴趣在于尝试新玩具,请考虑尝试使用面向图形的数据库。这些可能结合了row- 基于列的商店的好处。