SQLにするか、noSQLにするか......そんなことまで考えているのか? (2022/03/01)
SQLにするか、noSQLにするか......そんなことまで考えているのか? (2022/03/01)
https://medium.com/oracledevs/to-sql-or-nosql-is-that-even-a-question-3b8b5b45b8fd
投稿者:J.K. Kashe
数年前、noSQLのムーブメントが大流行し、SQL派とnoSQL派の間で果てしない「論争」が繰り広げられたことがあります。
どちらの側にも、どちらか一方のアプローチに対する正当な主張があります。問題は、一度どちらかに決定すると、もう一方は窓から消えてしまうことです。もし、私たちが皆、同じデータ上で自分の好きなツールを使うことができたら、クールだと思いませんか?
簡単な例
ある企業が、ある技術についてどのような本が何冊出版され、それが競合他社と比較してどうなのかを把握したいと考えています。
このプロジェクトでは、2つのチームが活動しています。
- pythonチームは、様々なソースからデータをクロールして収集します。
- APEXチームはデータを表示するための簡単なUIを作成します。
課題:pythonチームは、収集しスクラップするデータがとにかくJSONであるため、すべてをJSONで行いたいと考えており、データベースとのやりとりにSQLは絶対に使いたくありません。
APEXチームはリレーショナルデータベースに縛られていて、それを使うしかありません。
シンプルなソリューション
Oracle Autonomous Databaseでは、新しいOracle Database API for MongoDBのおかげで、各自が望むツールやAPIを使用することができます。ここでは、各チームがとったアプローチを順を追って説明します。
I. Autonomous JSON Database のプロビジョニング
Autonomous JSON Database (AJD)は、その名前からは想像できないほど、最大20GBのリレーショナルストレージを搭載し、APEXをサポートしています。
しかも、Always Free Tierで利用でき(つまり、この例を無料で追うことができます)、OCPUあたり月額約240円しかかかりません。もし20GB以上のリレーショナルストレージが必要なら、後でいつでもフルATP(Autonomous Transaction Processing DB)にアップグレードできます。
ちなみに、Oracle Cloud Free Tierのアカウントは、今日から登録できますよ。
AJDのプロビジョニング方法については、たくさんのチュートリアルがあるので、ポイントだけを絞って紹介します。
1. 現時点ではMongoDBのAPIを取得するためにJSON DBをプロビジョニングする必要があります。必要であれば、後でATPにアップグレードすることができます。
2. "許可されたIPとVCNからの安全なアクセス "を使用する必要があります。プライベートエンドポイントは、現時点ではサポートされていません。
デモのために、CIDER 0.0.0.0/0と入力しますが、これは悪い考えなので使わないでください。
3. プロビジョニングが完了したら、サービスコンソールを開き、MongoDB接続文字列をコピーします。
MongoDBの接続文字列は、開発セクションにあります。
II. Pythonクライアントの実装
スクリプト全体はこちらでご覧になれます。
わあ、簡単!noSql、非常にわかりやすいAPIコールをいくつか使うだけ。確かにnoSQLの魅力がよくわかりますね。
このスクリプトは本当に動作するのでしょうか?AJDに戻って結果を確認してみましょう。
1. OCIコンソールで、Database Actionsを開く
2. 管理者としてログインし、SQLツールを開く
3. booksユーザーのパスワードを変更
ちなみに、adminユーザーアカウントでログインしたため、ユーザーはMongoDB APIで自動的に作成されました。
4. 一旦サインアウトして、booksユーザーとして再接続します。
5. JSONツールを開く
こちらのpythonスクリプトでgithubからダウンロードした書籍が表示されます。
III. APEXアプリの実装
1. APEXワークスペースの作成
サービスコンソール/開発セクションで、Oracle Apexに移動します。
Apexの初回起動時は、adminとしてのみログイン可能です。
pythonスクリプトで'books'ユーザーを作成済みです。APEXアプリでも同じユーザーを使用します。
管理者アカウントからログアウトし、booksユーザーとしてワークスペースにログインします。
2. APEXアプリケーションを新規に作成します。
3. 新しいホームページの実装
この例では、最も簡単な方法は、Home ページを置き換えることです。"1-Home"をクリックします。
右上のスパナをクリックし、「ページの削除」をクリックします。
「Report」を選択し、「Cards」を選択します。
ページ番号に1を入力しないと、アプリが動作しません。
既存のナビゲーションアイテムを確認します。
ソースにSQL Queryを設定し、以下を貼り付けます。
with q as
(select
b.data.thumbnailUrl,
b.data.isbn,
b.data.title,
b.data.pageCount,
b.data.authors,
j.*
from
books b,
json_table (
b.data, '$' columns (
nested categories[*]
columns (
category path '$'
))) j
)
select
*
from q
where category='Java'
Gridレイアウトを使用し、TitleカラムにTitleを入力します。
最後に「作成」をクリックします。しかし、まだ終わりではありません。
1. 左側で Home リージョンを選択します
2. 右側の「属性」に切り替える
3. メディアを画像URLに変更し、ソースとしてthumbnailurl列を選択します。
4. 変更を保存します
4. アプリケーションの実行
Pythonスクリプトで挿入されるJava関連書籍
まとめ
犠牲を払うことなく、仕事に適したツールを使用することには、明確な利点があります。SQLにするかnoSQLにするかは、もはや二者択一ではありません。
コメント
コメントを投稿