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

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

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

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

上限付きコレクションを作成するには、通常の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})

このコードは、既存のコレクションを変換します posts 上限のあるコレクションに。

上限付きコレクションのクエリ

デフォルトでは、上限付きコレクションに対する検索クエリは、挿入順に結果を表示します。ただし、ドキュメントを逆の順序で取得する場合は、sort 次のコードに示すコマンド-

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

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

  • 上限のあるコレクションからドキュメントを削除することはできません。

  • _idフィールドでも、上限付きコレクションにはデフォルトのインデックスはありません。

  • 新しいドキュメントを挿入するときに、MongoDBは実際にディスク上の新しいドキュメントを収容する場所を探す必要はありません。コレクションの最後に新しいドキュメントを盲目的に挿入できます。これにより、上限付きコレクションへの挿入操作が非常に高速になります。

  • 同様に、ドキュメントの読み取り中、MongoDBはディスクに存在するのと同じ順序でドキュメントを返します。これにより、読み取り操作が非常に高速になります。