勇者だって最初はひのきの棒とナベのふた

技術を中心に発信。時々SFの読書感想も。

CosmosDBのドキュメント読む その1

はじめに

masamoriです。 Cosmos DB盛り上がってますね。AI関連で。そろそろ触ってみるかー、と思い立ちまずはドキュメント。 恥ずかしながら、RDBしか触ったことがないので、CosmosDBがどう動くか分かってないのです。
この記事の目的は、ドキュメント読んで理解したことやドキュメントを理解するために調べたことを備忘録的な感じで残すということです。
なお、ドキュメントの量が結構あるので何回かに分けて記事を書きたいと思います。(その1とはそのため)

今回はこのドキュメントの最初の部分。

learn.microsoft.com

概要のセクションから読んでいきます。 ちなみに使い方についての解説は他に素晴らしい記事がたくさん出てると思うので、あくまで自分の理解を記すに留めておきたいと思います。

CosmosDBの概要?

まずはこちらのドキュメントで概要を見てみます。

learn.microsoft.com

うーん、AI推しですね。AI目的のDBなのかと勘違いしてしまいそうですが。。まぁしかし、AzureOpenAIサービスを組み合わせた構成を考えるとき、CosmosDBを使用するのはもはやデファクトスタンダード化しているので、この文面は仕方が無いのかなと。MSはCopilotゴリ押しですし。 ただ、注目はこの部分。

Azure Cosmos DB は、AI、デジタル コマース、IoT、予約管理、その他の種類のソリューションを含む、現代のアプリ開発のためのフル マネージドの NoSQL とリレーショナルのデータベースです。 Cosmos DBを一言で言い表すなら、ここかなと思います。

フルマネージドかつ、データをグローバルに自動的に分散することによって高可用性・低遅延を実現していることが特徴でしょうか。
基本的にはNoSQLみたいです。
ちなみに、CosmosDBはBuild 2017で発表されたらしく、元々はDcumentDBとして公開されていたようです。
この辺の歴史はこちら

ryuichi111std.hatenablog.com

API.

続いてこちら.

learn.microsoft.com

初めにCosmosDBのAPIサポートについてドキュメントを読んだ時、正直意味がよく分かっていませんでした。今までPostgreSQLなどのRDBしか触ったことなかったので、「色んなDBのAPIをサポートしている」という概念がよくわからなかったのです。
例えば、RDBとKVSを併用したい場合、当たり前の話ですがリソースを別々に立てないといけません。しかし、このCosmosDBの「API複数サポート」という文言を見て、これ、CosmosDBのインスタンス一つ立てたら、その中で色んなDB使える感じ?とか思ってました。PostgreSQLにも対応しているようなので、一つのリソースの中でDBの種類を使い分けることができるなんて最高。って。しかし、そんなことは無いんですねー。
そんな甘い幻想を打ち砕いてくれたのがこちらの画面.

.

Cosmos DBを作成するとき、最初にAPIを選ぶ必要があります。なので、
一つのCosmos DBで使えるAPIは一種類. これが原則のようです。
じゃあ、NoSQLだけのサポートで良いんじゃないか?とか思いました。どういう場合にCosmos DBで他のDBのAPIを使うのかなと疑問に思っていたんですが、こちらに一つの解答がありました。

learn.microsoft.com この中の次のセクション.

NoSQL 用 API は Azure Cosmos DB にネイティブなものです。

MongoDB、PostgreSQL、Cassandra、Gremlin、Table 用の API では、オープンソース データベース エンジンのワイヤ プロトコルが実装されます。 これらの API は、次の条件が満たされている場合に最適です。

既存の MongoDB、PostgreSQL Cassandra、または Gremlin アプリケーションがある場合 データ アクセス層全体を書き直す必要がない場合 オープンソースの開発者エコシステム、クライアント ドライバー、専門知識、データベースのリソースを使用する場合

つまり、既に運用しているDBがあればAPIを使うと良いということでしょうか。 例えば、何かしらのインスタンスを立て、DBを入れている場合スケールは手動でしなければなりません。しかし、Cosmos DBはフルマネージドなのでその辺もよしなにやってくれると。また、データをグローバルに分散しているので可用性も保証されると。それらに対してメリットを感じたらAPIというのも一つの手ですよ、という感じでしょうか。
個人的には、RDBRDBで立ててNoSQLはNoSQLで立てて運用した方が、良いような気もします。が、RDBとCosmos DBの連携がCosmos DBのAPIを使った方が遥かに容易になるのであれば、RDBもCosmosDBのAPIに任せてしまうのもありかなと思います。この辺はユースケース調べてみたいですね。
ちなみに、PostgreSQLを分散型データベースとして利用することを可能にしているのは、このライブラリらしいです。

github.com

興味深い。これも深掘りしてみたいです。
ちなみにちなみに、CosmosDBが分散リレーショナルに対応したのは割と最近っぽいです。

https://www.publickey1.jp/blog/22/postgresqlazure_cosmos_dbdbcitusignite_2022.htmlwww.publickey1.jp

終わりに

今回のブログではここまでにしたいと思います。今後何回かに分けて、ドキュメント読んで自分の学んだことを記事ににしていこうと思います。
基本的にはドキュメントの上から順に読んでいこうと思ってます。
なお、多々自分の理解に間違いがあると思うので、修正は入れていきたいと思います。