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