4

tsフィールドでクエリを実行してmongodb2.2レプリカセットのoplog.rsコレクションを読み取るアプリケーションがあります。

tsフィールドにインデックスを追加しましたが、新しいエントリがoplogに挿入されても更新されません。

私は何が欠けていますか?上限付きコレクションのインデックスがサポートされていないこと(逆)についてのmongodbドキュメントで何も見つかりません。また、oplogが特別であるという情報も見つかりません。

ありがとう

4

2 に答える 2

9

local.oplog.rsご存知のとおり、セカンダリインデックスはやなどのシステムコレクションではサポートされていません*.system.profile。MongoDB 2.4以前では、インデックスは作成されたように見えますが、実際には更新されていません。新しいバージョンのMongoDB(2.6以降)は、追加のインデックスを作成しようとするなど、サポートされていない変更でシステムコレクションを直接更新しようとすると、エラーを返します。

このoplog.rsコレクションは、複製のみを目的としているため、間違いなく「特別」です。レプリケーションの内部は、これに基づいてoplogの予想される操作についていくつかの仮定を行います。たとえば、レプリケーションではoplogエントリを挿入するだけで済みます。自分で作成できる上限付きのコレクションとは異なり、oplogエントリは更新されません。

アプリケーションは、oplogに挿入された新しいエントリを追跡する必要がある場合、またはorderを使用して検索を実行する必要がある場合、調整可能なカーソルでoplogを読み取ることが期待されます。$natural

調整可能なカーソルのチュートリアルでは、使用法についてさらに詳しく説明しますが、注意すべきいくつかの特定のポイントは次のとおりです。

  • テーラブルカーソルはインデックスを使用せず、自然な順序でドキュメントを返します。
  • 調整可能なカーソルはインデックスを使用しないため、クエリの最初のスキャンにはコストがかかる場合があります。ただし、最初にカーソルを使い果たした後、新しく追加されたドキュメントのその後の取得は安価です。
于 2013-05-08T14:58:46.340 に答える
0

私は何が欠けていますか?上限付きコレクションのインデックスがサポートされていないこと(逆)についてのmongodbドキュメントで何も見つかりません。また、oplogが特別であるという情報も見つかりません。

あなたの質問は、あなたが現在の実装についてどのように進んでいるのかについて、少し漠然としています。ただし、MongoDBにはまだpub / sub機能がないため、インデックスが更新されていないのではなく、更新の通知がないようです:https ://jira.mongodb.org/browse/SERVER-3385

このコレクション(http://docs.mongodb.org/manual/tutorial/create-tailable-cursor/)で調整可能なカーソルを使用して、長期間にわたって実際に更新を取得できます。

于 2013-03-13T15:42:26.460 に答える