如何从 Azure 表存储中查询最近的 n 条记录?
Posted
技术标签:
【中文标题】如何从 Azure 表存储中查询最近的 n 条记录?【英文标题】:How to query the most recent n records from Azure Table Storage? 【发布时间】:2021-12-25 19:44:34 【问题描述】:我在 c# .net 中使用以下查询:
TableQuery<MyType> query = new TableQuery<MyType>().Take(50);
这适用于获取 50 条记录,但我想从表中获取最新(降序)记录。我查看了其他答案,但没有一个是简洁或有效的。
从 Azure 表存储实体中获取 n 条最新记录的最有效方法是什么?请提供一个简洁的答案和一个有效的代码示例。
编辑:我对 Azure 存储资源管理器如何导航“缓存项目”特别感兴趣。通过单击该列,我可以轻松地在 Azure 存储资源管理器中对我的结果(数百万行)进行排序。这将返回我想要的,但是,我没有看到任何关于如何访问这些“缓存项目”的文档。
【问题讨论】:
【参考方案1】:不幸的是,没有简单的方法可以从 Azure 表存储中获取最新记录,因为它不允许您根据属性对记录进行排序。 Azure 表存储中的记录始终按PartitionKey
排序,然后在分区内按RowKey
排序。
解决此问题的一种方法是将PartitionKey
值指定为反向时间刻度(类似于(DateTime.MaxValue.Ticks - DateTime.UtcNow.Ticks).ToString("d20")
),这样每当您添加实体时,它就会被添加到前面(即添加到表格顶部) .现在,当您进行查询并获取“x”条记录时,您将始终是最新的记录。
其他选项是获取所有实体并在客户端进行排序。这是非常低效的,一般不推荐。如果您的表中的实体数量非常少(例如少于 1000 个),此解决方案可能会起作用。
【讨论】:
我以前读过这个答案,但它没有回答我的问题,因为它不适用于表中已经存在的数据。 在 Azure 存储资源管理器中,我可以按我们称为“时间戳”的列进行排序。该表有数百万行,但它在一秒钟内按“时间戳”排序。一定有办法在代码中复制它? Azure 存储资源管理器对获取的数据进行排序(最多 1000 个实体)。 它如何如此快速地抓取和排序这些内容?我将如何在代码中复制?以上是关于如何从 Azure 表存储中查询最近的 n 条记录?的主要内容,如果未能解决你的问题,请参考以下文章