Docs Menu
Docs Home
/
MongoDBマニュアル
/ /

上限付きコレクション

項目一覧

  • Overview
  • 動作
  • 挿入順序
  • 最も古いドキュメントの自動削除
  • Oplog コレクション
  • _id Index
  • 制限と推奨事項
  • 読み取り
  • Updates
  • シャーディング
  • クエリ効率
  • 集計 $out
  • トランザクション
  • Stable API
  • 手順
  • 上限付きコレクションの作成
  • 上限付きコレクションのクエリ
  • コレクションに上限が設けられているかどうかを確認する
  • コレクションを上限付きに変換する
  • Capped コレクションのサイズの変更
  • Capped コレクション内の最大ドキュメント数の変更
  • 追尾可能 (tailable) カーソル

Capped コレクションとは、挿入順序に基づいてドキュメントを挿入、取得する高スループット操作をサポートする固定サイズのコレクションです。 機能方法は循環バッファと同様で、コレクションの割り当て領域に達すると、内部の最も古いドキュメントを上書きすることで、新しいドキュメントに空き領域が作成されます。

Capped コレクションの作成の詳細については、 createCollection()またはcreateを参照してください。

Tip

Capped コレクションの代替として、MongoDB のTTL(Time To Live)インデックス を検討してください。 「 TTL を設定してコレクションのデータを期限切れにする 」で説明されているように、これらのインデックスを使用すると、日付型フィールドの値とインデックスの TTL 値に基づいて、通常のコレクションからデータを期限切れにして削除できます。

TTL インデックスは Capped コレクションと互換性がありません。

Capped コレクションは、挿入順序の保持を保証します。 その結果、クエリでは、挿入順序でドキュメントを返すためにインデックスは必要ありません。 このインデックス オーバーヘッドがない場合、Capped コレクションはより高い挿入スループットをサポートできます。

新しいドキュメントの空き領域を作成するために、Capped コレクションでは、スクリプトや明示的な削除操作なしで、コレクション内の最も古いドキュメントが自動的に削除されます。

Capped コレクションの次の潜在的なユースケースを考慮してください。

  • 大規模なシステムによって生成されたログ情報を保存します。 Inserting documents in a capped collection without an index is close to the speed of writing log information directly to a file system. さらに、組み込みの先入れ先出しプロパティは、ストレージの使用を管理しながら、イベントの順序を維持します。 For example, the oplog uses a capped collection.

  • Capped コレクションで少数のデータをキャッシュします。 キャッシュは書き込みが多いのではなく読み取りであるため、このコレクションが常にワーキングセット(RAM)内に存在するようにする、必要なインデックスに対してある程度の書込みペナルティを受け入れる必要があります。

操作のログをレプリカセットにストアする oplog.rs コレクションには、上限付きコレクションが使われます。

MongoDB 4.0 以降では、他の Cappedコレクションとは異なり、oplog は設定されたサイズ制限を超えて拡大することができ、 majority commit pointが削除されるのを回避します。

注意

MongoDB では、oplog の上限サイズを、256 の倍数の最も近い整数に切り上げます(単位はバイト)。

上限付きコレクションには、デフォルトで _id フィールドと _id フィールドにインデックスがあります。

MongoDB 5.0 以降では、上限付きコレクションから読み取るときに読み取り保証 (read concern) "snapshot" を使用できません。

Capped コレクション内のドキュメントを更新する場合は、インデックスを作成して、これらの更新操作にコレクションスキャンが必要なくなります。

Capped コレクションはシャーディングできません。

コレクションから最後に挿入された要素を効率的に検索するには、 自然な順序付け 機能を使用します。 この機能を用いると、ログファイルに対してtailコマンドを使用するのと同様の結果が得られます。

集計パイプライン ステージ$outは Capped コレクションに結果を書き込めません。

トランザクション では Capped コレクションへの書込み(write)はできません。

上限付きコレクションは、Stable API V1 でサポートされていません。

db.createCollection()上限付きコレクションは、 コマンドのmongosh ヘルパーであるcreate メソッドを使用して明示的に作成する必要があります。Capped コレクションを作成するときは、コレクションの最大サイズをバイト単位で指定する必要があります。このサイズは MongoDB によってコレクションに事前に割り当てられます。 Capped コレクションのサイズには、内部オーバーヘッド用のスペースが含まれます。

db.createCollection( "log", { capped: true, size: 100000 } )

注意

sizeフィールドに指定する値は、 0より大きく、 1024^5 (1 PB )以下である必要があります。 MongoDB は、すべての Cappedコレクションのsizeを、256 の倍数の最も近い整数に切り上げます(バイト単位)。

さらに、次のドキュメントのように、 maxフィールドを使用してコレクションのドキュメントの最大数を指定することもできます。

db.createCollection("log", { capped : true, size : 5242880, max :
5000 } )

重要

ドキュメントの数を指定した場合でも、 max size引数は常に必要です。 MongoDB は、コレクションが最大ドキュメント数に達する前に最大サイズ制限に達した場合、古いドキュメントを排除します。

Tip

次を参照してください。

順序が指定されていない Capped コレクションでfind()を実行すると、MongoDB は結果の順序が挿入順序と同じであることを保証します。

逆の挿入順序でドキュメントを検索するには、次の例に示すように、 パラメータを に設定して、 と メソッドを発行します。find()sort()$natural-1

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

コレクションが上限付きかどうかは、次のようにisCapped()メソッドを使用して判断します。

db.collection.isCapped()

convertToCappedコマンドを使用して、Capped 以外のコレクションを Capped コレクションに変換できます。

db.runCommand({"convertToCapped": "mycoll", size: 100000});

sizeパラメーターは、上限付きコレクションのサイズをバイト単位で指定します。

これにより、操作中はデータベースの排他ロックが保持されます。同じデータベースをロックする他の操作は、操作が完了するまでブロックされます。データベースをロックする操作の場合、「一般的なクライアント操作によって取得されるロック」を参照してください。

バージョン 6.0 で追加。

collModコマンドのcappedSizeオプションを使用して、上限付きコレクションのサイズを変更して、 cappedSizeをバイト単位で設定します。 cappedSize0より大きく、 1024^5 (1 PB )以下である必要があります。

注意

上限付きコレクションのサイズを変更する前に、 featureCompatibilityVersionを少なくともバージョン"6.0"にすでに設定している必要があります。

たとえば、次のコマンドは、 "log"の上限付きコレクション の最大サイズを 100000 バイトに設定します。

db.runCommand( { collMod: "log", cappedSize: 100000 } )

バージョン 6.0 で追加。

上限付きコレクション内のドキュメントの最大数を変更するには、 collModコマンドのcappedMaxオプションを使用します。 cappedMax0未満の場合、ドキュメント数の上限はありません。 cappedMaxがコレクション内の現在のドキュメント数より小さい場合、MongoDB は次回の挿入操作で超過ドキュメントを削除します。

たとえば、次のコマンドは、 "log"の上限付きコレクション内のドキュメントの最大数を 500 に設定します。

db.runCommand( { collMod: "log", cappedMax: 500 } )

上限付きコレクションでは、追尾可能 (tailable) カーソルを使用できます。Unix tail -f コマンドと同様に、追尾可能 (tailable) カーソルは、上限付きコレクションの最後に「追尾」します。新しいドキュメントが上限付きコレクションに挿入されたら、追尾可能 (tailable) カーソルを使用してドキュメントの検索を続行できます。

追尾可能 (tailable) カーソルの作成の詳細については、「 追尾可能 (tailable) カーソル 」を参照してください。

戻る

オンデマンドのマテリアライズドビュー