OLAP能在BigTable中实现吗?

26

过去我使用MySQL构建OLAP立方体来进行Web分析。 现在,我所使用的OLAP立方体实际上就是一个大表(当然,它存储得比普通表更加巧妙),其中每一行基本上都是一个测量值或者是一个聚合的集合。每个测量值都有一些维度(例如页面名称、用户代理、IP等等)和一些值(例如页面访问次数、访问用户数等等)。

你可以对这样的表进行的查询通常采用如下形式的元SQL:

SELECT SUM(hits), SUM(bytes),
FROM MyCube
WHERE date='20090914' and pagename='Homepage' and browser!='googlebot'
GROUP BY hour
所以,使用提到的筛选条件,你可以获得所选日期每小时的总计数。一个问题是这些立方体通常意味着要进行完整的表扫描(各种原因),这就限制了你可以创建这些东西的大小(以 MiB 为单位)。
我目前正在学习 Hadoop 等工具的详细使用。
在 BigTable 上将上述查询作为 MapReduce 运行似乎很容易:只需将“hour”作为键,在 map 中过滤并通过求和降低数据值。
你能否在类似于 BigTable 的系统中“实时”运行像我上面展示的查询(或者至少具有相同的输出),而不是以批处理方式运行?
如果不能,那么在 BigTable/Hadoop/HBase/Hive 等领域做这样的事情的适当技术是什么?
5个回答

9

这个事情已经有点做过了(有点)。

LastFm的汇总/摘要引擎:http://github.com/zohmg/zohmg

谷歌搜索结果出现了一个谷歌代码项目“mroll”,但除了联系信息(没有代码,什么都没有)外,它没有任何内容。不过,你可能想联系那个人看看最新进展。http://code.google.com/p/mroll/


1
感谢您提供的zohmg建议。根据他们的网站:“核心思想是预先计算聚合数据并以读取高效的方式存储它们”。我的想法是根据用户当前的需求,从一组数据开始进行聚合。 - Niels Basjes
你想进行预聚合,以便每个唯一的维度组合最多只有一行;运行时聚合则是将立方体的适当横截面滚动起来的问题。Zohmg可以为您指引如何做到这一点。我知道至少有一个广告网络使用HyperTable或HBase为其客户进行实时仪表盘制作,因此这是可行的。 - SquareCog
从自述文件中:「这段代码现在已经与当前的 Hadoop 和 HBase 实现相差甚远,因此被留在这里逐渐凋零。」 - Landon Kuhn

4

我的回答涉及HBase,但同样适用于BigTable。

Urban Airship开源了datacube,我认为这很接近你想要的。在这里查看他们的演示文稿

Adobe还有一些关于如何使用HBase进行“低延迟OLAP”的演示文稿(此处此处)。


4

3
如果你正在寻找一种表扫描方法,你考虑过Google BigQuery吗?BigQuery在后端自动进行规模化处理,以实现交互式响应。2012年Google I/O活动中Jordan Tigani的一个好的演讲解释了其中一些内部机制。它不是MapReduce,但它专注于高速表扫描,就像你所描述的那样。请参考以下链接:http://www.youtube.com/watch?v=QI8623HlYd4

虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。仅有链接的答案如果链接页面发生更改可能会变得无效。 - Andy Hayden

3

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