问题是:
我有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
请帮帮我。我不知道发生了什么。
答案 0 :(得分:1)
如果您要查询集合中的所有文档,您实际上会通过跳过索引和排序来获得更好的性能(除非排序顺序对您的导入过程很重要)。通过跳过排序,您将以磁盘顺序检索结果(对于普通集合未定义),并且可以避免在MongoDB服务器上搜索大量磁盘。