Bigtable实例

时间:2011-07-21 10:16:31

标签: bigtable

有人能提供一个关于如何在Bigtable中构建数据的真实示例吗?请从搜索引擎,社交网络或任何其他熟悉的观点谈谈,这清楚而务实地说明了行 - >列族 - >列组合优于传统的规范化关系方法。

2 个答案:

答案 0 :(得分:8)

阅读原始的Google白皮书很有帮助:

http://static.googleusercontent.com/external_content/untrusted_dlcp/labs.google.com/en//papers/bigtable-osdi06.pdf

Google数据架构的全面信息来源列表如下:

http://highscalability.com/google-architecture


更新:2014年4月4日

可以在此处找到新版Google Google白皮书:

http://static.googleusercontent.com/media/research.google.com/en/us/archive/bigtable-osdi06.pdf

答案 1 :(得分:4)

我认为差异更多的是查询数据的方式而不是存储方式。

关系数据库和NoSQL之间的主要区别在于,后者中没有SQL

这意味着您(不是查询优化器)自己编写查询计划。

如果您知道如何执行此操作,则可能会提高查询性能。

考虑一个典型的搜索引擎查询:找到包含所有(或一些)单词的热门10页面,例如“湿T恤比赛”,按相关性排序(为简单起见,我们将单词放在旁边缘故)。

要执行此操作,您需要将所有单词拆分并保存在(word, relevance, source)排序的可搜索和可迭代列表中。然后,您将此列表分为(3 * ranks)个集合(每个集合从搜索查询中给定排名的单词顶部开始),其中ranks是可能的数字或排名,例如110;并加入source,。

上的集合

在关系数据库中,它看起来像这样:

SELECT  w1.source
FROM    ranks r1
JOIN    words w1
ON      w1.word = 'wet'
        AND w1.rank = r1.value
CROSS JOIN
        ranks r2
JOIN    words w2
ON      w2.word = 'shirt'
        AND w2.rank = r2.value
        AND w2.source = w1.source
CROSS JOIN
        ranks r3
JOIN    words w3
ON      w3.word = 'contest'
        AND w3.rank = r2.value
        AND w3.source = w1.source
ORDER BY
        relevance_formula (w1.rank, w2.rank, w3.rank)
LIMIT 10

最好使用MERGE JOIN对按等级划分的三个集合执行此操作。

然而,我所知道的优化器不会构建这个计划(撇开relevance_formula可能不会在各个级别上分发的事实。)

要解决此问题,您应该实现自己的查询计划:从每个单词/等级对的顶部开始,然后同时下降所有三个集合,跳过缺失的值并使用search而不是{{1如果你觉得其中一组中有太多东西要跳过。

因此,关系方法为您提供了一种更方便的方式来查询数据,但代价是可能的性能损失。

如果您正在开发校园Web服务器,那么编写next即使它们执行的时间比它们可能的时间长1微秒也是可以的。但是如果你正在开发Google,那么值得花一些时间来优化查询(纯粹的关系系统只允许使用SELECT *访问他们的数据,这是不允许的。)

这种被称为SQL的关系数据库有时会相互扩散。例如,NoSQL是一个众所周知的Berkeley DB存储引擎,NoSQL使用它作为其存储后端来允许MySQL查询。反之亦然,SQL允许纯关键值查询到关系HandlerSocket商店,并在其上构建InnoDB数据库。