过去,我曾经使用在 MySQL 上运行的 OLAP 多维数据集构建 WebAnalytics。现在,我使用的 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 运行看起来很简单:只需将“小时”作为键,在映射中过滤并通过对值求和来减少。
您能否在 BigTable 类型的系统上“实时”(即通过用户界面并且用户尽快得到他们的答案)而不是批处理模式运行我上面显示的查询(或至少具有相同的输出)?
如果不; 在 BigTable/Hadoop/HBase/Hive 等领域做这样的事情的合适技术是什么?