MongoDBってどうなの? MySQLと比べて便利なの? MongoDBって簡単に使いだせるの?と感じたあなたにMongoDBの特徴と使い方をシェアします。
- MongoDBの10の特徴
- ドキュメント指向NoSQLについて簡単に説明
- JSONについて簡単に説明
- MongoDBのインストールをしてみましょう
- 忘れてはならないのが環境変数にPATHを通してください。
- MongoDBの使い方 コマンドによる動作確認
- MongoDBの3つの使いどころ
- MongoDBを導入のメリット
- MySQLとMongoDBの違い
- MySQLとMongoDBを連携したいときの移行方法
- mongodb document(ドキュメント)について
- まとめ
今までは、オープンソースのデータベースといえばMySQL、PostgreSQLの選択肢しかなかったと思うのですが、JSONやJavaScriptと親和性のあるドキュメント指向のNoSQLという選択肢が出てきました。
そのドキュメント指向データベースの筆頭としてMongoDBが注目されています。
特に、機械学習や、AIといったビッグデータを扱うデータ分析のInternet of Think (IoT)、eコマース(電子商取引)、オンラインバンキング、投資向けアプリ、ブロックチェーンを開発する人たちの間ですでにMongoDBの採用が増えています。
ビッグデータを使うためにスピード重視の時や水平スケールが必要とかアジャイル開発する人たちにとってはドキュメント指向データベースを使ったNoSQLを利用するとメリットがあるかもしれません。
リレーショナルデータベース(RDB)をRDBMS(MySQLやPostgreSQLなど)で操作するよりもMongoDBを利用したほうが、JSONとJavaScriptの連携がしやすいので便利だと思います。
それでは、MongoDBの特徴についてシェアしますね。
MongoDBの特徴を10個ピックアップしましたので参考にしてください。
MongoDBの10の特徴
1:データベースの概念はRDBと同じ
大事なことですが、MongoDBは特別な概念を持っているわけでなく普通のデータベースの概念に沿っています。
2: ドキュメント指向のNoSQLデータベース
BSONというJSONのデータ構造と親和性があるドキュメントデータで格納ができます。
BSONはドキュメントをバイナリ形式で内部データです。
3:クロスプラットフォーム
Windows、Mac、Linux、Solaris(x86のみ)と複数のOSに対応しています。
4:分散データベースを実現しやすい
1つのDBMS(データベース管理システム)を使ってデータベースの拠点が何か所もあり、パソコンが何台もつながった状態で使う制御がしやすい。
5:JSONのデータをほとんどそのまま加工なしで格納できる
JSONのデータ構造をドキュメントとしてそのまま保存できます。
6:仕様変更の対応が容易であるのでアジャイル型開発に有利
スキーマレスで柔軟性があるので、ビッグデータやデータの拡張、途中で仕様変更がたびたび発生する可能性のあるアジャイル開発でも対応しやすい。
7:スキーマを定義する必要なし
MYSQLのようにはじめにフィールドのデータ型やデータの大きさ主キーの選択、データの格納などの定義が必要ないスキーマレスです。動的なスキーマが使えるのでスキーマ構造の変更が可能です。このようにとても柔軟性があります。
8:クエリ、ライブラリが充実・それぞれの言語に対応した公式ドライバが豊富にある
MongoDBのすごい特徴としてGIO系の専用クエリの提供がある
柔軟に構造体を参照できるクエリが豊富です。
各言語に対応したMongoDBの公式ホームページに公式ドライバがあります。
ドキュメント、ソース、API、JIRAがあります。英語の解説ですがJava、Node.js、Pythonは使い方のOnline Courseがあるのでチェックするのはどうでしょう。
9:OBJECT構造がJSONに近い
JSON形式のデータをほとんどの場合特別な処理せずにそのまま扱えます。
10:JavascriptのようにMongoDB Shellを使える
MongoDBはシェルがあるのでコマンドでMongoDBのカーネルの操作を行えます。
コマンドプロンプトでmongoと入力するとMongoDB shellが起動します。
他にも公式のMongoDB Javascript API のドキュメントがあります。
ドキュメント指向NoSQLについて簡単に説明
事前にテーブルの構造を決めておく必要のないスキーマレスのデータベースです。
ドキュメントと呼ぶ一件分のデータがあり、データ構造が自由で、データ構造を変えることもできます。
メリットとしてはオブジェクトをそのまま保存しやすい
JSONについて簡単に説明
JSONは略語で元の語はJavaScript Object Notation です。
機械と人間の間でコマンドを通じて会話するためのデータの扱いのルールです。
JSONというデータフォーマットに沿ってMongoDBはドキュメント指向NoSQLを操作することができます。
MongoDBのインストールをしてみましょう
私はWindows10を使用しているのでWindows10でMongoDBの使い方を紹介します。
ダウンロード
MongoDBの公式サイトでダウンロードして下さい
自分が利用しているOS対応したのをDownloadしてください。
ダウンロードしたmsiのインストーラーをダブルクリックしてインストールをしましょう
基本はデフォルトのままで画面の指示に沿ってインストールします。
Licenseに同意します。
Completeをインストールしました。
デフォルトのままで大丈夫です。
MongoDB Compassが必要ない人はチェックを外してください。
後は画面の指示に沿ってインストールを進めればインストール完了です。
忘れてはならないのが環境変数にPATHを通してください。
PATHの通し方を次に説明します。
環境変数のPATHを指定が必要
MongoDBは次のPATHを指定してください
4.2の部分はバージョンなので変わりますが、PATHはMongoDBのbinフォルダーのところを指定してください。
PATH = C:\Program Files\MongoDB\Server\4.2\bin
環境変数の場所はシステム→システム詳細設定→環境変数を順にクリックします。
環境変数のPATHを選択して編集をクリックすると次の画面が現れると思います。
PATHを入力してOKをクリックしてください。
次にMongoDBのコマンドの使い方を紹介します。
MongoDBの使い方 コマンドによる動作確認
それではMongoDBの使い方について紹介します。
コマンドプロンプトでmongoと入力してMongoDB scriptが起動しないときは、MongoDBのPATHが環境変数に正しく設定されていない可能性が高いのでPATHの設定を見直してください。
コマンドによるMongoDBの起動
コマンドプロンプトでMongoと入力するとMongoDBが起動します。
データベースを作成するコマンドの確認
Use wankoDatabase (*wankoDatabaseはデータベースの任意の名前です。)
コレクションを作成するコマンドの確認
db.createCollection(“wankoCollection”) (ドキュメントの中にコレクションを作ります。)
データを追加するコマンドの確認
db.wankoCollection.insertOne({wanko: 1})
データを検索するコマンドの確認
db.TestCollection.find() (*検索するときはfindを使用します。)
終了するコマンドの確認
Exit (*終了するときはexitと入力するとMongoDB Scriptを終了します。)
簡単な動作確認を行いました。
ほかにも、インデックスの機能があります。フィールドやサブフィールドをドキュメントに任意に設定できます。
詳しくは、MongoDBの公式サイトと、MongoDBの薄い本が参考になると思います。
当ブログでもコマンドの使い方について徐々にシェアしていきますね。
MongoDBの3つの使いどころ
MongoDBってどのようなときに選択するのが良いのかというのを3つピックアップしてみました。
1:ビックデータを扱うデータベース(DB)の設計が必要な場合
たとえば、機械学習や、AI、ブロックチェーンといったデータがスキーマの設計がしにくい時や、開発が進むにつれてデータ量が膨大に膨れ上がっていくと予想される場合はMongoDBのドキュメント指向が使いやすいのでないでしょうか。
ピッグデータを並?処?して扱うとき場合はHadoopや、アグリゲーション・パイプライン、MapReduceと連携すると手段を活用するのはどうでしょう。
2:開発当初の使用が明確でなく仕様変更が頻発する場合
客先の要求仕様がころころ変更するようなときがありませんか?
RDBで設計すると想定外の仕様変更が起こるとあたふたしてしまうことがあります。
そのようなときはMongoDBを採用して仕様変更に対応できるようにするのはどうでしょう。
3:複数の拠点や、複数のPCでデータベースを分散したい場合
各営業所や、地震対策でサーバーを分散したいというときはMongoDBのドキュメント指向NoSQLは適していると思います。
MongoDBを導入のメリット
MongoDBは完ぺきでないので良い面もあれば、いまいひとつの面もあります。そのため、設計する人が今回紹介したMongoDBの特徴をしっかりと把握してデータベースの選択肢の一つとしてMongoDBを利用するのがおすすめです。
MongoDBのメリット
- 単純な構造で柔軟性がある
- 水平分散できる
- スピードが速い
- ビッグデータの運用がしやすい。
MongoDBのデメリット
- 複雑な構造は手間がかかる
- 柔軟性があるぶん設計者によって煩雑になる
- 完ぺきに矛盾のないデータの管理がしにくい
MySQLとMongoDBの違い
MySQLとMongoDBはデータベースの基本的な考え方は同じですが、アプローチが全く違うので違いを表にしてみました。
表の見方を説明するとMySQLとMongoDBの大きく違う項目を1から5比較しました。
表の違いを考慮してどちらのデータベースを採用するか検討するのはどうでしょう。
MySQLとMongoDBを連携したいときの移行方法
一般的な使い方でないようですが、MySQLとMongoDBは考え方が違うのですが、MySQLのデータをcsv出力してMongoDB shellでインポートすると比較的簡単にデータを移行できます。
しかし、気をつけないといけないことがあります。
もし、日付などが文字列になっていたらextended json formatをISODate(“日付”)になるように変換が必要なようです。
mongodb document(ドキュメント)について
MongoDBを始めるにあたって参考になるサイトを紹介します。
MongoDBの公式サイト
インストーラーのダウンロードだけでなく、ライブラリ、ドライバ、サンプルソースの取得やMongoDBの学習もすることができます。
MongoDBの薄い本
無料でMongoDBに必要案知識を理解することができます。私も読みましたがとても分かりやすいと思います。
https://www.cuspy.org/diary/2012-04-17/the-little-mongodb-book-ja.pdf
まとめ
今回は、MongoDBの特徴や使い方について紹介しました。
世界的なデータベースの利用者が多いドキュメント指向NoSQLのMongoDBはスキーマレスでJSONのデータを使って動的スキーマが必要になるようなビックデータを処理する機械学習や、AI、ブロックチェーンのプログラムを設計するときに多く利用されるのが公になってきている気がします。しかも、MongoDB Shellは使い勝手が良いです。
でも、RDBMSとドキュメント指向NoSQLの両方ともメリットデメリットがあります。
ビックデータを使うとか、仕様変更が多い初期の開発時など設計する対象に合わせて、使い分けるスキルが必要になるのでしっかりと、データベース(db)の知識を習得するきっかけになれば幸いです。