alb*_*ran 8 azure azure-storage azure-cosmosdb
我有一个需要大型RU的应用程序,但由于某种原因,我无法让客户端应用程序处理超过1000-1500个RU,尽管该集合设置为10000 RU.显然我可以添加更多客户端,但我需要一个客户端给我至少10000个RU然后扩展它.我的要求很简单
var query = connection.CreateDocumentQuery<DocumentDBProfile>(
CollectionUri, //cached
"SELECT * FROM Col1 WHERE Col1.key = '" + partitionKey + "' AND Col1.id ='" + id + "'",
new FeedOptions
{
MaxItemCount = -1,
MaxDegreeOfParallelism = 10000000,
MaxBufferedItemCount = 1000,
}).AsDocumentQuery();
var dataset = await query.ExecuteNextAsync().ConfigureAwait(false);
Run Code Online (Sandbox Code Playgroud)
上面的查询命中了150,000个分区,每个分区都在自己的任务中(等到最后),并使用TCP和直接模式初始化客户端:
var policy = new ConnectionPolicy
{
EnableEndpointDiscovery = false,
ConnectionMode = ConnectionMode.Direct,
ConnectionProtocol = Protocol.Tcp,
};
Run Code Online (Sandbox Code Playgroud)
客户端上的CPU似乎最大化,主要用于服务调用查询.ExecuteNextAsync()
我做错了吗?任何优化提示?我可以使用更低级别的API吗?有没有办法预解析查询或使Json解析更优化?
更新 我通过降低并发请求的数量,在一个客户端上获得了高达3000-4000 RU,并将我的反序列化类拆分为具有单个属性(id)的一个,但我仍然是50,000的限制的10%性能指南中提到的RU.不确定我还能做什么.我可以在.Net SDK中禁用任何安全检查或开销吗?
UPDATE2 我们所有的测试都在Azure上的同一区域D11_V2上运行.运行多个客户端可以很好地扩展,因此我们是客户端绑定而不是服 仍然无法达到CosmosDB性能指南中列出的10%的性能
| 归档时间: |
|
| 查看次数: |
520 次 |
| 最近记录: |