代码之家  ›  专栏  ›  技术社区  ›  jamesdlivesinatree

如何从Azure表存储查询最近的n条记录?

  •  0
  • jamesdlivesinatree  · 技术社区  · 4 年前

    我在c#.net中使用以下查询:

    TableQuery<MyType> query = new TableQuery<MyType>().Take(50);

    这可以获取50条记录,但我想从表中获取最近的(降序)记录。我看过其他答案,但都不简洁,也不起作用。

    最有效的抓取方式是什么 n Azure表存储实体的最新记录?请提供一个简洁的答案和一个工作代码示例。

    编辑:我对Azure Storage Explorer如何导航“缓存项目”特别感兴趣。通过单击列,我可以在Azure存储资源管理器中轻松排序结果(在数百万行中)。这将返回我想要的内容,但是,我没有看到任何关于如何访问这些“缓存项”的文档。

    1 回复  |  直到 4 年前
        1
  •  1
  •   Gaurav Mantri    4 年前

    不幸的是,没有简单的方法从Azure表存储中获取最新记录,因为它不允许您根据属性对记录进行排序。Azure表存储中的记录始终按排序 PartitionKey 然后通过 RowKey 在分区内。

    解决此问题的一种方法是指定 PartitionKey 值为按时间顺序倒排的刻度(类似于 (DateTime.MaxValue.Ticks - DateTime.UtcNow.Ticks).ToString("d20") )这样,每当您添加一个实体时,它都会被预处理(即添加到表的顶部)。现在,当您进行查询并获取“x”个记录时,您将始终获取最新的记录。

    另一种选择是获取所有实体并在客户端进行排序。这是非常低效的,通常不建议这样做。如果表中的实体数量非常少(例如少于1000个),则此解决方案可能有效。