将数据从MongoDB迁移到SQL Server,查询速度变得越来越慢

时间:2012-03-28 03:11:48

标签: c# mongodb

问题是:

我有3个mongo表,我想将数据从它迁移到3个SQL Server表。每个mongo表在_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分钟后迁移15,000,000条记录,每条getmore命令大约需要5秒。然后在大约20分钟后迁移30,000,000条记录,每条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

请帮帮我。我不知道发生了什么。

1 个答案:

答案 0 :(得分:1)

如果您要查询集合中的所有文档,您实际上会通过跳过索引和排序来获得更好的性能(除非排序顺序对您的导入过程很重要)。通过跳过排序,您将以磁盘顺序检索结果(对于普通集合未定义),并且可以避免在MongoDB服务器上搜索大量磁盘。