皆さん、こんにちは!
2日間に渡って開催された de:code 2017もとうとう終わってしまいましたね。
今回は番外編として、Build 2017でも発表のあった Azure Cosmos DB をさっそく取り上げたいと思います。
Azure Cosmos DB はプラネットスケールの NoSQL サービスで、前身は Azure DocumentDB というサービス名称でした。特徴としては以下があります。
◆グローバル分散
Azure Cosmos DB は、グローバルで複数のリージョンへのレプリケーションが可能です。嬉しいことに東日本、西日本リージョンは既に対応済みです。
現時点では、書込はプライマリの1リージョンのみでその他のリージョンはすべて読取専用になります。今後、書込も複数リージョンに対応させたいと考えているようです。
アプリケーション側からのリクエストがあった場合は、透過的に最寄りのリージョンが応答する仕組みとなっています。
もし、プライマリに障害があった場合は、読み取り専用のいずれかのリージョンがプライマリに昇格します。どのリージョンを先に昇格させるかは PowerShell で制御することができます。
◆マルチデータモデル/API
Azure Cosmos DB では、以下の4つのデータモデルに対応しています。
また、データにアクセスするため以下のようにさまざまな API をサポートしています。
ちなみに、Table Storage はいずれ Cosmos DB へ完全統合する予定があるようです。
◆伸縮性のあるスケールアウト
Azure Cosmos DB は、ディスク容量とスループットの2つの要素でスケールアウトさせることが可能です。
ディスク容量は、ペタバイト(PB)クラスまでスケールできます。
スループットは、秒単位の要求ユニット(RU/s)とは別に分単位の要求ユニット(RU/m)も指定できます。秒単位とは別に分単位で指定する目的としては秒単位で指定した以上の要求があった場合、分単位の割り当てから消費させることによりスパイクや予期せぬスループットのニーズに対応できるようにすることにあります。
◆保証された低レイテンシ
Azure Cosmos DB は、同一リージョン内に限りますが、パーセンタイル値に応じてレイテンシを以下のとおり保証します。なお、別リージョンの場合は保証されません。de:code のセッションデモでも別リージョンは100~200ms 程度かかっていました。
パーセンタイル値 | 読込(1KB) | インデックス付書込(1KB) |
50%(中央値) | < 2ms | < 6ms |
99% | < 10ms | < 15ms |
◆5つの整合性モデル
Azure Cosmos DB は、5つの整合性モデルがあります。整合性とは、簡単にいうと分散データベースで一つのデータベースに書き込んでから他のデータベースに同期するまで、どこまで待つかの度合いのことをいいます。強い整合性を実現するほど同期し終わるまで待つ必要があるため、パフォーマンスが低下します。逆に多少の期間、データが古くてもよければ整合性を弱めてパフォーマンスを向上させることができます。そのため、整合性の強さとパフォーマンスはトレードオフの関係にあります。 5つの整合性モデルは以下があり、下に行けばいくほど整合性が強くなります。
なお、整合性はアプリケーションの処理ごとにオーバライド可能なため、処理に応じて整合性を切り替えることができます。
◆包括的な SLA
Azure Cosmos DB は、以下4つの側面の包括的な SLA を備えた唯一のデータベースです。これだけの大規模サービスで、ここまで SLA もしっかり定義されているのは凄すぎです。
プラネットスケールの NoSQL データベース、いかがでしたでしょうか。その名に恥じぬサービス内容だと思います。
個人的には、複数リージョンの書込対応楽しみです。他にも魅力的な機能が順次拡張されるため、今後も目が離せません!
皆さんも是非お試しください!それでは!
次回予告