重复
我对Google的Bigtable了解不多,但我想知道Google的Bigtable和MySQL之类的关系数据库之间有什么区别。两者有什么限制?
答案 0 :(得分:32)
Bigtable是Google的发明,用于处理公司经常处理的大量信息.Bigtable数据集可以扩展到巨大的数量(许多PB),存储分布在大量服务器上。使用Bigtable的系统包括Google的网络索引和Google地球等项目。
关于这个问题的Google whitepaper:
Bigtable是一个稀疏的,分布式的,持久的多维有序映射。地图由行键,列键和时间戳索引;映射中的每个值都是未解释的字节数组。
Bigtable与MySQL相比,内部机制与使比较变得非常不同,预期目标也不会重叠太多。但你可以认为Bigtable有点像单表数据库。想象一下,例如,如果您尝试使用MySQL数据库实现Google的整个网络搜索系统,您将遇到的困难 - Bigtable是围绕解决这些问题而构建的。
可以使用名为GQL(“gee-kwal”)的语言从AppEngine等服务查询Bigtable数据集,该语言基于SQL的子集。 GQL中明显缺少任何类型的JOIN
命令。由于Bigtable数据库的分布式特性,在两个表之间执行连接将非常低效。相反,程序员必须在他的应用程序中实现这样的逻辑,或者设计他的应用程序以便不需要它。
答案 1 :(得分:14)
Google的BigTable和其他类似项目(例如:CouchDB,HBase)是面向数据库的系统,因此数据大多为denormalized(即重复和分组)。
主要优点是: - 由于非规范化,加入操作的成本较低 - 由于数据独立性,数据的复制/分发成本较低(即,如果要跨两个节点分发数据,则可能不会出现在一个节点中存在实体而另一个节点中存在其他相关实体的问题,因为类似数据分组)
这种系统适用于需要实现最佳扩展的应用程序(即,您向系统添加更多节点并且性能按比例增加)。在像MySQL或Oracle这样的RDBMS中,当您连接两个不在同一节点中的表时,如果开始添加更多节点,则连接成本会更高。当您处理大量产品时,这一点变得非常重要。
RDBMS'很好,因为存储模型(表,联接,fks)的丰富性。由于易于扩展,分布式数据库很不错。