我正在尝试MongoDB的性能,以比较我当前基于MySQL的解决方案。
在具有三个属性A、B和C的集合/表X中,我在MongoDB和MySQL中都对属性A进行了索引。
现在,我在MongoDB和MySQL中抛出1M数据,并在这个直接的场景中尝试搜索性能。
与insert to MySQL相比,MongoDB上的插入速度仅快10%。但这没关系,我知道采用MongoDB不会给我的CRUDs带来神奇的推广,但我真的对在MongoDB中没有索引的搜索感到惊讶。
结果表明,非索引字段上的MongoDB select比索引字段上的select慢10倍。
另一方面,非索引字段的MySQL select (MyISAM)仅比索引字段的select慢约70%。
最后但并非最不重要,在select with index场景中,MongoDB比我的MySQL解决方案快大约30%。
我想知道,以上数字是正常的吗?尤其是没有索引的MongoDB select的性能?
我的代码如下:
BasicDBObject query = new BasicDBObject("A", value_of_field_A);
DBCursor cursor = currentCollection.find(query);
while(cursor.hasNext()) {
DBObject obj = cursor.next();
// do nothing after that, only for testing purpose
}顺便说一句,从业务逻辑的角度来看,我的收藏可能真的很大(TB或更多),您建议每个物理收藏的大小是多少?1000万个文档还是10亿个文档?
非常感谢!
我在MongoDB和MySQL上尝试了这个有1,000条记录的insert,MongoDB的行为比MySQL快了大约20% --并没有我想象的那么快。
我很好奇,如果我设置了MongoDB自动分片,插入速度会提升吗?如果是这样,我是否需要将分片放在不同的物理机器上,或者我可以将它们放在具有多核的同一台机器上?
首先,我将MongoDB写入问题从已确认修改为未确认,然后MongoDB插入速度提高了3倍。
后来,我做了一个并行的插入程序(8个线程与8核计算机),对于MongoDB确认模式,插入也改进了3倍,对于它的未确认模式,速度实际上慢了50%。
对于MySQL,并行插入模式将速度提高了5倍!这比MongoDB中最好的插入用例更快!
发布于 2013-06-27 19:43:03
没有索引的MongoDB查询将进行表扫描,我们应该知道,与mysql相比,mongodb的数据量要大得多。我猜这可能是做全扫描时速度慢的原因之一。
对于带有索引的查询,mongoDB可能会更快,因为有了缓存,没有复杂的查询优化器计划(如mysql)等。
集合的大小不是问题。事实上,1000万可以很容易地在一个集合中处理。如果你有存档数据的需求,那么你可以分成更小的集合,这将使过程变得容易。
https://stackoverflow.com/questions/17341165
复制相似问题