Полезно ли использовать стиль "Get Next" для индекса MongoDB с низкой селективностью? - PullRequest
0 голосов
/ 06 декабря 2018

Общее правило для индексов MongoDB - создавать индексы для полей с высокой селективностью.Например, индексирование по уникальному идентификатору является высокоселективным, тогда как индексирование по логическому или перечисляемому полю потенциально очень «низкоселективно».

У меня есть случай использования, когда записи имеют поле «статус» с этимивозможные значения: InProgress, Finished, Claiming, Claimed.

У меня есть логика на моем сервере, работающем в цикле:

  1. Найти следующую запись "Finished" и установить статус ""Утверждение ".
  2. Выполнение некоторых операций над записью.
  3. Установка статуса на" Заявлено ".

В настоящее время у меня нет индекса на" статус ",Когда я выполняю операцию «найти следующее», происходит сканирование коллекции.Так как я делаю "findOne", я предполагаю / надеюсь, что он вернется, как только будет найдено первое совпадение.В будущем мне может потребоваться изменить это значение на «findMany» для обработки в пакетах, а не по одному за раз.

В этом сценарии я чувствую необходимость добавить индекс «Статус», ноЯ в конфликте.С одной стороны, это поле с очень низкой селективностью (только 4 возможных значения).С другой стороны, кажется, что этот индекс был бы более эффективен для такого поведения «получи следующее».

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

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