Azure cosmosdb 通过已知ID进行批量获取的最有效方法

Azure cosmosdb 通过已知ID进行批量获取的最有效方法,azure-cosmosdb,Azure Cosmosdb,假设我有一个ID列表,那么获取一堆文档的“最佳”方法是什么 我知道我可以尝试各种各样的东西,但在小范围内,可能所有的选择都有相似的性能。到目前为止,我什么也没试过——只是读文档 也许没有“最佳”方法,但各种方法(速度、成本、总吞吐量等)之间的权衡是什么 叹气-我知道这会被否决-就像“你尝试了什么”,“我们不会为你编写代码”等。我无法进行有意义的性能分析,除非有数千个并行请求同时出现在TB的数据上。我发誓我不是懒惰或不愿意投入工作,只是不想投入生产并发现我有性能问题,然后被告知“你到底为什么这样做

假设我有一个ID列表,那么获取一堆文档的“最佳”方法是什么

我知道我可以尝试各种各样的东西,但在小范围内,可能所有的选择都有相似的性能。到目前为止,我什么也没试过——只是读文档

也许没有“最佳”方法,但各种方法(速度、成本、总吞吐量等)之间的权衡是什么


叹气-我知道这会被否决-就像“你尝试了什么”,“我们不会为你编写代码”等。我无法进行有意义的性能分析,除非有数千个并行请求同时出现在TB的数据上。我发誓我不是懒惰或不愿意投入工作,只是不想投入生产并发现我有性能问题,然后被告知“你到底为什么这样做?”

关于使用DocumentDB执行读取的最佳方法的一些一般提示

  • 如果您有少量文档,那么使用
    readdocumentsync
    将是最好的方法,跨多个线程使用
    分区键和
    id
    获取文档。每1KB文档的每次读取量为1 RU,在p99的读取时间不超过10毫秒
  • 如果您有大量文档,那么使用诸如
    SELECT*FROM c,其中c.partitionKey='pk'和c.id IN('1'、'2'、…、'N')
    之类的查询将更有效,即来自客户端的连接更少,服务器端的RU也更少(通常每个返回的文档<1 RU)
  • 如果需要跨多个分区键获取数据,则很难判断单个读取或单个查询的性能是否更好。这需要更详细的测试,并取决于读取的文档数量和不同分区键的数量

我想大概有1000个ID。做1000次往返似乎是错误的。这就是我在Azure表存储上已经做过的事情,它会让我丧命。您只需使用SQL IN查询方法和1000个ID。它与Aravind的第二个选项类似,只是它可以跨多个分区工作。使用https://{your endpoint domain}.documents.azure.com/dbs/{your collection's uri fragment}/pkranges首次查询分区范围。然后按pkrange分割ID数组,并并行查询这些分区。注意,如果DocumentDB在您检索分区后决定更改分区,这可能会失败,但我认为只要您不更改请求的吞吐量,这种情况就足够罕见了。这对可以包含的guid的数量设置了上限,当您的id超过1000时,该方法是什么?我正在批量处理ID,但是我的请求率太高了。