<目次>
(1) Azure Cosmos DBとは?特徴や構造およびデータ形式について
(1-1) Azure Cosmos DBとは?
(1-2) Azure Cosmos DBのデータ形式
(1-3) Azure Cosmos DBの主な特徴
(1-4) Azure Cosmos DBの構造について
(1-5) Azure Cosmos DBのマルチモデルAPIについて
(1) Azure Cosmos DBとは?特徴や構造およびデータ形式について
(1-1) Azure Cosmos DBとは?
「Azure Cosmos DB」はフルマネージド(運用作業をクラウド業者で実施)のNoSQL(非リレーショナルデータベース)です。世界中のリージョンにて利用できる事から、世界中のどこからアクセスしても10ミリ秒以下の高速な応答(クエリの応答)と、99.999%以上の可用性である事を強みとしています。
(1-2) Azure Cosmos DBのデータ形式
特徴的な点として、データがJSON形式で格納されており、SQLの応答結果もJSON形式で返却されます。通常のテーブル・カラム型式のリレーショナルデータベースに慣れ親しんだ人からすると、少し不思議な感じですね。ただし、後述の「Azure Cosmos DBのマルチモデルAPI」の所でも触れますが、JSON形式だからといって皆さまが現在使われている型式のデータベースが使えない・移行できないという事ではなく、そうしたモデル型式の違いにも対応できる各種APIもあるのでMongo DBでもGremlinでも、色々と対応が可能です。
(図111)JSON形式のイメージ
(1-3) Azure Cosmos DBの主な特徴
・①フルマネージドなDB
障害監視、パッチ適用、バックアップといった運用作業をクラウドプロバイダ(業者)が行ってくれます。
・②Turnkeyによるグローバル分散(Global Distribution)
・③透過的なマルチマスターレプリケーション
・④スループットのスケーリングが容易
・⑤非常に低レイテンシー
・⑥データの一貫性を調整できる
・⑦スキーマ不要&インデックス管理も自動
・⑧パーティショニング
(1-4) Azure Cosmos DBの構造について
Azure Cosmos DBの構造はざっくり次の図のようになっています。
Database Account | Azureのサブスクリプション配下に紐づく、Cosmos DBのリソース(=サービス)です。1つのAzureサブスクリプション配下に最大50個の「Database Account」を紐づける事ができます。 |
Database | リレーショナルデータベースでいう所の「データベース」に相当します。
Azureサブスクリプション配下に「Database Account」を作成したら、次は「Database」、「Container」、「item」を作成していきます。1つの「Database Account」配下に複数の「Database」を作る事ができます。こちらも、複数のCosmos DBの「Container」を束ねる論理的な単位になります。 |
Container(s) | リレーショナルデータベースでいう所の「テーブル」に相当します。
Cosmos DBにおけるコンテナ(Contaier)はデータベースのオブジェクト(RDBでいう表、ビュー、インデックス等)に相当するもので、Cosmos DBにけるスケーリング(RU=Request Unit=リクエスト/秒の調整、ストレージ量の調整)の単位であり、Container単位でRUやストレージを調整していく事になります。 また、リレーショナルデータベースにおける「パーティショニング」に似た機能があり、ユーザが指定した「パーティションキー」(論理)に基いて、自動的&透過的(利用者が意識する必要なく)、物理的なパーティショニングを実施してくれます。 |
item(s) | リレーショナルデータベースでいう所の「行」に相当します。
全てのCosmos itemには、システム側で共通的に使用するitemが含まれています。例えば以下のような項目があります。 ・「_rid」:各itemを一意に識別するための「id」 |
(1-5) Azure Cosmos DBのマルチモデルAPIについて
「マルチモデルAPI」はCosmos DBが5種類のデータベース(Mongo DB、Gremlin、Cassandra、Azure Table Storage、etcd)と互換するためのAPIです。
このAPIを使う事で、これら5種類のデータベースを使用するアプリケーションは、ほぼ改修なくそのままAPI経由でCosmos DBに接続する事が可能となります。例えばCassandra APIの場合だと、既存のCassandraアプリの「接続文字列」を変更するのみで、「Apache Cassandra」⇒「Azure Cosmos DBのCassandra API」への切り替えを実現できます。
(表)
●利用するAPI | ●Containers (Containerが何として認識されるか?) |
●items (itemが何として認識されるか?) |
MongoDB | Collections (テーブル相当) |
Documents (レコード相当) |
Gremlin | Graphs (グラフ) |
Node、Edges (ノード=データエンティティ、エッジ=ノード間の関係) |
Cassandra | Table (表) |
Row (行) |
Azure Table Storage | Table (表) |
Item (項目) |
etcd | Key (キー) |
Value (値) |