Azure Cosmos DBを試してみた
背景的なこと
最近私の興味で、データの蓄積や活用について調べています。
データの蓄積と言えばデータベースですが、超ざっくり分類すると
- RDB (Relaytional Database)
- NoSQL (Not Only SQL)
に分かれるようです。
歴史が古く世の中のシェアで言えば圧倒的にRDBですが、それ以外の比較的新しいものがNoSQLという感じ(適当)。
NoSQLについて
NoSQLと言っても、またさらに色々種類はあります。
- キーバリュー型
- ワイドカラム型
- ドキュメント型
- グラフ型
それぞれ代表的なDBを当てはめるとこんな感じ。※Redisは少し異なるという見方あり
各DBの特徴について詳細は割愛しますが…
これらはビッグデータにおけるRDBでは不得意なスケールアウトや、テーブル定義が困難な多様なデータの扱いなどに適しています。
今回はドキュメント型のDBを構成して、簡単にデータを参照するところまでやってみたいと思います。
Azure Cosmos DBでやってみた
さて私が触っていくのは、AzureのCosmos DBです。
PaaSなので基盤側の構成はほぼ何もいらないため、お試しで使うには手軽で良いと思いチョイスしました。
1. Cosmos DBアカウントの作成
Cosmos DBでは前述のすべての型(データモデル)に対応していますが、どの型で構成するかを決めます。
具体的には最初に「アカウント」を作成するのですが、この際にどの型のAPIを利用するかを選択します。
Azure Portalにログインし、[すべてのサービス] > [データベース] から"Azure Cosmos DB"を選びます。
今回は"コア (SQL)"でアカウントを作成していきます。そう、私でも少し知っているSQLが使えます。
作成の際に指定したパラメーターは下記の通り。
- サブスクリプション
- リソースグループ
- 場所
- アカウント名
- 容量モード
- ネットワーク接続
- バックアップポリシー
"容量モード"については、"プロビジョニングされたスループット"と"サーバーレス"があるのですが、
無償利用枠を適用している関係で前者にしています。
両者の違いについて、詳しくは下記をご覧ください。
プロビジョニングされたスループットとサーバーレスのどちらかを選択する方法
"ネットワーク接続"については"パブリックエンドポイント"で設定、FW機能でAzure Portalと特定のIPアドレスからのみにアクセスを限定しています。
2. データベースの作成
次にデータベースを作成します。
ここでは下記のパラメーターを指定します。
- データベースID(名)
- データベーススループット
- コンテナID(名)
- インデックス
- パーティションキー
"データベーススループット"は検証用途なので"手動"・"400RU/s"にしています。
"コンテナ"の概念ですが、RDBでいうテーブルみたいなものと解釈してもらえればよいです。
データベースとコンテナが一つ作成されました。
ちなみにコンテナは一つのデータベース配下に複数作成できます。
3. データの格納(アイテム作成)
続いてデータを格納していきます。
ドキュメント型なのでJSONフォーマットになります。
少量のサンプルデータなのでAzure Portalの [データ エクスプローラー] から、
先程作成したコンテナに"アイテム"を作成し、そちらに書き込みます。
作成するアイテムは3つ、データの内容はそれぞれ下記の通りです。
{
"employee_id": 101,
"fullname": "中川一郎",
"hire_date": "2007-06-01",
"skill_sets": {
"os": ["WindowsServer", "RHEL", "CentOS", "Solaris", "ESXi", "ONTAP"],
"application": ["ActiveDirectory", "SCCM", "MSSQL", "PostgreSQL", "Apache", "Bind"],
"programming": ["Powershell", "VBS", "Bash", "Python"]
}
}
{
"employee_id": 102,
"fullname": "鈴鹿まさる",
"hire_date": "2009-04-01",
"skill_sets": {
"os": ["RHEL", "CentOS", "IOS", "Junos", "ESXi"],
"application": ["Syslog", "MySQL", "Nginx", "Zabbix", "Docker"],
"programming": ["Bash", "Python"]
}
}
{
"employee_id": 103,
"fullname": "山形里美",
"hire_date": "2009-04-01",
"skill_sets": {
"os": ["Windows", "CentOS"],
"application": ["MSSQL", "IIS", "Access", "Git"],
"programming": ["VBA", ".NET", "C#"]
}
}
アイテムが作成できました。
4. データの参照
さて、ここまででひと通り準備ができましたのでデータを参照していきます。
折角なのでPostmanを使ってRESTでリクエストを投げてみたいと思います。
Postmanのセットアップや使い方については割愛しますが、下記を参考にさせていただきました。
Azure CosmosDB APIをたたいてみた
(メモ: Headersにて"x-ms-version"は"2018-12-31"、"x-ms-documentdb-query-enablecrosspartition"の有効化が必要)
ということでリクエストで肝心な箇所、BodyにSQLのクエリを埋め込みます。
内容(下記)は、"skill_sets" : "os"のキーに"WindowsServer"の値を持つIDと名前を検索するものです。
SELECT
e.employee_id,e.fullname,e.skill_sets.os
FROM
engineer e
WHERE
ARRAY_CONTAINS(e.skill_sets.os, "WindowsServer")
ではリクエストを送信します。
無事に応答が返り(画像下段)、期待通りの結果が得られました。
まとめ
NoSQLとはなんぞや、とCosmos DBを利用して触ってみましたが、
データベースとして自由度が高く、とても扱いやすい印象でした。
また試していないですが、JSONファイルをアイテムとしてそのままアップロードもできるようです。
今後はSynaps Analyticsといった分析系サービスへの連携も試してみたい思います。
それではこの辺で。






コメント
コメントを投稿