迁移数据,查询速度变得越来越慢
问题描述:
的问题是:迁移数据,查询速度变得越来越慢
我有3个表蒙哥,我想将数据从它迁移到3个SQL Server表。每个蒙戈表只有一个索引_id
。
我使用官方的C#驱动程序来做到这一点。我使用游标读取每个mongo表,如下所示:
MongoCursor mongocursor = mongoCollection.find();
mongocursor.setHint("_id_");
mongocursor.setSortOrder(new string[] { "_id" });
foreach (BsonDocument bd in mongocursor)
{
//To do sth...
}
然后我使用mongostat来监视查询。我注意到每个getmore命令变得越来越慢。大约10分钟后,移动1500万条记录,每个getmore命令大约需要5秒钟。然后在大约20分钟后迁移3000万条记录,每个getmore命令将花费大约10秒!
日志是这样的:
11:04:19 [conn809] getmore
YWANG4TestDataBase.UserOperationLog_2012_03_17 query: { $query: {},
$hint: "`_id_`", $orderby: { _id: 1 } } cursorid:80356003137218
nreturned:10396 reslen:4194659 8578ms
请帮助我。我不知道发生了什么事。
答
如果您正在查询集合中的所有文档,您将跳过索引和排序(除非排序顺序对导入过程很重要),实际上可以获得更好的性能。通过跳过排序,您将以磁盘顺序检索结果(这对于普通集合是未定义的),并且可以避免在MongoDB服务器上寻找大量磁盘。
非常感谢你,@ dcrosta。排序顺序很重要。但是你激励了我。所以我重新索引表。幸运的是,表不是很大。然后我再次尝试迁移。问题已被解决。^。^ – lastfallen 2012-03-29 01:59:11