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