在我读到的所有地方,人们都说您不应该在整个存储桶上使用 Riak 的 MapReduce,并且还有其他方法可以实现您的目标。不过,我不确定如何。我也不清楚为什么使用整个存储桶很慢,如果您在整个系统中只有一个存储桶,那么无论哪种方式,您都需要检查所有条目。
我有一个代表销售数据的 500K+ 文档的列表。我需要以不同的方式查看这些数据:例如,企业运营每个月的收入是多少?每个产品增加了多少收入?在给定的一个月内,每种产品销售了多少?我一直认为 MapReduce 应该擅长解决这些类型的聚合问题,所以如果您已经拥有所有键(您必须以某种方式搜索它们,对吗?),我很困惑 MapReduce 的用途。
我的文档都在一个名为“sales”的存储桶中,它们是具有以下字段的记录:{"id":1, "product_key": "cyber-pet-toy", "price": "10.00", "tax": "1.00", "created_at": 1365931758}
.
让我们举个例子,我需要报告过去 4 年中每个月每个产品的总收入(基本上是整个桶),如何使用 Riak 的 MapReduce 有效地做到这一点?即使只是尝试对数据使用身份映射操作,我也会在大约 30 秒后超时,MySQL 会以毫秒为单位处理。
我在 Erlang 中执行此操作(使用协议缓冲区客户端),但任何语言都可以解释。
等效的 SQL (MySQL) 将是:
SELECT SUM(price) AS revenue,
FROM_UNIXTIME(created_at, '%Y-%m') AS month,
product_key
FROM sales
GROUP BY month, product_key
ORDER BY month ASC;
(现在订购不重要)。