gpt4 book ai didi

azure - 查询 Azure 表中最新项目的最快方法?

转载 作者:行者123 更新时间:2023-12-03 23:46:39 25 4
gpt4 key购买 nike

我有一个 Azure 表,客户在其中发布消息,单个表中可能有数百万条消息。我想找到获取最近 10 分钟内发布的消息的最快方法(这是我刷新网页的频率)。由于只有分区键被索引,所以我考虑使用消息发布的日期和时间作为分区键,例如 ISO8601 日期格式的字符串,如“2009-06-15T13:45:30.0900000”

伪代码示例:

var message = "Hello word!";
var messagePartitionKey = DateTime.Now.ToString("o");
var messageEntity = new MessageEntity(messagePartitionKey, message);
dataSource.Insert(messageEntity);

,然后像这样查询最近10分钟内发布的消息(再次未经测试的伪代码):

// Get the date and time 10 minutes ago
var tenMinutesAgo = DateTime.Now.Subtract(new TimeSpan(0, 10, 0)).ToString("o");

// Query for the latest messages
var latestMessages = (from t in
context.Messages
where t.PartitionKey.CompareTo(tenMinutesAgo) <= 0
select t
)

但这会被索引很好地接受吗?还是会导致全表扫描?有人有更好的主意吗?我知道每个表项上都有一个时间戳,但它没有索引,因此对于我的目的来说它太慢了。

最佳答案

我认为您的基本想法是正确的。您设计的查询应该与您希望的一样高效。但我可以提供一些改进。

不要使用DateTime.Now,而是使用Date.UtcNow。据我了解,实例无论如何都设置为使用 Utc 时间作为基础,但这只是确保您将苹果与苹果进行比较,并且您可以在显示它们时可靠地将时间转换回您想要的任何时区。

与其将时间存储为 .ToString("o") 将时间转换为刻度并存储,您最终会遇到更少的格式问题(有时您会得到时区规范)最后,有时不是)。另外,如果您始终希望查看从最新到最旧排序的这些消息,您可以从最大刻度数中减去刻度数,例如

var messagePartitionKey = (DateTime.MaxValue.Ticks - _contactDate.Ticks).ToString("d19");

指定行键也是一个好主意。虽然两条消息在完全相同的时间发布的可能性极小,但这并非不可能。如果您没有明显的行键,则只需将其设置为 Guid 即可。

关于azure - 查询 Azure 表中最新项目的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7340514/

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