gpt4 book ai didi

azure - 用于查询某个范围内的值的表存储设计

转载 作者:行者123 更新时间:2023-12-03 03:06:16 26 4
gpt4 key购买 nike

我正在考虑使用表存储(例如 Azure 或 Google 或 Apache HBase 类型)来存储实体/行,但我无法在网上找到有关我的使用模式的任何帮助。事情是这样的:

  • 实体有 ID 或 key ,例如“UserId”
  • 日期值,例如“StartedUsingProduct”
  • 日期值,例如“StoppedUsingProduct”

查询大多属于“在日期 T,查找使用该产品的所有用户”类型。请注意,同一个 UserId 将有许多(数千个)开始/停止对。

在 Azure 案例中, - PartitionKey 将是 UserID - RowKey“StartedUsingProduct” 但如果不进行完整分区扫描,我就找不到合适的查询方法。

在 Google 案例中,按照他们的建议, - key 类似于“UserID_StartUsingProduct”, 当我必须检索大量行然后使用第二个属性过滤掉时,我遇到了同样的问题。

有人对如何攻击这种特定的使用模式有一些见解吗?

最佳答案

假设一个非常简单的实体设计仅考虑这三个自定义属性:

  1. 用户 ID
  2. 操作 - 表示开始或停止
  3. 日期时间

因此,当用户开始使用该产品时,您可以使用 Action = startDateTime = 当前日期/时间 为该用户插入一个实体。同样,当用户停止使用该产品时,您可以使用 Action = stopDateTime = 当前日期/时间 为该用户插入一个实体。

您必须使用的模式是为单个事件存储多个记录

这是必需的,因为您可以查询日期(就像上面提到的那样)或查询用户,例如告诉我该用户已开始/停止使用该产品多少次。

第一个实体将具有 PartitionKey = UserIdRowKey = Current Date/Time。您可以使用 DateTimeValue.Ticks.ToString("d20") 等方法将当前日期/时间以刻度形式存储为转换为字符串的字符串。此模式将确保您能够查询用户的事件。您可以将查询指定为 PartitionKey eq UserId,然后您将获得该用户的所有记录。如果您有兴趣首先获取最新事件,您可以使用 (DateTime.MaxValue.Ticks - DateTimeValue.Ticks).ToString("d20") 等方式在 RowKey 中使用反向刻度。这将确保最新记录被添加到前面而不是附加到后面。

第二个实体将具有 PartitionKey = DateTimeValue.DateRowKey = UserId。如果您认为用户一天中会多次开始/停止使用该软件,您可能需要在 RowKey 中附加日期时间值,并使用类似 RowKey = UserId|DateTimeValue 的方法。这将确保可以记录用户一天内的多个启动/停止事件,而不会覆盖该用户当天的先前事件。现在您可以对 PartitionKey 进行查询,这将准确地告诉您所有用户开始/停止使用该产品的情况。

关于azure - 用于查询某个范围内的值的表存储设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44217315/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com