🚀

「NoSQL ってなに?」から始める Cosmos DB 超入門【RDB 育ちの人向け】

に公開

はじめに

「NoSQL って聞いたことはあるけど、正直よく分からない…」
「SQL で十分じゃない?」
そんな風に感じている方もいるのではないでしょうか?
私自身もリレーショナル データベース (RDB) を使ってきただけに、NoSQL という言葉に少し距離を感じていました。

しかし、クラウド時代の今、データの扱い方も大きく変わってきています。
リアルタイムで大量のデータを処理したり、世界中のユーザーに高速にサービスを提供するには、RDB だけでは限界があることも……

そこで登場するのが NoSQL、そして Cosmos DB です。

この記事では、RDB しか知らない、Cosmos DB を触ったことのないエンジニアに向けて、
自身のアウトプットも兼ねて Cosmos DB の魅力を分かりやすく紹介していきます。

まず、"NoSQL" ってなに?

"NoSQL" は「Not Only SQL」の略で、SQL 以外の柔軟なデータ モデルを採用したデータベース群を指します。

  • RDB (例 : SQL Server、Oracle など) は、表形式でデータを管理し、SQL という言語でデータ操作します。

  • NoSQL は、もっと柔軟なデータ構造を扱えるデータベースで、以下のような種類があります。

    • ドキュメント型 (例 : MongoDB、Cosmos DB)
    • キー・バリュー型 (例 : Redis、Amazon Dynamo DB)
    • グラフ型 (例 : Neo4j、Amazon Neptune)
    • カラム型 (例 : Apache Cassandra、HBase)

※それぞれ用途や構造が異なりますが、Cosmos DB はこの中でも「ドキュメント型」に分類されます。

……このように、RDBが「表形式」でデータを管理するのに対し、NoSQLはもっと柔軟な構造を持っています。
たとえば、Cosmos DB ではデータを JSON 形式のドキュメントとして保存します。
これは Web APIなどでよく使われる形式なので、フロントエンドやクラウド開発に慣れている人には親しみやすいかもしれません。

Cosmos DB ってどんなもの?

Azure Cosmos DB は、Microsoft Azure が提供する PaaS の NoSQL データベース製品です。

▼ 基本的なデータ構造

"アカウント" > "データベース" > "コンテナー" > "アイテム" - "パーティション キー" となっています。

実際に Azure portal のリソース画面で見ていきましょう。

アカウント :
Cosmos DB の最上位のリソース。
Azure ポータルで作成され、複数のデータベースを含むことができます。

データベース :
アカウント内に作成される論理的な単位。
複数のデータ コレクション (コンテナー) を含みます

コンテナー :
Cosmos DB のスケーラビリティの単位。ドキュメント、グラフ、テーブルなどのデータを格納。
パーティションキーによってデータが分散されます。

アイテム :
コンテナ内の個々のデータ エントリ。JSON 形式のドキュメントが一般的(Core (SQL) API の場合)。
各アイテムには一意の id と、パーティションキーが必要です。

パーティション キー :
データを効率的に分散・スケーリングするためのキー。コンテナ作成時に指定し、変更不可。
適切なキー設計がパフォーマンスに直結します。

▼ Cosmos DB の特徴

特徴としては、主に以下 6 点が挙げられます。

1. スキーマレスで柔軟なデータ構造
👉「事前定義なしで、好きな形のデータを保存できる」
ドキュメント型 (JSON 形式) でデータを保存し、同じコンテナー内でも異なる構造のデータを格納可能です。

2. 豊富な種類の API をサポート
👉「用途に応じて、MongoDB や SQL 風などの API を選べる」
Core (SQL)、MongoDB、Cassandra、Gremlin、Table など、様々なデータ モデルに対応した API を用意。

※ Cosmos DB の API モデルはアカウント単位で選択します。アカウント作成時に Core (SQL), MongoDB, Cassandra などの API を選び、そのアカウント内では選択した API に対応した操作のみが可能です。

3. スケーラビリティに優れている
👉「データが増えても、自動でスケールアウト」
パーティション キーによる水平スケーリングで、実質的にデータ容量に制限はありません (ただしキー設計が超重要)

4. グローバル分散と高速アクセス
👉「世界中どこからでも 10ms 未満でアクセス」
最大 24 リージョンにレプリケーション可能。(整合性レベルに依存)
整合性レベルも 5 種類から選べます。(Strong, Bounded Staleness, Session, Consistent Prefix, Eventual)

5. 高可用性と自動バックアップ
👉「データベース停止しない & データ戻せる」
SLA にて 99.999% の可用性を誇り、自動バックアップや PITR (ポイントインタイム リストア) にも対応。

6. 従量課金制
👉「使った分だけ課金されるリクエスト単位制」
データベース操作に必要な CPU、メモリなどのリソース コストを抽象化した単位「リクエスト ユニット (RU) 」ベースの課金モデル。
1KB の単純な読み取り操作でだいたい 1 RU かかります。

色々書きましたが……
「とにかく大きなデータを扱えて、とにかく速いデータベース」と覚えていただけたらと思います。

どんな場面が適してるの?

スケーラビリティ、可用性、低レイテンシを重視するアプリケーションに最適です!

  • グローバルに展開する Web / モバイルアプリ
    (例 : 国際的な EC サイト、SNS、チャット アプリなど)

  • IoT (モノのインターネット) データの収集と分析
    (例 : スマートホーム、工場のモニタリング、車両のテレメトリー データなど)

  • リアルタイム パーソナライゼーション
    (例 : 動画配信サービス、EC サイトのレコメンド エンジン)

  • ゲームのバックエンド
    (例 : マルチプレイヤーゲーム、モバイルゲームのスコア管理)

  • 金融・保険業界でのトランザクション処理
    (例 : クレジットカードの不正検知、保険契約の管理)

  • マイクロサービス アーキテクチャのデータストア
    (例 : API バックエンド、イベント駆動アーキテクチャ)

【補足】Azure の RDB (Azure SQL Database) と Cosmos DB を比較しよう

ここまで Cosmos DB について解説してきたので、最後に、Azure の代表的な RDB 製品である Azure SQL Database と比較してみましょう。

項目 Azure SQL Database Cosmos DB
データモデル リレーショナル(表形式) NoSQL (ドキュメント、キー・バリュー、グラフなど)
スキーマ 固定 (事前定義が必要) 柔軟 (スキーマレス)
クエリ言語 SQL SQL風 (SQL API)、MongoDB API、Gremlinなど
スケーリング 垂直スケーリング 水平スケーリング
トランザクション 強い整合性 (ACID) 柔軟な整合性 (強整合〜最終整合まで選択可能)
グローバル分散 手動設定で地理的レプリケーション可能 標準機能で複数リージョン追加可能
主な用途 業務システム、会計、在庫管理など IoT、モバイルアプリ、ゲーム、EC サイトなど
開発者体験 SQL に慣れている人向け JSON や API ベースの開発に慣れている人向け
SLA 高可用性 (99.99%) 高可用性+低レイテンシ (99.999%)

Azure 上でデータベースを選択する際にでも参考にしてみてください。

まとめ

Cosmos DB は「速くて柔軟でグローバル」な NoSQL データベースであり、API モデルや整合性レベルなど、アプリ要件に応じた柔軟な選択ができることからも、現代のアプリケーションに最適です。
また、クラウド上から簡単にデプロイができる & 公式ドキュメントも豊富にあるため、初心者でも使いやすく、スケーラブルな設計が可能です。

「理屈は分かったけど、まだイメージがつかめない……」という方は、
Azure の無料アカウントを使って、Cosmos DB を実際に作成してみるのがおススメです!

(実は初投稿でした!ぜひ、感想やフィードバックいただけますと幸いです🙇)

Discussion