Несколько разделов в коллекции БД COSMOS - PullRequest
0 голосов
/ 08 ноября 2018

1) У меня есть коллекция Cosmos DB с около 500 тыс. Документов, которая разделена свойством "SITEID". В параметрах запроса запроса можно передать только одно значение ключа раздела. В моем случае у меня есть запросы, где необходимо выполнить SITEID в (1,2,3,4), где SiteID - это ключ раздела.

Например, мой SP выглядит следующим образом:

SELECT * FROM c WHERE c.SITEID IN
("SiteId1","SiteId2","SiteId3","SiteId4","SiteId5")
AND c.STATUS IN ("Status1","Status2","Status3","Status4")

Я звоню вышеуказанному провайдеру, используя приведенный ниже код API SQL.

await client.ExecuteStoredProcedureAsync<string>(UriFactory.CreateStoredProcedureUri("DBName", "CollectionName", "Sample"),new RequestOptions { PartitionKey = new PartitionKey("SiteId1") })

В приведенном выше коде API SQL свойство PartitionKey поддерживает только значение Single. Где мне нужно передать несколько значений раздела. Есть ли другие варианты сделать это?

2) Свойство «EnableCrossPartitionQuery» доступно только в FeedOptions, но не в классе «Параметры запроса». Client.ExecuteStoredProcedureAsync поддерживает только параметр RequestOptions, но не FeedOptions. Теперь мне нужно выполнить хранимую процедуру сразу и по всем разделам. Есть ли другие варианты для передачи EnableCrossPartitionQuery в методе ExecuteStoredProcedureAsync.

например)

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") })

1 Ответ

0 голосов
/ 08 ноября 2018

Хранимые процедуры могут быть выполнены только для одного раздела. С этим ничего не поделаешь.

Они не считаются запросом, который возвращает фид, а запросом, который может вернуть ответ любого типа. Это они не использовали FeedOptions, а RequestOptions.

Вы все еще можете выполнить свой запрос как обычный запрос документа и установить для EnableCrossPartitionQuery значение true. Cosmos должен распознавать ключ раздела в запросе и должен ограничивать запросы определенными значениями ключа раздела.

Я должен сказать, потому что этот ответ предполагает, что это так, но есть некоторые комментарии, которые говорят об обратном. Я бы посоветовал вам проверить свои показатели относительно количества посещений коллекции.

...