我看起來像這樣的文件:mongodb使用什麼索引?
{
{
"_id": ObjectId("5444fc67931f8b040eeca671"),
"meta": {
"SessionID": "45",
"configVersion": "1",
"DeviceID": "55",
"parentObjectID": "55",
"nodeClass": "79",
"dnProperty": "16"
},
"cfg": {
"Name": "test"
}
}
的名稱和數據只是爲了測試個大氣壓。但我在數據庫中共有2500萬個文件。我在這個find()中使用find()來獲取特定的文檔。在這種情況下,我使用四個參數,dnProperty,nodeClass,DeviceID和configVersion,它們都不是唯一的。
Atm。我的索引設置很簡單:
ensureIndex([["nodeClass", 1],["DeviceID", 1],["configVersion", 1], ["dnProperty",1]])
換句話說我有四個參數的索引。如果您執行的搜索沒有找到任何文檔,我仍然遇到很多問題。在我的例子中,所有的「數據」在1-100之間是隨機的,所以如果我使用其中一個值大於100的find(),則需要30-180秒的任何時間來執行搜索,它也使用我所有的8GB RAM,那麼由於沒有RAM,計算機變得非常慢。
什麼是更好的索引?我使用索引是否正確?我是否只需要更多的內存,因爲它會將數據庫的「全部」放入其工作內存中?你會推薦另一個數據庫(mongo除外)來處理這個更好嗎?
對不起,有很多問題我希望它們足夠短,你可以給我一個答案。
您能向我們展示您的慢查詢嗎? – joao 2014-10-22 07:45:37
2500萬個文件很多。你可以考慮這些事情:使用多個集合來分割數據;使用數據集(如google bigquery)其快速和類似於SQL。 – 2014-10-22 07:46:10