時系列コレクションの制限
項目一覧
このページでは、 時系列コレクションの使用に関する制限について説明します。
サポートされていない機能
次の機能は、時系列コレクションではサポートされていません。
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
がドキュメントの場合には、ドキュメント内のフィールドにセカンダリインデックスを追加できます。
上限付きコレクション
時系列コレクションを 上限付きコレクションとして作成することはできません。
コレクション タイプの変更
コレクションを作成するときにのみコレクション タイプを設定できます。
既存のコレクションを時系列コレクションに変換することはできません。
時系列コレクションを別のコレクション タイプに変換することはできません。
既存のコレクションから時系列コレクションにデータを移動するには、データを時系列コレクションに移行します。
と の変更<a class=\" \" href=\" \" title=\" \"><svg xmlns=\" \" width=\" \" height=\" \" fill=\" \" viewbox=\" \" class=\" \" role=\" \" aria-label=\" \"><path fill=\" \" d=\" \"> <path fill=\" \" d=\" \">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"
を使用した時系列コレクションの読み取り操作は、読み取り操作内にコレクションに対する同時削除操作または名前変更操作がない場合にのみスナップショットの分離を保証します。 別の粒度設定を使用して同じ名前空間に時系列コレクションを再作成しても、完全なスナップショット分離は生成されません。