代码之家  ›  专栏  ›  技术社区  ›  Charles Bryant

redis数据访问的关键设计

  •  0
  • Charles Bryant  · 技术社区  · 7 年前

    我对在redis上构建时间序列应用程序感兴趣。我的数据有时会历史性地到达,因此数据是可变的。我目前有大约一亿个活动。

    我正在考虑的数据访问需要灵活,因此按重要性排序

    日期类型[min hour day] 客户ID 布兰迪德 产品类型ID 产品ID

    然后是聚合类型so second、min、hour、day 我有一个事件数据的层次结构,因此按客户、品牌、产品类型和每个特定的产品。

    销售:小时:客户ID:brandid:producttypeid:productid

    然后查询该键的一部分,如

    销售时间:小时:客户ID:brandid

    • 销售:小时
    • 销售:小时:客户ID
    • 销售时间:小时:客户ID:brandid
    • 销售:小时:客户ID:brandid:producttypeid:productid
    3 回复  |  直到 7 年前
        1
  •  1
  •   Ariel    5 年前

    RedisLabs现在提供 RedisTimeSeries 对于您的用例,我们有一些标签,您可以稍后根据这些标签进行过滤,以便从相关的时间序列中检索数据。 它还支持多个聚合

        2
  •  0
  •   FuzzyAmi    7 年前

        3
  •  0
  •   GuangshengZuo    7 年前

    你可以使用redis sortedset。 从中签出本节词典索引 article

    ZADD 命令。这样地:

    ZADD key score member
    

    但是在你的例子中,所有的列都是字符串,分数必须是十进制的,所以在这里它是无用的。我们总是将分数设置为0,以保持它对我们没有影响。因为对于相同的分数,排序集将按照其成员的词典顺序对元素进行排序。

    然后我们用类似sortedset的关系数据库创建一个复合索引。这样地:

    ZADD myset 0 sale:hour:clientid:brandid:producttypeid:productid:real_value
    

    ZRANGEBYLEX myset [FG63dF:2017-08-28T08 (FG63dF:2017-08-28T09
    

    这将返回具有相同销售Id的本小时数据。其他查询与上述相同。关于(和[)的含义,这意味着范围项分别是独占的还是包含的。

    ZRANGEBYLEX myset [FG63dF:2017-08-28T08:<client-id>:<brand-id>:<producttypeid>:<product-id> + 
    

    “+”就像无穷大的值,你也可以为自己指定极限。 你可以参考 ZRANGEBYLEX 详细信息。

    更详细的“如何”你可以参考我一开始提到的文章。