Azure Cosmos DB の変更フィードChange feed in Azure Cosmos DB

Azure Cosmos DB の変更フィードのサポートは、Azure Cosmos コンテナーの変更をリッスンすることで機能します。Change feed support in Azure Cosmos DB works by listening to an Azure Cosmos container for any changes. 変更されたドキュメントは、変更された順に並べ替えられた一覧に出力されます。It then outputs the sorted list of documents that were changed in the order in which they were modified. 変更は保持され、非同期的に増分処理できます。また、出力を 1 つ以上のコンシューマーに分散させて並列処理することもできます。The changes are persisted, can be processed asynchronously and incrementally, and the output can be distributed across one or more consumers for parallel processing.

変更フィードの設計パターンについて、さらに学習します。Learn more about change feed design patterns.

サポートされる API とクライアント SDKSupported APIs and client SDKs

この機能は現在、次の Azure Cosmos DB API とクライアント SDK でサポートされています。This feature is currently supported by the following Azure Cosmos DB APIs and client SDKs.

クライアント ドライバーClient drivers SQL APISQL API Cassandra 用 Azure Cosmos DB APIAzure Cosmos DB's API for Cassandra Azure Cosmos DB の MongoDB 用 APIAzure Cosmos DB's API for MongoDB Gremlin APIGremlin API テーブル APITable API
.NET.NET はいYes はいYes はいYes はいYes いいえNo
JavaJava はいYes はいYes はいYes はいYes いいえNo
PythonPython はいYes はいYes はいYes はいYes いいえNo
Node/JSNode/JS はいYes はいYes はいYes はいYes いいえNo

変更フィードとさまざまな操作Change feed and different operations

現在、変更フィードにはすべての挿入と更新が表示されています。Today, you see all inserts and updates in the change feed. 特定の種類の操作について、変更フィードをフィルター処理することはできません。You can't filter the change feed for a specific type of operation. 他の可能な方法の 1 つとして、更新を表す項目に "ソフト マーカー" を追加し、変更フィード内の項目を処理する際、それに基づいてフィルター処理するという方法があります。One possible alternative, is to add a "soft marker" on the item for updates and filter based on that when processing items in the change feed.

現在、変更フィードでは削除は記録されません。Currently change feed doesn't log deletes. 前の例と同様に、削除される項目にソフト マーカーを追加できます。Similar to the previous example, you can add a soft marker on the items that are being deleted. たとえば、項目に "deleted" という名前の属性を追加して "true" に設定し、項目に TTL を設定すると、それを自動的に削除できます。For example, you can add an attribute in the item called "deleted" and set it to "true" and set a TTL on the item, so that it can be automatically deleted. 5 年前に追加された項目など、履歴項目の変更フィード (項目に対応する最新の変更点には、中間変更は含まれません) を読み取ることができます。You can read the change feed for historic items (the most recent change corresponding to the item, it doesn't include the intermediate changes), for example, items that were added five years ago. 変更フィードはコンテナーの起点まで遡って読み取ることができますが、項目が削除されると、変更フィードから削除されます。You can read the change feed as far back as the origin of your container but if an item is deleted, it will be removed from the change feed.

変更フィードの項目の並べ替え順序Sort order of items in change feed

変更フィードの項目の順序は変更時刻順です。Change feed items come in the order of their modification time. この並べ替え順序は、論理パーティション キーごとに保証されます。This sort order is guaranteed per logical partition key.

整合性レベルConsistency level

変更フィードを最終的な整合性レベルで使用している場合は、後続の変更フィードの読み取り操作の間に重複するイベントが発生する可能性があります (1 回の読み取り操作の最後のイベントが、次の操作の最初のイベントとして表示されます)。While consuming the change feed in an Eventual consistency level, there could be duplicate events in-between subsequent change feed read operations (the last event of one read operation appears as the first of the next).

複数リージョンの Azure Cosmos アカウントの変更フィードChange feed in multi-region Azure Cosmos accounts

複数リージョンの Azure Cosmos アカウントで書き込みリージョンがフェールオーバーすると、変更フィードは手動のフェールオーバー操作をまたいで機能し、隣接になります。In a multi-region Azure Cosmos account, if a write-region fails over, change feed will work across the manual failover operation and it will be contiguous.

変更フィードと Time to Live (TTL)Change feed and Time to Live (TTL)

ある項目の TTL (Time to Live) プロパティが -1 に設定されている場合、変更フィードは永久に持続します。If a TTL (Time to Live) property is set on an item to -1, change feed will persist forever. データが削除されなければ、変更フィード内に保持されます。If the data is not deleted, it will remain in the change feed.

変更フィードと _etag、_lsn、_tsChange feed and _etag, _lsn or _ts

_etag は内部形式であり、いつでも変更され得るため、これに依存することはできません。The _etag format is internal and you should not take dependency on it, because it can change anytime. _ts は、変更または作成のタイムスタンプです。_ts is a modification or a creation timestamp. _ts は時系列比較に利用できます。You can use _ts for chronological comparison. _lsn は変更フィードに対してのみ追加されるバッチ ID であり、トランザクション ID を表します。_lsn is a batch ID that is added for change feed only; it represents the transaction ID. 多数の項目に同じ _lsn が付くことがあります。Many items may have same _lsn. FeedResponse の ETag は、項目にある _etag とは異なります。ETag on FeedResponse is different from the _etag you see on the item. _etag は内部識別子であり、コンカレンシー制御に使用され、項目のバージョンを伝えますが、ETag はフィードのシーケンス処理に使用されます。_etag is an internal identifier and is used for concurrency control tells about the version of the item, whereas ETag is used for sequencing the feed.

変更フィードの操作Working with change feed

次のオプションを使用して変更フィードを操作できます。You can work with change feed using the following options:

変更フィードは、コンテナー内の論理パーティション キーごとに利用できるため、次の図のように 1 つまたは複数のコンシューマーに分散して並列処理できます。Change feed is available for each logical partition key within the container, and it can be distributed across one or more consumers for parallel processing as shown in the image below.

Azure Cosmos DB の Change Feed の分散処理

変更フィードの特徴Features of change feed

  • 変更フィードは、すべての Azure Cosmos アカウントで既定で有効になっています。Change feed is enabled by default for all Azure Cosmos accounts.

  • 他の Azure Cosmos DB の操作と同様、Azure Cosmos データベースに関連付けられているどのリージョンにおいても、変更フィードからの読み取りには、プロビジョニング スループットを使用できます。You can use your provisioned throughput to read from the change feed, just like any other Azure Cosmos DB operation, in any of the regions associated with your Azure Cosmos database.

  • 変更フィードには、コンテナー内の項目に対して行われた挿入操作と更新操作が含まれています。The change feed includes inserts and update operations made to items within the container. 削除の代わりに、ドキュメントなどの項目内で "論理的な削除" フラグを設定することで削除をキャプチャできます。You can capture deletes by setting a "soft-delete" flag within your items (for example, documents) in place of deletes. または、TTL 機能を使用して項目の有効期間を設定することもできます。Alternatively, you can set a finite expiration period for your items with the TTL capability. たとえば、24 時間に設定し、そのプロパティの値を使用して削除をキャプチャします。For example, 24 hours and use the value of that property to capture deletes. この場合は、TTL の有効期限よりも短い期間に含まれる変更を処理する必要があります。With this solution, you have to process the changes within a shorter time interval than the TTL expiration period.

  • 項目に加えられた変更はそれぞれ変更フィード内に 1 回だけ出現し、クライアントがそれらのチェックポイント処理ロジックを管理しなければなりません。Each change to an item appears exactly once in the change feed, and the clients must manage the checkpointing logic. チェックポイントの管理の複雑さを回避する必要がある場合は、変更フィード プロセッサによって、自動チェックポイント処理と "最低 1 回" というセマンティクスが提供されます。If you want to avoid the complexity of managing checkpoints, the change feed processor provides automatic checkpointing and "at least once" semantics. 変更フィードと変更フィード プロセッサの併用に関するページを参照してください。See using change feed with change feed processor.

  • 変更ログには、特定の項目の最新の変更のみが含まれます。Only the most recent change for a given item is included in the change log. 途中の変更は利用できない場合があります。Intermediate changes may not be available.

  • 変更フィードは論理パーティション キーの値ごとに変更日時順に並べ替えられます。The change feed is sorted by the order of modification within each logical partition key value. パーティション キーの値が異なる場合、順序は保証されません。There is no guaranteed order across the partition key values.

  • 変更の同期は任意の時点から行うことが可能です。つまり、変更内容を利用できるデータ保持期間は固定されていません。Changes can be synchronized from any point-in-time, that is there is no fixed data retention period for which changes are available.

  • Azure Cosmos コンテナーのすべての論理パーティション キーで並行して変更を使用可能です。Changes are available in parallel for all logical partition keys of an Azure Cosmos container. この機能により、大規模なコンテナーの変更を複数のコンシューマーで並行処理できるようになります。This capability allows changes from large containers to be processed in parallel by multiple consumers.

  • アプリケーションは、同じコンテナーに対して複数の変更フィードを同時に要求できます。Applications can request multiple change feeds on the same container simultaneously. ChangeFeedOptions.StartTime を使用して、最初の始点を指定できます。ChangeFeedOptions.StartTime can be used to provide an initial starting point. たとえば、設定した時刻に対応する継続トークンを検出する場合です。For example, to find the continuation token corresponding to a given clock time. ContinuationToken を指定している場合、StartTime と StartFromBeginning の値よりも優先されます。The ContinuationToken, if specified, takes precedence over the StartTime and StartFromBeginning values. ChangeFeedOptions.StartTime の精度は 5 秒以下です。The precision of ChangeFeedOptions.StartTime is ~5 secs.

Cassandra と MongoDB の API の変更フィードChange feed in APIs for Cassandra and MongoDB

変更フィード機能は、MongoDB API では変更ストリームとして表示され、Cassandra API では述語を含むクエリとして表示されます。Change feed functionality is surfaced as change stream in MongoDB API and Query with predicate in Cassandra API. MongoDB API の実装の詳細については、MongoDB 用の Azure Cosmos DB API の変更ストリームに関するページを参照してください。To learn more about the implementation details for MongoDB API, see the Change streams in the Azure Cosmos DB API for MongoDB.

ネイティブ Apache Cassandra には、変更データ キャプチャ (CDC) が用意されています。CDC は、特定のテーブルに対してアーカイブのフラグを設定し、CDC ログ用に構成可能なディスク上のサイズに達すると、そのテーブルへの書き込みを拒否するメカニズムです。Native Apache Cassandra provides change data capture (CDC), a mechanism to flag specific tables for archival as well as rejecting writes to those tables once a configurable size-on-disk for the CDC log is reached. Azure Cosmos DB API for Cassandra の変更フィード機能により、CQL を介して述語を使用して変更をクエリする機能が向上します。The change feed feature in Azure Cosmos DB API for Cassandra enhances the ability to query the changes with predicate via CQL. 実装の詳細については、Cassandra 用の Azure Cosmos DB API の変更フィードに関するページを参照してください。To learn more about the implementation details, see Change feed in the Azure Cosmos DB API for Cassandra.

次のステップNext steps

以下の記事で、変更フィードに関してさらに詳しく知ることができます。You can now proceed to learn more about change feed in the following articles: