通过已知 IDS 批量获取的最有效方法

most efficient way to bulk fetch by known IDS

假设我有一个 ID 列表,'best' 获取一堆文档的方法是什么

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

也许没有 'best' 方法,但各种方法(速度、成本、总吞吐量...)之间的权衡是什么

叹息 - 我知道这会被否决 - 按照 'what have you tried'、'we wont write your code for you' 等。我无法进行有意义的性能分析,直到我有数千个并行请求同时出现在 TB 上数据。我发誓我不是懒惰或不愿意投入工作,只是不想投入生产并发现我有性能问题然后被告知 'why on earth did you do it that way?'

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

  • 如果您有少量文档,那么使用 ReadDocumentAsync 将是最好的方法,跨多个线程,每个线程使用 partition keyid 获取一个文档。每 1KB 文档每次读取 1 RU,在 p99 时不到 10 毫秒。
  • 如果您有大量文档,那么使用 SELECT * FROM c WHERE c.partitionKey = 'pk' AND c.id IN ('1','2',..., 'N') 之类的查询会更高效,即来自客户端的连接更少,服务器端的 RU 也更少(通常每个 < 1 RU文档已返回)。
  • 如果您需要跨多个分区键获取数据,则很难判断是单独读取还是单个查询会执行得更好。这需要更详细的测试,并且取决于读取的文档数量和不同分区键的数量。