2015-12-21 4 views
0

У меня есть две коллекции, customSchemas и customdata. Кроме того, индекс по _ID умолчанию, я добавил следующие индексыMongoDb Индексирование для MultiTenant

db.customData.createIndex({ "orgId": 1, "contentType": 1 }); 
db.customSchemas.createIndex({ "orgId": 1, "contentType": 1 }, { unique: true }); 

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

db.customData.find({"_id" : ObjectId("557f30402598f1243c14403c"), orgId: 1}); 

Следует ли добавить индекс, в котором есть как _id, так и orgId? Имеются ли в настоящее время индексы, которые у меня есть, когда я просматриваю как _id, так и orgId?

+0

_id shoud быть уникальным в MongoDB. Нет причин добавлять orgId: 1 в этот запрос – anhlc

+0

Причина заключается в обеспечении целостности при многократном удержании. Вы никогда не хотите, чтобы пользователь аутентифицировался с помощью orgId 1, чтобы иметь возможность запрашивать данные для orgId 2. Единственный способ убедиться в том, что принудительное использование orgId выполняется для каждого запроса, который жестко связан с вашим механизмом аутентификации. Сохранение вашего бизнеса - действительно хорошая причина. –

+0

Это имеет смысл – anhlc

ответ

0

MongoDB 2.6+ предоставляет index intersection функцию, которые покрывают ваше дело, используя пересечение из индекса _id{_id:1} и индекс префикс orgId в { "orgId": 1, "contentType": 1 }

Таким образом, ваш запрос {"_id" : ObjectId("557f30402598f1243c14403c"), orgId: 1} должен быть покрыт по индексу уже.

Однако пересечение индексов менее результативно, чем составной индекс на {"_id" : 1, orgId: 1}, поскольку он поставляется с дополнительным шагом (пересечение двух наборов). Следовательно, если это запрос, который вы используете большую часть времени, создание составного индекса на нем является хорошей идеей.

+0

Следующий вопрос. Означает ли порядок свойств в индексе? Является ли {"_id": 1, "orgId": 1} любым, отличным от {"orgId": 1, "_id": 1}? –

+0

При создании составного индекса для поиска (не для сортировки) вы можете сначала поставить ключ с более разными значениями, чтобы облегчить процесс сканирования, в этом случае {«_id»: 1, «orgId»: 1} более выгодно – anhlc

Смежные вопросы