「Azure Cosmos DB」はMicrosoftの低遅延のグローバル分散型データベースサービスだ。その美点は常に、多種多様な要素を集約できることにあった。さまざまなデータモデルとデータベースクエリーAPIを組み合わせることで、クラウドとNoSQLの弾力性のあるスケーリングを実現できるほか、SQLデータベーススキーマの豊富なクエリーオプションと一連の一貫性モデルにより、分散型システムを柔軟かつ容易に作成できる。
Azure Data担当CTOのRaghu Ramakrishnan氏。「ひらめきの瞬間が訪れた。われわれには、運用側と分析側をつなぐインフラストラクチャーがある」 提供:Microsoft
今回、さらに分析を組み合わせて、運用データとトランザクションデータをリアルタイムで処理することが可能になった。この処理で運用データベースの速度が低下することはなく、面倒で複雑なETLプロセスを実施して作業用データのコピーを取得する必要はない。
「両方の良いとこ取りが可能だ」。Azure Data担当最高技術責任者(CTO)のRaghu Ramakrishnan氏は米TechRepublicにこう語った。
変更フィードを利用したバックアップ
新しい「Azure Synapse Link for Cosmos DB」は実際のところ、継続的バックアップとポイントインタイムリカバリーの新機能(現在はプレビュー段階)に使う変更フィードを作成する際に、副次的に生まれた便利な機能だった。
データベースをクラウドで使用すれば、これまでバックアップをとっていた理由の多くを回避できる。クラウドサービスで壊滅的な障害が発生してデータが消失することはめったにない。また、クラウドサービスが利用できない状況で使用するバックアップをとる場合でも、そのバックアップを使用するインフラストラクチャーは必要だ。
それでも、ミスをすることはあるし、ロールアウトした変更が後になって適切でなかったことが分かる場合もあるため、最大30日前までさかのぼれるオプションは役に立つだろう。Cosmos DBはこれを実現するために、データベース内のすべてのコンテナーに対するすべての変更を、発生した順序で永続的に記録している。特定の時点に戻りたい場合、Cosmos DBはこの変更フィードを使用して、変更内容を確認し、元に戻せる。
開発者は変更フィードを使用して、「Azure Functions」などのイベント駆動型ツールのアクションをトリガーできるほか、各種データプロパティーのうち、データの分割用に最も適したものはどれかを検証できる。たとえば、2つのコンテナーをセットアップして、それぞれ異なるデータプロパティーを分割のキーとして使用させ、1つ目のコンテナーでの変更を2つ目のコンテナーで再現すれば、どのプロパティーがライブデータで最もうまく機能するかが分かり、それを判断する間、プロジェクト全体を停止する必要はない。一部の開発者は、古いデータをアーカイブするレプリケーションメカニズムとして変更フィードを使用している。すべてが変更フィードを経由するからだ。これはバックアップ機能を作成する明白な方法だった。
Azure Synapse LinkによってAzure Cosmos DBと「Azure Synapse Analytics」が緊密に統合される。 提供:Microsoft
「途中で、ひらめきの瞬間が訪れた」。Ramakrishnan氏は米TechRepublicにこう語った。「『待てよ、われわれには、運用側と分析側をつなぐインフラストラクチャーがある』と言った」
「すべての変更が不可分的に、同期的に記録される。われわれは変更フィードを継続的に監視して再現しつつ、Synapse側でデータの列バージョンを増分的に維持している」
既存の変更フィードを使用するので、データをSynapseに取り込んでもCosmos DBが遅くなることはない。Cosmos DBはASOSなどのEコマースサイトで広く使用されているため、この点は重要だ。世界中のChipotleの店舗でメニューディスプレイに表示される内容は、Cosmos DBから直接配信されている。これはChipotleのモバイルアプリでも同じだ。
列とB-Tree
Ramakrishnan氏の試算によると、開発者は90%のケースでCosmos DBのデータをトランザクションデータとして扱いたいと考えているという。「トランザクションのパフォーマンス保証について妥協したくはないが、非常に大規模なクエリーを実行したいと思うこともある」