これは、時間がかかりすぎたため、最適化とプロファイリングに過去 2 日間を費やしたコードの一部です。
{
mongo::ScopedDbConnection _dbConnection (DbHost);
_dbConnection->insert(TokensDB, tokensArray );
_dbConnection.done();
}
{
mongo::ScopedDbConnection _dbConnection (DbHost);
_dbConnection->insert(IdxDB, postingsArray);
_dbConnection.done();
}
ここpostingsArray
にstd::vector<BSON (int64_t, int64_t, int64_t, int)>
、20 000 要素があります。この挿入には常に数ミリ秒しかかかりません。tokensArray
はstd::vector<BSON (int64_t, std::string)>
、5000要素です。これは奇妙な挿入物です。
上記のコード フラグメントとまったく同じように実行すると、45 ~ 50 ミリ秒かかります。しかし、最初と同じように 2 つのブロックを切り替えると (IdxDB
最初とTokensDB
2 番目に挿入)、400 ~ 500 ミリ秒かかります。ここで何が起こっているのですか?なぜ順序が重要なのですか?5000 の 2 フィールド レコードを挿入すると、20k の 4 フィールド オブジェクトを挿入するよりも時間がかかるのはなぜですか?
私の最初のアイデアは、std::string
フィールドが原因であるということです(単一の英単語を保持するため、平均して約5〜7記号です)。乱数に置き換えましたint64_t
-挿入完了時間に目立った変化はありません。
すべてのプロファイリングはクリーンなデータベースで行われ、毎回まったく同じデータが使用されます。測定値を整理するのは私の間違いではないと思います。