Mongodb-capped-collections

提供:Dev Guides
移動先:案内検索

MongoDB-上限付きコレクション

  • キャップ付きコレクション*は、挿入順序に従う固定サイズの循環コレクションであり、作成、読み取り、削除操作の高いパフォーマンスをサポートします。 循環とは、コレクションに割り当てられた固定サイズが使い果たされると、明示的なコマンドを提供せずにコレクション内の最も古いドキュメントの削除を開始することを意味します。

更新によりドキュメントサイズが大きくなる場合、キャップ付きコレクションはドキュメントの更新を制限します。 上限のあるコレクションはドキュメントをディスクストレージの順序で保存するため、ドキュメントサイズがディスクに割り当てられたサイズを増加させないようにします。 上限付きコレクションは、ログ情報、キャッシュデータ、またはその他の大量のデータを保存するのに最適です。

キャップ付きコレクションの作成

キャップ付きコレクションを作成するには、通常のcreateCollectionコマンドを使用しますが、 capped オプションを true として使用し、コレクションの最大サイズをバイト単位で指定します。

>db.createCollection("cappedLogCollection",{capped:true,size:10000})

コレクションのサイズに加えて、 max パラメータを使用してコレクション内のドキュメントの数を制限することもできます-

>db.createCollection("cappedLogCollection",{capped:true,size:10000,max:1000})

あなたがコレクションがキャップされているかどうかを確認したい場合は、次の isCapped コマンドを使用します-

>db.cappedLogCollection.isCapped()

あなたがキャップに変換することを計画している既存のコレクションがある場合は、次のコードでそれを行うことができます-

>db.runCommand({"convertToCapped":"posts",size:10000})

このコードは、既存のコレクション*投稿*をキャップ付きコレクションに変換します。

キャップ付きコレクションのクエリ

デフォルトでは、キャップ付きコレクションの検索クエリは挿入結果で結果を表示します。 しかし、ドキュメントを逆順で取得したい場合は、次のコードに示すように sort コマンドを使用します-

>db.cappedLogCollection.find().sort({$natural:-1})

知っておく価値のある上限付きコレクションに関するその他の重要な点はほとんどありません-

  • 上限付きコレクションからドキュメントを削除することはできません。
  • キャップ付きコレクションには、_idフィールドにもデフォルトインデックスはありません。
  • 新しいドキュメントを挿入する際、MongoDBはディスク上の新しいドキュメントに対応する場所を実際に探す必要はありません。 コレクションの末尾に新しいドキュメントを盲目的に挿入できます。 これにより、上限付きコレクションへの挿入操作が非常に高速になります。
  • 同様に、ドキュメントの読み取り中、MongoDBはディスクに存在するのと同じ順序でドキュメントを返します。 これにより、読み取り操作が非常に高速になります。