【问题标题】:Google's Bigtable vs. A Relational Database [duplicate]Google 的 Bigtable 与关系数据库 [重复]
【发布时间】:2010-10-21 10:34:24
【问题描述】:

重复

我对 Google 的 Bigtable 了解不多,但我想知道 Google 的 Bigtable 与 MySQL 等关系数据库之间的区别是什么。两者的局限性是什么?

【问题讨论】:

标签: database relational bigtable


【解决方案1】:

Bigtable 是 Google 的一项发明,用于处理公司经常处理的大量信息。Bigtable 数据集可以增长到巨大的规模(数 PB),存储分布在大量服务器上。使用 Bigtable 的系统包括谷歌的网络索引和谷歌地球等项目。

Google whitepaper上题:

Bigtable 是一个稀疏、分布式、持久的多维排序图。该映射由行键、列键和时间戳索引;映射中的每个值都是一个未解释的字节数组。

Bigtable 与 MySQL 的内部机制如此不同,以至于难以进行比较,而且预期目标也没有太多重叠。但是你可以把 Bigtable 想象成一个单表数据库。例如,想象一下,如果您尝试使用 MySQL 数据库实现 Google 的整个网络搜索系统会遇到哪些困难——Bigtable 就是围绕解决这些问题而构建的。

可以使用基于 SQL 子集的 GQL(“gee-kwal”)语言从 AppEngine 等服务中查询 Bigtable 数据集。 GQL 中明显缺少任何类型的JOIN 命令。由于 Bigtable 数据库的分布式特性,在两个表之间执行连接将非常低效。相反,程序员必须在他的应用程序中实现这样的逻辑,或者将他的应用程序设计为不需要它。

【讨论】:

  • “例如,想象一下,如果您尝试使用 MySQL 数据库来实现 Google 的整个网络搜索系统会遇到什么困难”会有什么困难?
  • @Amoeba 表大小、索引大小、冗余、大规模并行同时访问等等。 MySQL 在一定程度上做得很好,但扩展和分片到多台机器成为协调的噩梦。
  • 前几天晚上,我正在与一位 Google 工程师共进晚餐时讨论 BigTable。对我来说,非常关键的一点是,当您有多个服务器同时存储数据时,非关系数据库会好得多。因此,您不会得到重复的引用,并且合并和查询数据更加无缝。我绝对可以看到非关系数据库的好处,尤其是在大规模可扩展性方面。
【解决方案2】:

Google 的 BigTable 和其他类似项目(例如:CouchDBHBase)是面向数据的数据库系统,因此数据大多为denormalized(即重复和分组)。

主要优点是: - 由于非规范化,连接操作的成本更低 - 由于数据独立性,数据的复制/分发成本较低(即,如果您想在两个节点之间分发数据,您可能不会遇到在一个节点中拥有实体而在另一个节点中拥有其他相关实体的问题,因为类似数据已分组)

这种系统适用于需要实现最佳规模的应用程序(即,您向系统添加更多节点并按比例提高性能)。在像 MySQL 或 Oracle 这样的 RDBMS 中,当您开始添加更多节点时,如果您连接两个不在同一节点中的表,则连接成本会更高。当您处理大量数据时,这一点变得很重要。

RDBMS 之所以不错,是因为存储模型(表、连接、fks)的丰富性。分布式数据库很好,因为它易于扩展。

【讨论】:

  • 但是如果数据没有被规范化,更新会更加困难,因为您可能需要在多个地方反映相同的信息,如果它们是不同的节点,情况会更糟。非规范化数据库如何处理?
  • Erm... 你是不是把 ORMRDBMS 混淆了?
猜你喜欢
  • 1970-01-01
  • 2021-06-17
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
相关资源
最近更新 更多