Azure Cosmos DB の変更フィード モード
適用対象: NoSQL
Azure Cosmos DB には、2 つの変更フィード モードが用意されています。 各モードでは、同じコア機能が提供されます。 違いには、フィードでキャプチャされる操作、変更ごとに使用できるメタデータ、変更の保持期間などがあります。 各ワークロードの要件に合わせて、同じ Azure Cosmos DB コンテナーで複数のアプリケーションに対し異なるモードの変更フィードを使用できます。 個々の変更フィード アプリケーションは、1 つのモードで変更フィードを読み取るためにのみ構成できます。 あるモードで変更フィードを使用しても、別のアプリケーションで別のモードで変更フィードを使用することはできません。
Note
変更フィード モードについてフィードバックをお寄せください。 ご意見をお待ちしています。 ぜひ、Azure Cosmos DB エンジニアリング チーム (cosmoschangefeed@microsoft.com) まで直接ご意見をお寄せください。
最新バージョンの変更フィード モード
最新バージョン モードは、作成操作と更新操作によって項目に加えられた変更の永続的なレコードです。 コンテナー内の各項目の最新バージョンを取得します。 たとえば、変更フィードを読み取る前に項目が作成されて更新された場合、更新されたバージョンのみが変更フィードに表示されます。 削除は変更としてキャプチャされず、削除された項目はフィードに表示されなくなります。 最新バージョンの変更フィード モードは既定で有効になっており、Table 用 API と PostgreSQL 用 API を除くすべての Azure Cosmos DB アカウントと互換性があります。 このモードは、以前は変更フィードを使用するための既定の方法でした。
すべてのバージョンと削除の変更フィード モード (プレビュー)
すべてのバージョンと削除のモード (プレビュー) は、作成、更新、削除の操作によって項目に加えられたすべての変更の永続的なレコードです。 項目の各変更のレコードを発生順に取得します。これには、変更フィードの読み取りの間に発生した項目の中間変更も含まれます。 たとえば、変更フィードを読み取る前に項目が作成されて更新された場合、項目の作成バージョンと更新バージョンの両方が変更フィードに表示されます。 すべてのバージョンと削除のモードで変更フィードから読み取るには、Azure Cosmos DB アカウントで継続的バックアップを構成する必要があります。 継続的バックアップを有効にすると、すべてのバージョンと削除の変更フィードが作成されます。 この変更フィード モードを使用する場合は、継続的バックアップ期間内に発生した変更のみを読み取ることができます。 このモードは、Azure Cosmos DB for NoSQL アカウントのみと互換性があります。 詳細については、プレビューにサインアップする方法を参照してください。
変更フィードのユース ケース
最新バージョン モードでは、コンテナーの先頭から変更を遡る機能を使って、コンテナー内の項目に対するリアルタイムの変更と過去の変更の両方を簡単に処理できます。
このモードに適したシナリオは次のとおりです。
コンテナー全体をセカンダリの場所に移行する。
コンテナーの先頭から変更を再処理できるようにする。
作成操作と更新操作によってコンテナー内の項目に加えられた変更をリアルタイムで処理する。
ワークロードで、読み取り間の削除または中間変更をキャプチャする必要がない。
各モードの機能
すべての変更フィード モードの共通機能に加えて、各変更フィード モードには次の特性があります。
変更フィードには、コンテナー内の項目に対して行われた挿入と更新の操作が含まれます。
このモードの変更フィードでは削除は記録されません。 直接的な削除の代わりに、項目内で "論理的な削除" フラグを設定することで削除をキャプチャできます。 たとえば、項目に
deleted
という名前の属性を追加し、その値をtrue
に設定してから、項目に Time to Live (TTL) を設定できます。 変更フィードによって更新としてキャプチャされ、TTL の有効期限が切れると項目は自動的に削除されます。 または、TTL 機能を使用して項目の有効期間を設定することもできます。 この場合は、TTL の有効期限よりも短い期間に含まれる変更を処理する必要があります。変更フィードには、特定の項目の最新の変更のみが含まれます。 途中の変更は利用できない場合があります。
項目が削除されると、その項目は変更フィードに表示されなくなります。
変更の同期は任意の時点から行うことが可能です。また、変更内容を確認できる固定のデータ保持期間はありません。
特定の種類の操作について、変更フィードをフィルター処理することはできません。 他の可能な方法の 1 つとして、項目に更新を表す "ソフト マーカー" を追加し、変更フィード内の項目を処理する際、それに基づいてフィルター処理するという方法があります。
変更フィードの読み取りの開始点は、コンテナーの先頭、特定の時点、"現時点"、または特定のチェックポイントに設定できます。 開始時刻の精度は約 5 秒です。
変更フィードの操作
各モードは、各言語のさまざまな変更フィード読み取り方法と互換性があります。
次の方法を使用して、最新バージョン モードの変更フィードからの変更を使用できます。
変更フィードを読み取る方法 | .NET | Java | Python | Node.js |
---|---|---|---|---|
変更フィードのプル モデル | はい | イエス | イエス | はい |
変更フィード プロセッサ | はい | はい | いいえ | いいえ |
Azure Functions のトリガー | はい | イエス | イエス | はい |
応答オブジェクトの解析
最新バージョンのモードでは、既定の応答オブジェクトは変更された項目の配列です。 各項目には、Azure Cosmos DB 項目の標準メタデータが含まれます。たとえば、_etag
、_ts
、新しいプロパティの _lsn
などです。
_etag
は内部形式であり、いつでも変更される可能性があるため、この形式には依存しないようにしてください。 _ts
は、変更または作成のタイムスタンプです。 _ts
は時系列比較に利用できます。 _lsn
は変更フィードに対してのみ追加されるバッチ ID であり、トランザクション ID を表します。 多数の項目に同じ _lsn
があることがあります。
FeedResponse
の ETag
は、項目にある _etag
とは異なります。 _etag
は内部識別子であり、コンカレンシー制御に使用されます。 _etag
プロパティは、項目のバージョンを示します。一方、ETag
プロパティはフィードの順序付けのための使用されます。
次のステップ
変更フィードについて詳しくは、次の記事を参照してください。