7 mono Blog

京都でものづくりをしている人のブログ

MongoDBをインストールした体験談! MySQLとどう違う? 【使うメリットや、特徴、使いどころ、使い方をシェア】

この記事をシェアする


スポンサーリンク

MongoDBってどうなの? MySQLと比べて便利なの? MongoDBって簡単に使いだせるの?と感じたあなたにMongoDBの特徴と使い方をシェアします。

mongodb,インストール

 

 

今までは、オープンソースのデータベースといえば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があるのでチェックするのはどうでしょう。

docs.mongodb.com

9:OBJECT構造がJSONに近い

JSON形式のデータをほとんどの場合特別な処理せずにそのまま扱えます。

10:JavascriptのようにMongoDB Shellを使える

mongodb,shell

MongoDBはシェルがあるのでコマンドでMongoDBのカーネルの操作を行えます。
コマンドプロンプトでmongoと入力するとMongoDB shellが起動します。

他にも公式のMongoDB Javascript API のドキュメントがあります。

api.mongodb.com


ドキュメント指向NoSQLについて簡単に説明

事前にテーブルの構造を決めておく必要のないスキーマレスのデータベースです。
ドキュメントと呼ぶ一件分のデータがあり、データ構造が自由で、データ構造を変えることもできます。
メリットとしてはオブジェクトをそのまま保存しやすい


JSONについて簡単に説明

JSONは略語で元の語はJavaScript Object Notation です。
機械と人間の間でコマンドを通じて会話するためのデータの扱いのルールです。
JSONというデータフォーマットに沿ってMongoDBはドキュメント指向NoSQLを操作することができます。


MongoDBのインストールをしてみましょう

mongoDB,ダウンロード

私はWindows10を使用しているのでWindows10でMongoDBの使い方を紹介します。

ダウンロード

MongoDBの公式サイトでダウンロードして下さい

www.mongodb.com

 

自分が利用しているOS対応したのをDownloadしてください。

 

ダウンロードしたmsiのインストーラーをダブルクリックしてインストールをしましょう

基本はデフォルトのままで画面の指示に沿ってインストールします。

mondodb,インストール


Licenseに同意します。

mongodb,install,手順

 

 

Completeをインストールしました。

mongodb,complete



デフォルトのままで大丈夫です。 

install,mongodb




MongoDB Compassが必要ない人はチェックを外してください。

compass

 

後は画面の指示に沿ってインストールを進めればインストール完了です。

 

 

 

忘れてはならないのが環境変数にPATHを通してください。

mongodb,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の起動

mongodb,起動

コマンドプロンプトでMongoと入力するとMongoDBが起動します。


データベースを作成するコマンドの確認

mongodb,database

Use wankoDatabase (*wankoDatabaseはデータベースの任意の名前です。)

 

コレクションを作成するコマンドの確認

mongodb,createcollection

db.createCollection(“wankoCollection”) (ドキュメントの中にコレクションを作ります。)

データを追加するコマンドの確認

mongodb,insertone

 db.wankoCollection.insertOne({wanko: 1})


データを検索するコマンドの確認

mongodb,find

 db.TestCollection.find() (*検索するときはfindを使用します。)



終了するコマンドの確認

mongodb,exit,quit

 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
1 データベース RDBMS ドキュメント指向NoSQL
2 スキーマ スキーマ必要 スキーマレス
3 水平分散 水平分散が不可 水平分散が可能
4 データの整合性 データの整合性が高い データの整合性がRDBMSより劣る
5 得意なこと テーブル化できるデータの扱いが得意 ビッグデータや柔軟性がある設計が得意

 

MySQLとMongoDBを連携したいときの移行方法

一般的な使い方でないようですが、MySQLとMongoDBは考え方が違うのですが、MySQLのデータをcsv出力してMongoDB shellでインポートすると比較的簡単にデータを移行できます。
しかし、気をつけないといけないことがあります。
もし、日付などが文字列になっていたらextended json formatをISODate(“日付”)になるように変換が必要なようです。


mongodb document(ドキュメント)について

MongoDBを始めるにあたって参考になるサイトを紹介します。

MongoDBの公式サイト

インストーラーのダウンロードだけでなく、ライブラリ、ドライバ、サンプルソースの取得やMongoDBの学習もすることができます。

MongoDB Documentation

 

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)の知識を習得するきっかけになれば幸いです。