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

時系列コレクションの制限

項目一覧

  • サポートされていない機能
  • 集計の $merge と $out
  • distinct コマンド
  • ドキュメントのサイズ
  • 削除
  • Updates
  • 時系列セカンダリインデックス
  • 時系列セカンダリインデックス
  • MongoDB 5.0 以前の時系列セカンダリインデックス
  • 上限付きコレクション
  • コレクション タイプの変更
  • timeFieldmetaField の変更
  • 粒度
  • バケット サイズ
  • バケット パラメータの変更
  • シャーディング
  • シャーディング管理コマンド
  • シャードキー フィールド
  • 再シャーディング
  • トランザクション
  • ビュー
  • スナップショットの分離

このページでは、 時系列コレクションの使用に関する制限について説明します。

次の機能は、時系列コレクションではサポートされていません。

Atlas Device Sync のサポートは、Atlas Data Ingest を使用する時系列コレクションに限定されます。

$merge 集計ステージを使用して、別のコレクションのデータを時系列コレクションに追加することはできません。

バージョン 7.0.3 での変更: $out 集計ステージを使用して、ドキュメントを時系列コレクションに書込み (write) することができます。

時系列コレクションは一意のデータ構造であるため、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"}}])

これは、次のように機能します。

  1. meta.projectmeta.type複合インデックスを作成し、集計をサポートする。

  2. $match ステージが meta.project = 10 のドキュメントにフィルターをかける。

  3. $group ステージでは、meta.type をグループキーとして使用して、一意の値ごとに 1 つのドキュメントを出力する。

時系列コレクション内のドキュメントの最大サイズは 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 を設定してコレクションのデータを期限切れにする」を参照してください。

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 以降では、任意のフィールドにセカンダリインデックスを追加できます。

これらのインデックス タイプは部分的にサポートされています。

これらのインデックス タイプはサポートされていません。

時系列コレクションセカンダリインデックスがあり、機能の互換性バージョン (fCV) をダウングレードする必要がある場合は、ダウングレードした fCV と互換性のないセカンダリインデックスを最初に削除する必要があります。setFeatureCompatibilityVersion を参照してください。

MongoDB 5.0 以前の場合は、

  • metaField はセカンダリインデックスを持つことができます。

  • timeField はセカンダリインデックスを持つことができます。

  • metaField がドキュメントの場合には、ドキュメント内のフィールドにセカンダリインデックスを追加できます。

Tip

以下も参照してください。

時系列コレクションを 上限付きコレクションとして作成することはできません。

コレクションを作成するときにのみコレクション タイプを設定できます。

  • 既存のコレクションを時系列コレクションに変換することはできません。

  • 時系列コレクションを別のコレクション タイプに変換することはできません。

既存のコレクションから時系列コレクションにデータを移動するには、データを時系列コレクションに移行します。

コレクションを作成するときにのみ、コレクションの timeField パラメーターと metaField パラメーターを設定できます。これらのパラメーターを後で変更することはできません。

どの粒度パラメーターの設定でも、バケットの最大サイズは 1000 回の測定値または 125 KB のデータ量のうち、どちらか小さい方です。MongoDB では、ワーキングセットのバケットが WiredTiger キャッシュに収まるように、多数のユニークな値を持つ高濃度データに対しては、最大サイズを小さくすることもできます。

コレクションの granularity またはカスタムバケットパラメーターの bucketMaxSpanSecondsbucketRoundingSeconds を設定すると、バケットの対象となるタイムスパンを増やすことはできますが、減らすことはできません。パラメーターを変更するには、collMod コマンドを使用します。以下に例を挙げます。

db.runCommand({
collMod: "timeseries",
timeseries: { bucketMaxSpanSeconds: 3600, bucketRoundingSeconds: 3600 }
})

注意

bucketMaxSpanSecondsbucketRoundingSeconds は等しくなければなりません。1 つのパラメーターを変更する場合は、他のパラメーターも同じ値に設定する必要があります。

MongoDB 5.1(および 5.0.6)以降では、シャーディングされた時系列コレクションを作成できます。

MongoDB 5.0.6 より前のバージョンでは、時系列コレクションをシャーディングできません。

シャーディングされた時系列コレクションでは、シャーディング管理コマンドを実行できません。

時系列コレクションをシャーディングする場合、シャードキーで指定できるのは次のフィールドのみです。

  • この metaField

  • サブフィールド metaField

  • この timeField

シャードキーでこれらのフィールドの組み合わせを指定できます。シャードキーのパターンでは、_id を含む他のフィールドは許可されません。

シャードキーを指定する場合には、次のいずれかです。

Tip

timeField だけをシャードキーとして指定することは避けてください。timeField単調に増加するため、すべての書き込みがクラスター内の 1 つのチャンクで発生することがあります。理想的には、データをチャンク間で均等に分散します。

シャードキーを最適に選択する方法については、以下を参照してください。

シャーディングされた時系列コレクションを再シャーディングすることはできません。 ただし、そのシャードキーは変更できます。

トランザクションの時系列コレクションに書き込むことはできません。

注意

時系列コレクションからの読み取りはトランザクションでサポートされています。

  • 時系列コレクションは、書き込み可能な非マテリアライズドビューです。ビューの制限は、時系列コレクションに適用されます。

  • 時系列バケットコレクションの名前空間(つまり、system.buckets というプレフィックスが付いたコレクション)からビューを作成することはできません。

読み取り保証"snapshot"を使用した時系列コレクションの読み取り操作は、読み取り操作内にコレクションに対する同時削除操作または名前変更操作がない場合にのみスナップショットの分離を保証します。 別の粒度設定を使用して同じ名前空間に時系列コレクションを再作成しても、完全なスナップショット分離は生成されません。

戻る

時系列圧縮