2

いくつかの入力ファイルを処理し、取得したレコードをCouchDBドキュメントとして挿入しています。データベースのサイズが大きくなるにつれて、挿入速度が低下していることに気づきました。

私がしていることは:

  1. 入力ファイルからデータを読み取る
  2. データを処理して構造化ドキュメントを取得します
  3. ドキュメントをローカルバッファに入れます
  4. バッファーに1000個のドキュメントが含まれるとすぐに、couchdbの一括挿入を実行します
  5. 入力データが完全に処理されるまで繰り返します

ここに私の現在の実行のログがあります:

2012-03-15 10:15:58,716 - docs= 10000 rate=2282.38 entries/s
2012-03-15 10:16:46,748 - docs=100000 rate=1822.76 entries/s
2012-03-15 10:17:47,433 - docs=200000 rate=1592.01 entries/s
2012-03-15 10:18:48,566 - docs=300000 rate=1358.32 entries/s
2012-03-15 10:19:54,637 - docs=400000 rate=1572.55 entries/s
2012-03-15 10:21:01,690 - docs=500000 rate=1560.41 entries/s
2012-03-15 10:22:09,400 - docs=600000 rate=1556.22 entries/s
2012-03-15 10:23:16,153 - docs=700000 rate=1550.21 entries/s
2012-03-15 10:24:30,850 - docs=800000 rate=1393.61 entries/s
2012-03-15 10:25:46,099 - docs=900000 rate=1336.83 entries/s
2012-03-15 10:27:09,290 - docs=1000000 rate= 871.37 entries/s
2012-03-15 10:28:31,745 - docs=1100000 rate=1256.36 entries/s
2012-03-15 10:29:53,313 - docs=1200000 rate=1140.49 entries/s
2012-03-15 10:31:29,207 - docs=1300000 rate=1080.79 entries/s
2012-03-15 10:33:23,917 - docs=1400000 rate= 741.65 entries/s
2012-03-15 10:35:45,475 - docs=1500000 rate= 567.96 entries/s
2012-03-15 10:39:04,293 - docs=1600000 rate= 564.01 entries/s
2012-03-15 10:42:20,160 - docs=1700000 rate= 499.29 entries/s
2012-03-15 10:46:06,270 - docs=1800000 rate= 505.04 entries/s
2012-03-15 10:50:24,745 - docs=1900000 rate= 402.14 entries/s
2012-03-15 10:55:23,800 - docs=2000000 rate= 346.19 entries/s
2012-03-15 11:02:03,217 - docs=2100000 rate= 274.59 entries/s
2012-03-15 11:08:21,690 - docs=2200000 rate= 269.57 entries/s

「レート」は、最後の1000のドキュメントの挿入レートを示します。これは、ご覧のとおり、非常に速く劣化しています。

  • これは正常ですか?
  • 高い挿入率を維持するために何かできますか?
  • 大きなCouchDBデータベースの経験はありますか。
  • 共有したいアドバイスはありますか?
4

1 に答える 1

4

高い挿入率は異常であり、すべてがディスクキャッシュにきちんと収まっていることが原因です。データベースのサイズが大きくなると、btreeを更新するために、最終的にディスクからデータを読み取る必要があります。挿入テストをより長く実行してグラフ化すると、前面の大きなスパイクが奇妙であり、それに続く低いレートではなく、ほぼ一定のレートであることがわかります。

この質問をした他のスレッドから、もう1つの重要な要素は、完全にランダムなuuidを使用したことです。CouchDBはb+treeに基づいているため、完全にランダムなIDを挿入することは、更新の最悪のシナリオです。CouchDBには、多数のuuidアルゴリズムが付属しています。デフォルトでは、「シーケンシャル」と呼ばれ、衝突の可能性が非常に低い値を返しますが、それでも十分にシーケンシャルであるため、挿入パフォーマンスが大幅に向上します。

于 2012-03-18T22:44:17.697 に答える