gpt4 book ai didi

Azure 表 : Choose a partition key to efficiently sort records by time and user id

转载 作者:行者123 更新时间:2023-12-03 02:41:14 25 4
gpt4 key购买 nike

我目前正在 Azure 表中跟踪 API 调用元数据,其中 PartitionKeyUserIdRowKey 为随机 Guid。这可以帮助我查询属于特定用户的记录。但是,我需要定期将数据迁移到分析服务,以获取有关 API 调用频率、平均响应时间等信息。我需要提出更好的 PartitionKey 策略来实现此目的。

这些是我正在考虑的 PartitionKey 选项:

1) 将当前 UTC 时间舍入到最接近的分钟并将其转换为刻度。这允许我使用时间间隔定期下载数据,但我无法有效地查找与某个时间相关的数据。特定用户。

2) 使用由 {ticks}_{userId} 组成的合成 key 。是否可以执行像 Where(m => m.PartitionKey.Contains(刻度))Where(m => m.PartitionKey.Contains(userId))?如果是,这是一种可扩展的方法吗?

3) 保存两条记录(一 strip 有刻度,另一 strip 有 userId 作为分区键)。如果我采用这种方法,假设存在,如何确保两条记录始终保存没有办法强制执行原子事务吗?

对我来说,现在最重要的是按时间对记录进行排序。因此,我主要考虑改变我的逻辑以适应#1。但是,我想知道是否可以按时间和用户 ID 高效地查询记录。

最佳答案

1) Round down current UTC time to the nearest minute and convert it to ticks. This allows me to download data periodically using time intervals, but I can't efficiently look up data associated to a specific user.

这种方法肯定适用于按日期/时间获取 API 调用,但是如果您需要按用户获取数据,那么这种方法将严重失败,因为需要执行全表扫描。

2) Use a synthetic key made up of {ticks}_{userId}. Is it possible to execute a filtered query like Where(m => m.PartitionKey.Contains(ticks)) or Where(m => m.PartitionKey.Contains(userId))? If so, is this a scalable approach?

不幸的是,这种方法不起作用,因为 Azure 表不支持 Contains 查询。您可以在此处找到受支持的 LINQ OData 查询运算符的列表: https://learn.microsoft.com/en-us/rest/api/storageservices/query-operators-supported-for-the-table-service .

3) Save two records (one with ticks and another with userId being the partition key). If I go with this approach, how do I ensure that both records are saved all the time assuming there is no way to enforce an atomic transaction?

到目前为止,这是最好的方法。在这种情况下,您将存储两条记录 - 一 strip 有表示日期/时间戳的分区键,另一 strip 有用户 ID 作为分区键。事实上,这是我在项目中广泛使用的东西。

关于您对原子事务的评论,您是完全正确的。由于您使用 2 个单独的分区键,因此无法使用实体批量事务。

我所做的是在我的应用程序中实现了最终一致性模式。当我收到请求时,我只需将请求作为消息保存在存储队列中。如果我能够写入消息,那么我的实体最终将在存储中可用。接下来,我编写了一个函数,每当消息保存在队列中时就会触发该函数。此函数将读取消息,然后使用 InsertOrReplace 语义写入 2 个单独的实体,以确保数据最终保存在表中。

关于Azure 表 : Choose a partition key to efficiently sort records by time and user id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61174563/

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