执行此操作时:
query = new azure.TableQuery().top(100).where("PartitionKey eq ?", someKey);
这是否保证RowKey按顺序返回这100个结果?我读到的所有内容都让我相信只有一个记录顺序,而PartitionKey + RowKey
就是这样。我自己的基本测试似乎证实了这一点。但是,我无法找到任何正式出版的官方文档。
我只需要知道我是否可以依赖它,或者它是否可能会发生变化。
答案 0 :(得分:5)
结果将由他们的RowKeys按词汇顺序排列。这里描述的官方设计模式之一称为Log Tail模式: https://docs.microsoft.com/en-us/azure/cosmos-db/table-storage-design-guide#log-tail-pattern
依赖于这个确切的事实,即在一个分区中,实体将按其RowKey的词汇顺序排序。
我怀疑这对于基本的表存储服务无论如何都会发生变化。
这里有一个有趣的观点是,如果你在基本表存储上构建解决方案,依赖于分区内的词法排序RowKeys,然后如果你迁移到Cosmos DB表api(最终),它依赖于文档db,那个假设仍然适用。
答案 1 :(得分:2)
我可以确认,Table API返回的Cosmos DB查询结果没有按分区键/行键顺序进行排序,因为它们在Azure Table存储中。 -https://docs.microsoft.com/en-us/azure/cosmos-db/faq#where-is-table-api-not-identical-with-azure-table-storage-behavior
我向他们提出了这个问题,并指出了其他文档中的矛盾信息,例如上述的日志尾部模式,他们回答说:“ https://docs.microsoft.com/en-us/azure/cosmos-db/table-storage-design-guide文档最初仅用于表存储。后来,当表API Cosmos DB和Azure Table存储被合并,文档被带到Cosmos DB空间,我认为现有的Table API文档存在一些问题,我们正在修改文档,我们将尽快处理Table API文档。 ”
当我阅读他们的答复时,我几乎晕倒了。人们到底如何在没有任何排序功能的情况下将其应用程序从Azure表存储迁移到CosmosDB。您真正能做的就是点查询,这几乎使我无法将Azure表存储迁移到CosmosDB。
如果您也希望至少按字典顺序查看CosmosDB的索引,请支持我的CosmosDB建议:https://feedback.azure.com/forums/263030-azure-cosmos-db/suggestions/36124006-table-api-sort