Hypertable v.HBase和BigTable v.SQL

Rya*_*ter 2 sql postgresql hbase nosql hypertable

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

此外,BigTable和SQL RDBMS之间的主要优缺点是什么,以及在使用像Postgres和Hypertable这样的传统RDBMS编写项目之间可以有什么显着的差异?

Den*_*rdy 5

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

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

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

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

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

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

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

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

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

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

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

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

  • 并非所有NoSQL数据库都是面向列的,并非所有RDBMS都是面向行的. (4认同)