我已經使用node.js和mongodb開始了一個新項目,在差不多2天后,我在MongoDB中收集了大約600k個對象。我已經注意到了對性能的巨大(負面)影響,我開始擔心是否應該儘快遷移到其他數據庫,或者如果我應該堅持使用Mongo並做一些(更多)優化。MongoDB在600k對象,替代數據庫上執行不良?優化?
基本上我存儲的座標如下:
[x1] => 687
[y1] => 167
[x2] => 686
[y2] => 167
[c] => 0
[s] => 0
[m] => 1299430700312
[_id] => MongoId Object (
[$id] => 4d73bd2c82bb5926780001ec
)
不多......而我的疑問是這樣的:
{'$or': [ { x1: {'$gte' : 0, '$lt' : 1000 }, y1: {'$gte' : 0, '$lt' : 1000 } , { x2: {'$gte' : 0, '$lt' : 1000 }, y2: {'$gte' : 0, '$lt' : 1000 } } ] }
我試過設置索引爲每個字段:x1,y1,y1,y1以及:{x1:1,y1:1},{x2:1,y2:1}
。 此外,我也只提取了我需要的所需字段......但仍然執行帶有〜40k行結果集的查詢,最終運行時間爲2-8secs。 順便說一句:在PHP中執行相同的查詢與內存不足消息(256MB RAM)一起死亡。
該機是英特爾(R)酷睿(TM)i7處理器920 @ 8GB的RAM 2.67GHz,它不是最塵封在一個機架;)
我真的運行的想法我在接下來的幾周看到數以百萬計的行。你可能注意到這些行相對較小。 分區的MySQL會更好嗎?任何其他NoSQL DB?
而且請大家關注「2-8秒不慢」 - 這已經成爲一個問題。當兩個未緩存的請求同時觸及機器時,負載將增加到4個,並且訪問它的用戶不到10個。
你有什麼指數設置?嘗試在shell中運行查詢並在最後附加.explain(),它應該向您顯示查詢計劃以及正在查找的索引。 – 2011-03-08 01:02:33
我不完全確定你想用這個查詢來完成什麼,但是使用地理空間索引可能會有更好的運氣。 http://www.mongodb.org/display/DOCS/Geospatial+Indexing – 2011-03-08 01:20:35
假設這些座標看起來像是矩形的角落,那麼您應該使用MongoDB的地理空間索引:http://www.mongodb.org/顯示/ DOCS /地理空間+索引 – 2011-03-08 01:20:59