このページでは、 時系列コレクションの使用に関する制限について説明します。
サポートされていない機能
次の機能は、時系列コレクションではサポートされていません。
Atlas Device Sync のサポートは、Atlas Data Ingest を使用する時系列コレクションに限定されます。
集計の $merge と $out
$merge 集計ステージを使用して、別のコレクションのデータを時系列コレクションに追加することはできません。
バージョン 7.0.3 での変更: $out 集計ステージを使用して、ドキュメントを時系列コレクションに書込み (write) することができます。
distinct コマンド
時系列コレクションは一意のデータ構造であるため、MongoDB は個別の値に対して効率的にインデックスを作成できません。時系列コレクションで distinct コマンドまたは db.collection.distinct() ヘルパーメソッドを使用しないでください。代わりに、$group 集計を使用して、ドキュメントを個別の値でグループ化します。
たとえば、meta.project = 10 であるドキュメントに対して meta.type の値を個別でクエリするには、次のようにします。
db.foo.distinct("meta.type", {"meta.project": 10})
次を使用します。
db.foo.createIndex({"meta.project":1, "meta.type":1}) db.foo.aggregate([{$match: {"meta.project": 10}}, {$group: {_id: "$meta.type"}}])
これは、次のように機能します。
ドキュメントのサイズ
時系列コレクション内のドキュメントの最大サイズは 4 MB です。
削除
MongoDB 5.1 以降、時系列コレクションに対して制限付きで削除操作が実行できるようになりました。MongoDB 7.0 では、delete コマンドに基づく操作のほとんどの制限が削除されました。
時系列削除は、マルチドキュメントトランザクションではサポートされていません。
MongoDB 5.1 から 6.3 では、削除コマンドは次の要件を満たす必要があります。
照合できるのは metaField フィールド値のみです。
削除コマンドでは、削除されるドキュメント数を制限せず、
justOne: falseを設定するか、deleteMany()メソッドを使用します。
MongoDB 7.0 以降では、これらの delete コマンドには時系列に関連する制限が 1 つだけあります。
これらのコマンドは、マルチドキュメントのトランザクションでは使用できません。他には制限はありません。
1970-01-01T00:00:00.000Z の前または 2038-01-19T03:14:07.000Z の後に timeField タイムスタンプがあるドキュメントが時系列コレクションに含まれる場合、TTL(time to live) 機能によってコレクションからドキュメントが削除されることはありません。
TTL 削除の詳細については、「TTL を設定してコレクションのデータを期限切れにする」を参照してください。
Updates
MongoDB 5.1 以降では、制限付きで操作を実行できます。
更新コマンドは、次の要件を満たしている必要があります。
照合できるのは、
metaFieldフィールドの値のみです。変更できるのは、
metaFieldフィールドの値のみです。更新ドキュメントには、更新演算子式しか含めることができません。
更新コマンドでは、更新されるドキュメント数を制限せず、
multi: trueを設定するか、updateMany()メソッドを使用します。更新コマンドでは upsert: true を設定しないでください。
MongoDB 5.0 では、時系列コレクションは挿入操作と読み取りクエリのみをサポートします。更新操作および手動削除操作はエラーになります。
古いデータを自動的に削除するには、自動削除(TTL)を設定します。
コレクションからすべてのドキュメントを削除するには、drop() メソッドを使用してコレクションを削除します。
時系列セカンダリインデックス
MongoDB 6.0 以降では、時系列コレクションのセカンダリインデックスのサポートが改善されています。これらのオプションの概要については、「MongoDB 6.0 以降の時系列セカンダリインデックス」を参照してください。
時系列セカンダリインデックス
MongoDB 6.3 以降、時系列コレクションは metaField の部分インデックスに対して expireAfterSeconds インデックス プロパティをサポートします。以前のバージョンの MongoDB の場合は、コレクション レベルの expireAfterSeconds パラメーターを使用します。
MongoDB 6.0 以降では、任意のフィールドにセカンダリインデックスを追加できます。
これらのインデックス タイプは部分的にサポートされています。
マルチキー インデックスは
metaFieldでのみ作成できます。metaFieldはスパース インデックスのみを作成できます。
これらのインデックス タイプはサポートされていません。
時系列コレクションにセカンダリインデックスがあり、機能の互換性バージョン (fCV) をダウングレードする必要がある場合は、ダウングレードした fCV と互換性のないセカンダリインデックスを最初に削除する必要があります。詳細については、setFeatureCompatibilityVersionを参照してください。
MongoDB 5.0 以前の時系列セカンダリインデックス
MongoDB 5.0 以前の場合は、
metaFieldはセカンダリインデックスを持つことができます。timeFieldはセカンダリインデックスを持つことができます。metaFieldがドキュメントの場合には、ドキュメント内のフィールドにセカンダリインデックスを追加できます。
Tip
上限付きコレクション
時系列コレクションを 上限付きコレクションとして作成することはできません。
コレクション タイプの変更
コレクションを作成するときにのみコレクション タイプを設定できます。
既存のコレクションを時系列コレクションに変換することはできません。
時系列コレクションを別のコレクション タイプに変換することはできません。
既存のコレクションから時系列コレクションにデータを移動するには、データを時系列コレクションに移行します。
timeField と metaField の変更
コレクションを作成するときにのみ、コレクションの timeField パラメーターと metaField パラメーターを設定できます。これらのパラメーターを後で変更することはできません。
粒度
バケット サイズ
どの粒度パラメーターの設定でも、バケットの最大サイズは 1000 回の測定値または 125 KB のデータ量のうち、どちらか小さい方です。MongoDB では、ワーキングセットのバケットが WiredTiger キャッシュに収まるように、多数のユニークな値を持つ高濃度データに対しては、最大サイズを小さくすることもできます。
バケット パラメータの変更
コレクションの granularity またはカスタムバケットパラメーターの bucketMaxSpanSeconds と bucketRoundingSeconds を設定すると、バケットの対象となるタイムスパンを増やすことはできますが、減らすことはできません。パラメーターを変更するには、collMod コマンドを使用します。以下に例を挙げます。
db.runCommand({ collMod: "timeseries", timeseries: { bucketMaxSpanSeconds: 3600, bucketRoundingSeconds: 3600 } })
注意
bucketMaxSpanSeconds と bucketRoundingSeconds は等しくなければなりません。1 つのパラメーターを変更する場合は、他のパラメーターも同じ値に設定する必要があります。
シャーディング
MongoDB 5.1(および 5.0.6)以降では、シャーディングされた時系列コレクションを作成できます。
MongoDB 5.0.6 より前のバージョンでは、時系列コレクションをシャーディングできません。
シャーディング管理コマンド
シャーディングされた時系列コレクションでは、シャーディング管理コマンドを実行できません。
シャードキー フィールド
時系列コレクションをシャーディングする場合、シャードキーで指定できるのは次のフィールドのみです。
この
metaFieldサブフィールド
metaFieldこの
timeField
シャードキーでこれらのフィールドの組み合わせを指定できます。シャードキーのパターンでは、_id を含む他のフィールドは許可されません。
シャードキーを指定する場合には、次のいずれかです。
metaFieldまたはtimeFieldでなければなりません:シャードキーのパターン末尾
Tip
timeField だけをシャードキーとして指定することは避けてください。timeField は単調に増加するため、すべての書き込みがクラスター内の 1 つのチャンクで発生することがあります。理想的には、データをチャンク間で均等に分散します。
シャードキーを最適に選択する方法については、以下を参照してください。
再シャーディング
シャーディングされた時系列コレクションを再シャーディングすることはできません。 ただし、そのシャードキーは変更できます。
ゾーン シャーディング
ゾーンシャーディングは時系列コレクションをサポートしていません。バランサーは常に、シャーディングされた時系列コレクションのデータをクラスター内のすべてのシャードに均等に分散させます。
トランザクション
トランザクションの時系列コレクションに書き込むことはできません。
注意
時系列コレクションからの読み取りはトランザクションでサポートされています。
ビュー
時系列コレクションは、書き込み可能な非マテリアライズドビューです。ビューの制限は、時系列コレクションに適用されます。
時系列バケットコレクションの名前空間(つまり、
system.bucketsというプレフィックスが付いたコレクション)からビューを作成することはできません。
スナップショットの分離
読み取り保証"snapshot"を使用した時系列コレクションの読み取り操作は、読み取り操作内にコレクションに対する同時削除操作または名前変更操作がない場合にのみスナップショットの分離を保証します。 別の粒度設定を使用して同じ名前空間に時系列コレクションを再作成しても、完全なスナップショット分離は生成されません。