我有一個名爲Post的集合。我有映射系統總是確保每個文檔具有下列字段:mongoDB索引策略
- ID(INT)
- 目標(字符串)
- 類型(字符串)
- USER_ID
- CLIENT_ID
- 更新(字符串,11 int timestamp)
- 已創建(字符串,11 int timestamp)
- enabled(bool)
訪問此集合以在API架構中輸出。
所以一些典型的請求可能是:
/post?type=image&user_id=2
/post?updated=35234423&order_by=client_id
/post?enabled=true&order_by=id
沒有100%的保證某些領域使它的查找或排序字段。
最近當表達8GB數據,我開始收到此錯誤:
"localhost:27017: too much data for sort() with no index. add an index or specify a smaller limit"
我已經看過了蒙戈索引的文檔,發現它很難理解它是否以同樣的方式可以作爲一個MySQL索引。
我在索引中找到的一些線程:MongoDB - too much data for sort() with no index error似乎建議使用特定的排序字段來確保索引被命中。很顯然,我不能做到這一點,當我的過濾和排序很多是可選的。
任何人都可以提出什麼樣的公司解決方案將是我應該索引我的桌子上的所有領域?
感謝您的反饋傢伙,我已經開始建立一個自動索引功能:
public function get() {
$indices['Post'] = array(
'fields' =>
array(
'id' => array('unique' => true, 'dropDups' => true, 'background' => true),
'client_id' => array('dropDups' => true, 'background' => true),
'image_id' => array('dropDups' => true, 'background' => true),
'user_id' => array('dropDups' => true, 'background' => true),
'publish_target' => array('dropDups' => true, 'background' => true),
'type' => array('dropDups' => true, 'background' => true),
'status' => array('dropDups' => true, 'background' => true),
'text' => array('background' => true)
)
);
foreach ($indices as $key => $index) {
/* set the collection */
$collection = $this->mongoDB->{$key};
/* delete the indexes */
$collection->deleteIndexes();
/* loop the fields and add the index */
foreach ($index['fields'] as $subKey => $data) {
$collection->ensureIndex($subKey, array_merge($data, array('name' => $subKey)));
}
}
/* return the list */
return $indices;
}
你能分享你的疑問嗎?將有助於分析? – user10
@ user10他分享他的quireies的例外,如果你看一半左右;這是https://jira.mongodb.org/browse/SERVER-3071將真正幫助 – Sammaye