COSMOS DB 集合中的多个分区
Multiple partitions in COSMOS DB collection
1) 我有一个 Cosmos DB 集合,其中包含大约 50 万个文档,并且按 属性 "SITEID" 进行分区。在查询请求选项中,只能传递一个分区键值。在我的例子中,我有查询需要在 (1,2,3,4) 中执行 SITEID,其中 SiteID 是分区键。
比如我的SP是这样的:
SELECT * FROM c WHERE c.SITEID IN
("SiteId1","SiteId2","SiteId3","SiteId4","SiteId5")
AND c.STATUS IN ("Status1","Status2","Status3","Status4")
我正在使用下面的 SQL API 代码调用上面的 SP。
await client.ExecuteStoredProcedureAsync<string>(UriFactory.CreateStoredProcedureUri("DBName", "CollectionName", "Sample"),new RequestOptions { PartitionKey = new PartitionKey("SiteId1") })
上面SQLAPI代码中,PartitionKey属性只支持Single值。我需要传递几个分区值的地方。还有其他选择吗?
2) "EnableCrossPartitionQuery" 属性 仅在 FeedOptions 中可用,但在 Request Options class 中不可用。 Client.ExecuteStoredProcedureAsync 仅支持 RequestOptions 参数,不支持 FeedOptions。现在我需要一次跨所有分区执行一个存储过程。是否有任何其他选项可以在 ExecuteStoredProcedureAsync 方法中传递 EnableCrossPartitionQuery。
例如)
client.CreateDocumentQuery<Doc>(UriFactory.CreateDocumentCollectionUri("DBName", "CollectionName"), "select * from c", new FeedOptions { EnableCrossPartitionQuery = true }).ToList()
await client.ExecuteStoredProcedureAsync<string>(UriFactory.CreateStoredProcedureUri("DBName", "CollectionName", "Sample"),new RequestOptions { PartitionKey = new PartitionKey("WGC") })
存储过程只能针对单个分区执行。你对此无能为力。
它们不被视为 return 提要的查询,而是可以 return 任何类型的响应的请求。那就是他们不使用 FeedOptions
而是 RequestOptions
.
您仍然可以将查询作为普通文档查询来执行,并将 EnableCrossPartitionQuery
设置为 true。 Cosmos 应该识别查询中的分区键,并且应该将请求限制为特定的分区键值。
我说应该是因为 this answer 表明是这种情况,但也有一些评论不这么认为。我建议您检查有关 collection 点击量的指标。
1) 我有一个 Cosmos DB 集合,其中包含大约 50 万个文档,并且按 属性 "SITEID" 进行分区。在查询请求选项中,只能传递一个分区键值。在我的例子中,我有查询需要在 (1,2,3,4) 中执行 SITEID,其中 SiteID 是分区键。
比如我的SP是这样的:
SELECT * FROM c WHERE c.SITEID IN
("SiteId1","SiteId2","SiteId3","SiteId4","SiteId5")
AND c.STATUS IN ("Status1","Status2","Status3","Status4")
我正在使用下面的 SQL API 代码调用上面的 SP。
await client.ExecuteStoredProcedureAsync<string>(UriFactory.CreateStoredProcedureUri("DBName", "CollectionName", "Sample"),new RequestOptions { PartitionKey = new PartitionKey("SiteId1") })
上面SQLAPI代码中,PartitionKey属性只支持Single值。我需要传递几个分区值的地方。还有其他选择吗?
2) "EnableCrossPartitionQuery" 属性 仅在 FeedOptions 中可用,但在 Request Options class 中不可用。 Client.ExecuteStoredProcedureAsync 仅支持 RequestOptions 参数,不支持 FeedOptions。现在我需要一次跨所有分区执行一个存储过程。是否有任何其他选项可以在 ExecuteStoredProcedureAsync 方法中传递 EnableCrossPartitionQuery。
例如)
client.CreateDocumentQuery<Doc>(UriFactory.CreateDocumentCollectionUri("DBName", "CollectionName"), "select * from c", new FeedOptions { EnableCrossPartitionQuery = true }).ToList()
await client.ExecuteStoredProcedureAsync<string>(UriFactory.CreateStoredProcedureUri("DBName", "CollectionName", "Sample"),new RequestOptions { PartitionKey = new PartitionKey("WGC") })
存储过程只能针对单个分区执行。你对此无能为力。
它们不被视为 return 提要的查询,而是可以 return 任何类型的响应的请求。那就是他们不使用 FeedOptions
而是 RequestOptions
.
您仍然可以将查询作为普通文档查询来执行,并将 EnableCrossPartitionQuery
设置为 true。 Cosmos 应该识别查询中的分区键,并且应该将请求限制为特定的分区键值。
我说应该是因为 this answer 表明是这种情况,但也有一些评论不这么认为。我建议您检查有关 collection 点击量的指标。