Google的Bigtable与关系型数据库的比较

33

2
“Related” 侧边栏上有几个重复的。https://dev59.com/V0XRa4cB1Zd3GeqPq1VA - Paul Tomblin
2个回答

33

Bigtable是谷歌为处理公司日常大量信息而发明的技术。一个Bigtable数据集可以增长到巨大的规模(多个PB),并且存储分布在许多服务器上。使用Bigtable的系统包括Google的Web索引和Google Earth等项目。

根据有关该主题的Google白皮书

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

与MySQL等技术相比,Bigtable的内部机制非常不同,因此很难进行比较,并且预期目标也不太重叠。但是,您可以将Bigtable视为单表数据库的一个组成部分。例如,想象一下,如果您尝试使用MySQL数据库实现Google的整个Web搜索系统,那么您将遇到什么样的困难--Bigtable是为解决这些问题而构建的。

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


6
例如,想象一下如果你尝试使用MySQL数据库实现Google整个网络搜索系统会遇到什么困难?那些困难会是什么? - Moeb
5
@阿米巴 表格大小,索引大小,冗余性,大规模并行同时访问等等。 MySQL在一定程度上表现良好,但是扩展和分片到多台机器时会变成协调上的噩梦。 - tylerl
昨晚我和一位谷歌工程师在晚餐时讨论了BigTable。对我来说,一个非常关键的点是,在多个服务器同时存储数据时,非关系型数据库要比关系型数据库好得多。因此,你不会出现重复引用,合并和查询数据也更加无缝。尤其是在需要大规模扩展时,我绝对可以看到非关系型数据库的好处。 - thomallen

15

Google的BigTable和其他类似的项目(例如CouchDBHBase)是数据库系统,其定位为数据大部分是去规范化的(即重复和分组的数据)。

主要优点是: - 由于去规范化,连接操作代价更小 - 由于数据独立性,数据的复制/分布代价更小(即,如果您想将数据分布到两个节点上,您可能不会遇到一个实体在一个节点中而另一个相关实体在另一个节点中的问题,因为相似的数据已经分组了)

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

关系型数据库管理系统之所以好是因为存储模型的丰富性(表格,连接,外键)。分布式数据库之所以好是因为易于扩展。


11
如果数据没有经过规范化,更新会更加困难,因为您可能需要在多个地方反映相同的信息,如果这些地方是不同的节点,情况就更糟了。那么非规范化的数据库如何处理这个问题? - Moeb
7
你是否混淆了“ORM”和“RDBMS”这两个术语? - Jo So

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接