2017-01-14 8 views
5

Возможно ли получить документ по его идентификатору без указания ключа раздела?Требуется ли ключ раздела при получении документа ID

Мое понимание от чтения documentation является то, что будет запрос веером по всем разделам, когда ключ раздел не указан:

Следующий запрос не имеет фильтр на перегородке ключ (DeviceId) и разворачивается во все разделы, где он выполняется против индекса раздела. Обратите внимание, что вы должны указать EnableCrossPartitionQuery (x-ms-documentdb-query-enablecrosspartition в REST API), чтобы SDK выполнял запрос по разделам.

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

Если мне нужно включить кросс-секционные запросы, это будет дорогостоящая операция?

ответ

7

Запрос по простому идентификатору будет выполнять операцию перекрестного раздела. Вы должны включить ключ раздела в эти запросы в FeedOptions.PartitionKey или как часть фильтра. В DocumentDB идентификатор не уникален во всех документах внутри коллекции. Вместо этого комбинация «ключ раздела» и «id» является первичным ключом и уникально идентифицирует документы внутри коллекции.

Некоторые приложения кодируют ключ раздела как часть идентификатора, например. ключ раздела будет идентификатором клиента, а ID = "customer_id.order_id", поэтому вы можете извлечь ключ раздела из значения идентификатора.

+0

Спасибо Aravind. Возможно, мне придется пересмотреть мою стратегию ID. Из любопытства является запрос на перекрестный раздел на основе идентификатора документа, который считается дорогостоящим (с точки зрения RU)? – Sam

+1

Пожалуйста, не стесняйтесь писать по адресу [email protected], если вы хотите обсудить больше. Да, кросс-секционный запрос по идентификатору относительно дорог. –