2015-12-21 128 views
0

我有兩個集合customSchemas和customdata。除了默認_id指數,我已經添加了以下索引MultiTenant的MongoDb索引

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

我已經決定執行ORGID上的所有通話,所以在我服務層,每個查詢中有一個ORGID,即使IDS的那些,例如

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": 1, "contentType": 1 }

ORGID所以您的查詢{"_id" : ObjectId("557f30402598f1243c14403c"), orgId: 1}應該由指數覆蓋已經交叉護住情況。

但是,索引交集的性能低於{"_id" : 1, orgId: 1}上的複合索引,因爲它附帶了一個額外的步驟(兩個集合的交集)。因此,如果這是您大部分時間使用的查詢,那麼在其上創建複合索引是個好主意。

+0

後續問題。指數中的物業的順序是否重要?是{「_id」:1,「orgId」:1}與{「orgId」:1,「_id」:1}有什麼不同? –

+0

在創建用於搜索的複合索引(不用於排序)時,您可以考慮首先將更清晰的值放在掃描過程中,在這種情況下{「_id」:1,「orgId」:1}更有利 – anhlc