Оптимизация сканирования mongoDB Regex - на основе суффикса? - PullRequest
0 голосов
/ 18 июня 2020

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

В настоящее время я могу быстро найти имя пользователя SUPER, так как это сканирование регулярных выражений, основанное на префиксе, моя коллекция имеет размер около 1 ГБ + и мой сервер не очень мощный. У меня есть указатель "Электронная почта". Быстрый запрос выглядит примерно так:

db.emails.find({"Email": {'$regex':'^johnsmith'}})

Мой индекс прост и выглядит так: db.emails.createIndex({ Email: 1 })

Однако, если я попробуйте найти домен, Мне нужно использовать сканирование регулярных выражений без префиксов, например , но это приводит к запросу, который по-прежнему использует индекс, но занимает примерно в 10-20 раз больше времени:

db.emails.find({"Email": {'$regex':'sampledomain.com'}})

Я пробовал использовать суффикс вместо такого префикса, но все равно так медленно:

db.emails.find({"Email": {'$regex':'sampledomain.com&'}})

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

1 Ответ

1 голос
/ 18 июня 2020

Если вы ищете с начала домена, вы можете извлечь домен и сохранить его в другом поле, после чего вы сможете использовать префиксное совпадение регулярного выражения в этом поле.

...