首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Azure表中查询最新项目的最快方式?

在Azure表中查询最新项目的最快方式?
EN

Stack Overflow用户
提问于 2011-09-08 05:04:25
回答 4查看 8.7K关注 0票数 13

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

伪代码示例:

代码语言:javascript
复制
var message = "Hello word!";
var messagePartitionKey = DateTime.Now.ToString("o");
var messageEntity = new MessageEntity(messagePartitionKey, message);
dataSource.Insert(messageEntity);

,然后查询最近10分钟内发布的消息,如下所示(再次使用未经测试的伪代码):

代码语言:javascript
复制
// 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
   )

但是,这一点会被指数接受吗?或者它会导致全表扫描?有没有人有更好的主意呢?我知道每个表项上都有一个时间戳,但它没有索引,所以对我来说太慢了。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-09-08 06:07:51

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

使用Date.UtcNow而不是DateTime.Now。据我所知,实例被设置为使用Utc时间作为它们的基准,但这只是确保您正在比较苹果和苹果,并且您可以在显示它们时可靠地将时间转换回您想要的任何时区。

而不是将时间存储为.ToString("o")将时间转换为刻度并存储,您将减少格式化问题(有时会在最后获得时区规范,有时不会)。此外,如果您总是希望看到这些消息从最新到最旧排序,您可以从最大刻度数中减去刻度数,例如

代码语言:javascript
复制
var messagePartitionKey = (DateTime.MaxValue.Ticks - _contactDate.Ticks).ToString("d19");

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

票数 6
EN

Stack Overflow用户

发布于 2012-02-14 21:39:55

表的主键是PartitionKey和RowKey(形成聚集索引)的组合。

在您的示例中,只需使用RowKey而不是ParitionKey(为此提供一个常量值)。

您还可以遵循诊断方法,比如每隔十分钟创建一个新的分区键。但这种方法主要用于归档/清除等需求,

票数 4
EN

Stack Overflow用户

发布于 2011-09-08 12:41:36

我建议做一些类似于Diagnostics API对WADPerformanceCountersTable所做的事情。其中,PartitionKey将多个时间戳分组到单个项目中。例如:它将所有时间戳舍入到最近的几分钟(例如,最近的5分钟)。这样,您就不会有数量有限的分区键,而且仍然能够对它们进行范围查询。

例如,您可以有一个映射到每个时间戳的PartitionKey,该时间戳四舍五入为00:00、00:05、00:10、00:15等。然后将其转换为刻度

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7340514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档