计数器按类别,作者和日期在Redis中分组

时间:2015-04-27 15:52:04

标签: redis bigdata counter hyperloglog

我正在实现一个在关系数据库中存储大量数据的系统。

数据可以分为几类,并有作者。

我希望获得按日期,类别和作者分组的项目数以及按日期分组的每个类别的所有项目的总和。

系统必须接近实时。

E.g。 (3个类别,3个作者,2个日期)

item1 category1 author1 2015-04-23
item2 category1 author2 2015-04-23
item3 category2 author1 2015-04-23
item4 category1 author1 2015-04-23
item5 category2 author2 2015-04-23
item6 category2 author2 2015-04-24
item7 category3 author1 2015-04-24
item8 category2 author3 2015-04-24
item9 category2 author2 2015-04-24

结果:

2015-04-23:
    category1 author1: 2
    category1 author2: 1
    category1 author3: 0
    category2 author1: 1
    category2 author2: 1
    category2 author3: 0
    category3 author1: 0
    category3 author2: 0
    category3 author3: 0
2015-04-24:
    category1 author1: 0
    category1 author2: 0
    category1 author3: 0
    category2 author1: 0
    category2 author2: 2
    category2 author3: 1
    category3 author1: 1
    category3 author2: 0
    category3 author3: 0

大约有50个类别和约50个作者。

如何在redis中模拟这种行为?

1 个答案:

答案 0 :(得分:1)

每个日期使用哈希,使用类别和作者作为字段名称,并将计数器保留为值。

例如,对于第一个项目:

HINCRBY 20150423 1:1 1
            ^    ^ ^ ^
      date -+    | | +- increment (static)
    category id -+ +- author id

注意:我故意使用较短的标识符来节省内存。

要获取每个日期的数据,只需HSCAN相关密钥(请注意HGETALL,因为根据哈希的大小,可能需要太多时间/ RAM)。要获取所有日期密钥,您可以使用SCAN从不使用KEYS )或在另一个数据结构中保留日期索引(例如,设置)。