我正在试图弄清楚如何在Redis中处理我的数据结构。我想要完成的是如何使用两个参数计算事件,然后按日期查询Redis的数据。这是一个例子:事件带有两个不同的参数,让我们称之为站点和事件类型,以及事件发生的时间。从那里开始,我需要能够查询Redis在一系列日期中发生的事件数量,按站点和事件类型分组。
以下是一个简短的示例数据集:
Oct 3, 2012:
site A / event A
site A / event A
Site B / event A
Oct 4, 2012:
site B / event B
site A / event A
Site B / event A
......等等。
在我的查询中,我想知道日期跨度的事件总数,这将是五周的时间跨度。在上面的例子中,这将是:
site A / event A ==> 3 events
site B / event A ==> 2 events
site B / event B ==> 1 event
我已经看过使用Redis的排序集功能,哈希等等。似乎Sorted Set是最好的方法,但使用Redis的ZUNIONSTORE命令查询数据似乎不是很合适,因为这些事件将持续五周。这使得ZUNIONSTORE命令至少有35个参数。
任何提示,想法,想法等?
非常感谢你的帮助。
答案 0 :(得分:5)
与典型的RDBMS或MongoDB相反,Redis没有您可以使用的丰富查询语言。使用此类存储,您可以在存储中累积原始数据,然后可以使用查询来计算统计信息。 Redis不适应这种模式。
使用Redis,您应该即时计算统计数据并直接存储它们而不是原始数据。
例如,假设我们只对几周内的统计数据感兴趣,我会按如下方式构建数据:
因为所有的critera都是离散的,所以可以使用简单的哈希对象而不是zsets
每周一个哈希对象
在每个哈希对象中,每个夫妇网站一个计数器,事件。可选地,每个站点一个计数器,和/或每个事件一个计数器。
因此,当事件发生时,我会将以下命令传递给Redis:
hincrby W32 site_A:event_A 1
hincrby W32 site_A:* 1
hincrby W32 *:event_A 1
请注意,无需初始化这些计数器。如果它们不存在,HINCRBY将创建它们(和哈希对象)。
检索一周的统计信息:
hgetall W32
在统计信息中,每个站点/事件的计数器,仅限每个站点,仅限每个事件。
要检索几周的统计信息,请输入以下命令:
hgetall W32
hgetall W33
hgetall W34
hgetall W35
hgetall W36
并在客户端执行聚合(如果语言支持关联数组,如map,dictionary等,则非常简单。)。