Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
超表。HBase和BigTable v。SQL_Sql_Postgresql_Nosql_Hbase_Hypertable - Fatal编程技术网

超表。HBase和BigTable v。SQL

超表。HBase和BigTable v。SQL,sql,postgresql,nosql,hbase,hypertable,Sql,Postgresql,Nosql,Hbase,Hypertable,由于Hypertable和HBase似乎是两种主要的开源BigTable实现,这两种数据库之间的主要优缺点是什么 此外,BigTable和SQL RDBMS之间的主要优缺点是什么,以及使用传统RDBMS(如Postgres和Hypertable)编写项目之间的显著差异是什么?冒着将第二个问题扩大到我从未使用过BigTable的风险,但我玩过MongoDB和CouchDB 就我的理解而言,最重要的区别在于RDBMS都使用基于行的存储,而NoSQL引擎使用基于列的存储。利与弊主要来自这一点 我倾向于

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


此外,BigTable和SQL RDBMS之间的主要优缺点是什么,以及使用传统RDBMS(如Postgres和Hypertable)编写项目之间的显著差异是什么?

冒着将第二个问题扩大到我从未使用过BigTable的风险,但我玩过MongoDB和CouchDB

就我的理解而言,最重要的区别在于RDBMS都使用基于行的存储,而NoSQL引擎使用基于列的存储。利与弊主要来自这一点

我倾向于记住的主要考虑事项是ACID遵从性:NoSQL引擎最终是一致的,而不是始终一致的。把它想象成一个行为类似于网站缓存的存储:后者通常是有效的和一致的,但偶尔会有些过时/不一致

这里没有对错:对于一些用例,例如搜索引擎、博客,稍微不一致是一个非常可以接受的选择;对于其他公司,例如银行、账单系统,则不是。我倾向于研究需要原子性的东西

然后,还有很多性能方面的考虑,这些考虑可以分解为实现细节

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

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

基于列的存储的另一面是,从实现的角度来看,它使连接更加复杂。用过于简单的术语来说,可以将其视为每列有一个EAV表;这适用于一些桌子。如果你需要一个大报告,需要一打销售或股票的连接,而一个好的RDBMS可以很好地处理这些连接,那么情况就不同了

更有经验的用户有望参与NoSQL切分和复制。关于这一点,我只想指出,自9.0以来,Postgres具有内置的复制功能,并且非常擅长处理跨多个分区的查询

无论如何。。。长话短说:除非您已经知道在下一个项目中需要在大量数据中心中立即扩展到PB和数以百万计的请求,否则我认为在选择SQL或NoSQL实现时,您应该考虑的唯一问题是您是否绝对需要ACID合规性


最后,如果你的主要兴趣在于尝试一种新的玩具,那就试着尝试一个面向图形的数据库吧。这些潜在地结合了行存储和列存储的优点。

很有趣,谢谢!图形数据库听起来很酷,让我难以忘怀。不过,从我的理解来看,这只是一个吹毛求疵,我认为虽然迪纳摩/卡桑德拉最终是一致的,但BigTable是完全一致的,如果我错了,请纠正我。另外,我刚刚发现的一些有趣的东西可能适用于BigTable:Re BigTable我真的对它一无所知。但我很高兴你发现答案很有趣-并非所有的NoSQL数据库都是面向列的,也并非所有的RDBMS都是面向行的。BigTable白皮书是公开的,是BT公开发布信息的来源。另外,请参阅GFS白皮书。