迁移数据,查询速度变得越来越慢

问题描述:

的问题是:迁移数据,查询速度变得越来越慢

我有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服务器上寻找大量磁盘。

+0

非常感谢你,@ dcrosta。排序顺序很重要。但是你激励了我。所以我重新索引表。幸运的是,表不是很大。然后我再次尝试迁移。问题已被解决。^。^ – lastfallen 2012-03-29 01:59:11