Azure Cosmos DB の変更フィード - 概要Change feed in Azure Cosmos DB - overview

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.

Azure Cosmos DB は、IoT、ゲーム、小売、操作ログといったアプリケーションに最適です。Azure Cosmos DB is well-suited for IoT, gaming, retail, and operational logging applications. このようなアプリケーションの一般的な設計パターンは、データの変更を使用して、追加のアクションをトリガーする方法です。A common design pattern in these applications is to use changes to the data to trigger additional actions. 以下が追加のアクションの例となります。Examples of additional actions include:

  • 項目が挿入または更新された場合に通知または API の呼び出しをトリガーする。Triggering a notification or a call to an API, when an item is inserted or updated.
  • IoT のリアルタイム ストリーム処理または運用データのリアルタイム分析処理。Real-time stream processing for IoT or real-time analytics processing on operational data.
  • キャッシュ、検索エンジン、データ ウェアハウスと同期するか、データをコールド ストレージにアーカイブすることによる追加のデータ移動。Additional data movement by either synchronizing with a cache or a search engine or a data warehouse or archiving data to cold storage.

Azure Cosmos DB の変更フィードにより、次の図のようにこれらの各パターンに対応する効率的でスケーラブルなソリューションを構築できます。The change feed in Azure Cosmos DB enables you to build efficient and scalable solutions for each of these patterns, as shown in the following image:

Azure Cosmos DB の Change Feed を使用してリアルタイム分析とイベント ドリブンのコンピューティング シナリオを強化

サポートされる 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 Azure CLIAzure CLI SQL APISQL API Cassandra APICassandra API Azure Cosmos DB の MongoDB 用 APIAzure Cosmos DB's API for MongoDB Gremlin APIGremlin API テーブル APITable API
.NET.NET NANA はいYes いいえNo いいえNo はいYes いいえNo
JavaJava NANA はいYes いいえNo いいえNo はいYes いいえNo
PythonPython NANA はいYes いいえNo いいえNo はいYes いいえNo
Node/JSNode/JS NANA はいYes いいえNo いいえNo はいYes いいえNo

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

現在、変更フィードにはすべての操作が反映されます。Today, you see all operations in the change feed. 特定の操作の変更フィードを操作できるようにする機能 (たとえば、更新だけを対象とし、挿入は対象から除く、など) はまだありません。The functionality where you can control change feed, for specific operations such as updates only and not inserts is not yet available. 更新を表す項目に "ソフト マーカー" を追加し、変更フィード内の項目を処理する際、それに基づいてフィルター処理することができます。You can 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. 前の例と同様に、削除する項目にソフト マーカーを追加できます。たとえば、"deleted" という属性を項目に追加して "true" に設定し、その項目に TTL を設定できます。これで、その項目を自動的に削除できます。Similar to the previous example, you can add a soft marker on the items that are being deleted, 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, for example, items that were added five years ago. 項目が削除されていなければ、コンテナーの始まりまでさかのぼって変更フィードを読み取ることができます。If the item is not deleted you can read the change feed as far as the origin of your container.

変更フィードの項目の並べ替え順序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.

複数リージョンの 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.

変更フィードのユース ケースとシナリオChange feed use cases and scenarios

変更フィードによって、大量の書き込みを伴う大規模なデータセットを効率的に処理できます。Change feed enables efficient processing of large datasets with a high volume of writes. 変更フィードは、データセット全体にクエリを実行して変更内容を確認する方法に代わる機能を提供します。Change feed also offers an alternative to querying an entire dataset to identify what has changed.

ユース ケースUse cases

たとえば、変更フィードを使用すると、次のタスクを効率よく実行できます。For example, with change feed you can perform the following tasks efficiently:

  • Azure Cosmos DB に格納されたデータに従って、キャッシュの更新、検索インデックスの更新、データ ウェアハウスの更新を行う。Update a cache, update a search index, or update a data warehouse with data stored in Azure Cosmos DB.

  • アプリケーション レベルのデータの階層化とアーカイブを実装する (例: "ホット データ" を Azure Cosmos DB に格納し、"コールド データ" を Azure Blob Storage などの他のストレージ システムにエイジアウトする)。Implement an application-level data tiering and archival, for example, store "hot data" in Azure Cosmos DB and age out "cold data" to other storage systems, for example, Azure Blob Storage.

  • 異なる論理パーティション キーを持つ別の Azure Cosmos アカウントや Azure Cosmos コンテナーへの移行をダウン タイムなしで実行する。Perform zero down-time migrations to another Azure Cosmos account or another Azure Cosmos container with a different logical partition key.

  • Azure Cosmos DB を使用してラムダ アーキテクチャを実装する。Azure Cosmos DB はリアルタイム レイヤーと、バッチのクエリ処理レイヤーの両方をサポートするので、低 TCO でラムダ アーキテクチャを使用可能です。Implement lambda architecture using Azure Cosmos DB, where Azure Cosmos DB supports both real-time, batch and query serving layers, thus enabling lambda architecture with low TCO.

  • デバイス、センサー、インフラストラクチャ、アプリケーションからイベント データを受信および格納し、こうしたイベントを Spark などでリアルタイムに処理する。Receive and store event data from devices, sensors, infrastructure and applications, and process these events in real time, for example, using Spark. 次の図は、変更フィードを使用して、Azure Cosmos DB でラムダ アーキテクチャを実装する方法を示しています。The following image shows how you can implement lambda architecture using Azure Cosmos DB via change feed:

取り込みとクエリに対応する Azure Cosmos DB ベースのラムダ パイプライン

シナリオScenarios

変更フィードで簡単に実装できるシナリオの例を以下にいくつか示します。The following are some of the scenarios you can easily implement with change feed:

  • サーバーレス Web やモバイル アプリ内で、お客様のプロファイル、設定、場所のすべての変更などのイベントを追跡し、Azure Functions を使用して各デバイスにプッシュ通知を送信するなど、特定のアクションをトリガーできます。Within your serverless web or mobile apps, you can track events such as all the changes to your customer's profile, preferences, or their location and trigger certain actions, for example, sending push notifications to their devices using Azure Functions.

  • たとえば、Azure Cosmos DB を使用してゲームを構築する場合、Change Feed を使用して完了したゲームのスコアに基づくリアルタイムのスコアボードを実装できます。If you're using Azure Cosmos DB to build a game, you can, for example, use change feed to implement real-time leaderboards based on scores from completed games.

変更フィードの操作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, wins over the StartTime and StartFromBeginning values. ChangeFeedOptions.StartTime の精度は 5 秒以下です。The precision of ChangeFeedOptions.StartTime is ~5 secs.

次の手順Next steps

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