2012-03-28 7 views
0

問題がある:移行データは、クエリの速度はますます遅くなる

私は3つのMongoのテーブルを持っている、と私は3つのSQL Serverテーブルへ、そこからデータを移行したいです。各モンゴーテーブルには、_idに1つのインデックスしかありません。

私はこれを行うには公式のC#ドライバを使用します。

MongoCursor mongocursor = mongoCollection.find(); 
mongocursor.setHint("_id_"); 
mongocursor.setSortOrder(new string[] { "_id" }); 
foreach (BsonDocument bd in mongocursor) 
{ 
    //To do sth... 
} 

次に、私はmongostatを使ってクエリを監視します。私はそれぞれのgetmoreコマンドが遅くなり、遅くなったことに気付きます。 15,000,000レコードを移行すると約10分後、それぞれのgetmoreコマンドは約5秒かかるでしょう。その後、30,000,000レコードを移行すると約20分後、それぞれの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

コレクション内のすべてのドキュメントを照会している場合は、実際にインデックスと並べ替えをスキップしてパフォーマンスが向上します(インポートプロセスで並べ替え順序が重要でない場合)。ソートをスキップすると、ディスク上の順番(通常のコレクションでは未定義)で結果が取得され、MongoDBサーバー上で多くのディスクシークを避けることができます。

+0

ありがとう、@ dcrosta。ソート順は重要ですが、あなたは私にインスピレーションを与えました。私はテーブルを再作成します。幸いにも、テーブルはあまり大きくありません。問題はこわれてしまった。^。^ – lastfallen

関連する問題