由于Hypertable和HBase似乎是两个主要的开源BigTable实现,这两个数据库之间的主要优缺点是什么?
此外,BigTable和RDBMSes之间的主要优点和缺点是什么,我认为用传统的RDBMS (如Postgres和Hypertable )编写一个项目之间有什么重大的区别呢?
发布于 2011-05-15 04:40:31
冒着扩大你的第二个问题的风险(我从来没有玩过BigTable,但我玩过MongoDB和CouchDB)。
据我所理解,最重要的区别是RDBMS都使用基于行的存储,而NoSQL引擎则使用基于列的存储。利与弊主要来源于这一点。
http://en.wikipedia.org/wiki/Column-oriented_DBMS
我倾向于记住的主要考虑因素是ACID遵从性: NoSQL引擎最终是一致的,而不是总是一致的。把它想象成一个类似于网站缓存的存储:后者通常是有效和一致的,但偶尔会稍微过时/不一致。
这里没有对错:对于一些用例(例如搜索引擎、博客)来说,稍微不一致是一个非常可接受的选择;而对于另一些人(例如银行、计费系统)则不是。(我倾向于研究需要原子性的东西。)
然后,有很多性能方面的考虑,这些考虑都归结为实现细节。
争取最终一致性的一个直接后果是,完整性检查等等通常是在应用程序中完成的,而不是在数据存储区(即没有触发器或存储过程可供提及)。您的数据存储以较少的工作量结束,这将带来明显的性能好处。
基于列的存储意味着如果从文档中更新单个列,则只会使该列失效。相反,基于行的存储使整个行无效。根据您通常更新数据的方式(即只更新几列和大多数列),这两种方法都可以加起来。
基于列的存储的另一面是,它使联接变得更复杂(从实现的角度来看)。在过于简单的术语中,把它看作是每个列都有一个EAV表;这对于几个表来说是很好的。如果您需要一份大型报告,需要十几个销售或股票方面的参与(好的RDBMS将很好地处理这些问题),则情况就不同了。
希望更有经验的用户能够加入到NoSQL切分和复制中。在这一点上,我只想指出Postgres自9.0以来就有内置的复制特性,并且非常擅长处理跨多个分区的查询。
不管怎样..。长话短说:除非您已经知道,在您的下一个项目中,您需要立即将大量数据中心的请求扩展到千兆字节和数以兆计的请求,我认为在选择一个SQL或NoSQL实现时,您应该考虑的唯一考虑因素是您是否绝对需要遵循ACID。
最后,如果您的主要兴趣在于尝试一个新的玩具,请考虑尝试一个面向图形的数据库。这些潜在的结合了基于行和列的存储的好处。
https://stackoverflow.com/questions/6006089
复制相似问题