2009-04-23 63 views
27

重复谷歌的Bigtable与关系数据库

我不知道很多关于谷歌的Bigtable,但我想知道谷歌的Bigtable的区别和像MySQL这样的关系数据库。两者的局限性是什么?

+2

那里的“相关”侧边栏上的几个嘟du。 HTTP://计算器。com/questions/144001 /选择数据库类型 – 2009-04-23 18:28:02

回答

30

Bigtable的是谷歌的发明来处理大量的信息,该公司定期交易。有了BigTable数据集可以长到规模巨大(PB级多),与在大量服务器的分布式存储。使用Bigtable的系统包括Google的网络索引和Google地球等项目。

根据Google whitepaper关于这个问题:

有了BigTable是稀疏,分散,持续的多维有序映射。该地图由行键,列键和时间戳索引;映射中的每个值都是未解释的字节数组。

Bigtable与MySQL等内部机制是如此不同,以至于难以比较,而且预期目标也不重叠。但是你可以将Bigtable想象成一个单表数据库。想象一下,例如,如果您尝试使用MySQL数据库实施Google的整个网络搜索系统,您会遇到的困难--Bytable表格是围绕解决这些问题而建立的。

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

14

谷歌的BigTable和其他类似项目(例如:CouchDBHBase)是的取向使得数据主要是denormalized数据库系统(即复制和分组)。

主要优点是: - 加入操作成本更低,因为非规范化 的 - 数据的复制/分发是因为数据独立性(即,如果你想在两个节点分发数据,你可能赢得的成本更低没有一个节点中的实体和另一个节点中的其他相关实体的问题,因为类似的数据被分组)

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

由于存储模型(表,连接,fks)的丰富性,ORM很不错。分布式数据库很好,因为规模很容易。

+9

但是,如果数据未规范化,则更新将变得更加困难,因为您可能需要在多个位置反映相同的信息,而如果它们是不同的节点,则更加糟糕。非规范化数据库如何处理这个问题? – Moeb 2010-08-16 05:56:10

+7

Erm ...你难道不会把* ORM *与* RDBMS *混淆吗? – 2014-08-10 14:23:16