Обрабатывает ли маршрутизатор MongoDB shard $ в запросе? - PullRequest
0 голосов
/ 15 мая 2018

Существует коллекция с именем 'items', которая осколена 3 осколками

И 3 документа принадлежат каждому осколку

  • документ с идентификатором: 1 -> принадлежит shard1
  • документ с id: 2 -> принадлежит shard2
  • документ с id: 3 -> принадлежат shard3

Когда я запрашиваю маршрутизатор (mongos): items.find ({id: {$ in: [1,2,3]}})

Управляет ли маршрутизатор запросом для каждого шарда? ex) items.find ({id: {$ in: [1]}}) => направить запрос к shard1

Я хочу знать, обнаруживает ли маршрутизатор шард карты или изменяет запрос на шард

1 Ответ

0 голосов
/ 15 мая 2018

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

Например, если вы шардируете в поле id, items.find({id: { $in: [1,2,3] }}) будет отправлено на shard1, shard2 и shard3, тогда как items.find({id: { $in: [1] }}) будет отправлено только на shard1. Кроме того, запрос items.find({ref_id: { $in: [1] }}) будет отправлен на shard1, shard2, shard3 и любые другие фрагменты, которые могут быть в вашем кластере.

Сканирование индекса в поле ключа шарда должно быть достаточно быстрым, чтобы манипулирование запросом даже не требовалось!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...