|
MongoDB是个蛮有趣的NoSQL数据库,
一旦适应之后,写起程序起来感觉十分的爽,但是细节上还是发现了很多问题。
我按照《MongoDB权威指南》里提到的索引方法,在Query中所有引用到的字段上建好索引后,查询仍然十分的慢。尝试explain后,才注意到$or运算符不能使用任何索引……才让我回想起SQL的时代,好像也有这么一碴子事。只好先修改查询回避问题,但是比较无奈的,逻辑也受到了一定的影响。
另外一个问题MapReduce的问题 。MapReduce居然会因为Sharding环境下的自动Balance出错……这个比较无语了。似乎是因为Balance导致chunk的版本更新,mapreduce的过程中发现版本变动导至出错.好在查到官方文档里可以暂时关闭Balancer
1 > use config
2 > db.settings.update( { _id: "balancer" }, { $set : { stopped: true } } , true );
还有一个问题也是关于MapReduce的Sharding环境下的。MapReduce的output选项里有个sharded:true,可以把结果输出到分片集合中,但是怎么会不自动切分chunk呢?同时也不自动Balance(这个估计也是因为上个问题),这样如果输出了一个巨大的结果集的话,肯定会有一个切片会承担过重的负载;同时还导致了更麻烦的问题:在这个结果集上迭代进行mapreduce则会只有一个线程进行mapreduce运算,因为只有一个shard持有数据,mapreduce又只能在单进程内单线程运行(因为当前的javascript引擎问题)......,不知道10gen那伙人计划怎么改这个问题了. |
|
|