2012-04-11 4 views
4

私はmongodbに非常に大きなキャップ付きコレクションを持っています。キャッピングされたコレクション構造が予測可能である(つまり、ソートが事前定義されており、メモリフットプリントが事前定義されているなど)、反復処理の代わりに挿入された最新のアイテムにカーソルを置くより良い方法はありますか?モンゴキャップ付きのコレクションをスキップ

つまり、今私が行っていることは、自分のコレクション(n)のサイズを取得し、次にskip = n-1を設定してコレクションの最後に置くことです。次に、カーソルを反復して、コレクションへのすべての新しい追加を処理します。

この方法の問題は、私のコレクションが巨大であることです。 11mのレコードを言うことができます。スキップするのに20分かかります。つまり、カーソルがデータを発信し始めてから20分遅れます。

+1

私は同じ質問があります。私は現在、1億8,000万の文書を持っている私たちのoplogをテールしようとしています。テール可能なカーソルは、おそらく初期化に数時間かかるでしょう。そして、私はoplogにインデックスを追加することはできません。私はまだまともな選択肢を探しています。今のところ私がやっていることは$ naturalを並べ替えることです:大きな限界を持つ-1と前回の最後の文書を読むまで尾を読むこと。尾ができるカーソルを使わないでください。 – Marquez

答えて

1

db.cappedCollection.find()。limit(1).sort({$ natural:-1})を試してください。

+1

私は$ natural:1が有効なカーソルのために許可されていると信じます –

1

コレクションにインデックスを付けて$ gtを使ってみましたか?これは、インデックスがコレクションへの書き込み速度にいくらか影響を及ぼしますが、これは高速になるはずです。

+0

これはほぼすべての状況で正しい解決策になりますが、本当に高い更新コレクションの場合、実際にはパフォーマンスに影響します。私の場合は、私はoplogに取り組んでいるので、私はこれを行うことはできません。 –

関連する問題