我使用node.js和MongoDB启动了一个新项目,大约两天后,我在mongodb中收集了大约60万个对象。我已经注意到对性能的巨大(负面)影响,我开始担心我是否应该尽可能长时间地转移到另一个DB,或者我是否应该坚持使用Mongo并进行一些(更多)优化。
基本上我是这样存储坐标的:
[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以及for:{x1:1,y1:1},{x2:1,y2:1}。此外,我还只获取了所需的字段...但是,使用大约40k行的结果集执行查询,最终的运行时间为2-8秒。顺便说一句:在PHP中执行相同的查询时会出现内存不足的消息(256MB RAM)。
这台机器是英特尔(R)酷睿(TM) i7处理器920 @2.67 The,具有8 8GB内存,它不是机架上最脏的一台;)
我真的没有想法了,我看到在接下来的几周里会有数以百万计的行。正如您可能注意到的,行相对较小。使用分区的MySQL性能会更好吗?还有没有其他NoSQL DB?
还有,请仔细看看“2-8秒并不慢”--这已经成为一个问题了。当两个未缓存的请求同时命中机器时,负载增加到4个,并且访问它的用户少于10个。
发布于 2011-03-10 00:28:04
提高性能的一个又快又脏的方法(以牺牲内存/空间为代价)是使用index "x1“、"x2”、"y1“和"y2”,但也许你应该使用geospatial indexes。
https://stackoverflow.com/questions/5227114
复制相似问题