何を今さらですがMongoDBを使うことにしました。というか、無理やり使おうとしないとこれからも機会がないんじゃないかと思って。
MongoDBは『NoSQL』の盛り上がりと同時に注目されたんですが、NoSQLの落ち着きとともに落ち着いてきたDB。
NoSQLはMongoDBじゃないといけないことはありません。
MongoDBはNoSQLデータベースです。『NoSQL』を最初に聞いたときは、『どうやって検索するの?』でしたが、ざっくり言えば、リレーショナルデータベース(RDB)とはちがう構成のデータベースのこと。
『レスポンスが速い』『テーブル結合しない』『機械学習(深層学習)などのAIと親和性が高い』などなど、興味をそそる話は聞いていましたが、あれから3年以上一度もさわることなく...
『いい加減ヤバいでしょ?』って思っちゃったんで、いまさらながらMongoDBデビューです。
MongoDBを使ってなかった理由は、MySQLでJSON型が導入されそれが発展してNoSQLに対応しているから。
(MariaDBでもNoSQLチックなものを導入している。)
(MongoDBと同じようなことができる。)
MongoDBはドキュメント指向データベースに分類。
データは自動発番のidとJSON型データのみを保存してjsonのキーで検索できる。
jsonの構成は自由なのでカラムの定義はない。(スキーマがない。)
RDBでいうスキーマがちがうレコードをコレクションにInsertできるのが特長。
(コレクションはRDBのテーブルにあたる。)
yumリポジトリ作成
早速、インストールを始めます。公式ドキュメントのとおりに進めます。
[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
yumのリポジトリファイルを作ります。最新版をインストールするにはこの方法がベスト。
(安定版バージョン4.2。2020年6月17日現在。)
ちなみに、rpmファイルを直接ダウンロードできます。個人的にはyumのほうがいいかな。 rpmを自分で取ってくるのは昔の方法って感じがするので。
バージョン番号について
MongoDBのバージョン番号は奇数が開発版、偶数番号が安定版です。
4.0 | 安定版 |
4.1 | 開発版 |
4.2 | 安定版 |
4.3 | 開発版 |
4.4 | 次期バージョン。 |
奇数番号をインストールしないように気をつけましょう。こういう番号の付け方は珍しいので。
インストール実行
一番かんたんなインストールコマンドはこれです。
sudo yum install -y mongodb-org
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.riken.jp
* epel: ftp.riken.jp
* extras: ftp.riken.jp
* updates: ftp.riken.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ mongodb-org.x86_64 0:4.2.8-1.el7 を インストール
--> 依存性の処理をしています: mongodb-org-mongos = 4.2.8 のパッケージ: mongodb-org-4.2.8-1.el7.x86_64
--> 依存性の処理をしています: mongodb-org-server = 4.2.8 のパッケージ: mongodb-org-4.2.8-1.el7.x86_64
--> 依存性の処理をしています: mongodb-org-shell = 4.2.8 のパッケージ: mongodb-org-4.2.8-1.el7.x86_64
--> 依存性の処理をしています: mongodb-org-tools = 4.2.8 のパッケージ: mongodb-org-4.2.8-1.el7.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ mongodb-org-mongos.x86_64 0:4.2.8-1.el7 を インストール
---> パッケージ mongodb-org-server.x86_64 0:4.2.8-1.el7 を インストール
---> パッケージ mongodb-org-shell.x86_64 0:4.2.8-1.el7 を インストール
---> パッケージ mongodb-org-tools.x86_64 0:4.2.8-1.el7 を インストール
--> 依存性解決を終了しました。
依存性を解決しました
=============================================================================================================================
Package アーキテクチャー バージョン リポジトリー 容量
=============================================================================================================================
インストール中:
mongodb-org x86_64 4.2.8-1.el7 mongodb-org-4.2 5.9 k
依存性関連でのインストールをします:
mongodb-org-mongos x86_64 4.2.8-1.el7 mongodb-org-4.2 15 M
mongodb-org-server x86_64 4.2.8-1.el7 mongodb-org-4.2 25 M
mongodb-org-shell x86_64 4.2.8-1.el7 mongodb-org-4.2 17 M
mongodb-org-tools x86_64 4.2.8-1.el7 mongodb-org-4.2 62 M
トランザクションの要約
=============================================================================================================================
インストール 1 パッケージ (+4 個の依存関係のパッケージ)
総ダウンロード容量: 119 M
インストール容量: 283 M
Downloading packages:
警告: /var/cache/yum/x86_64/7/mongodb-org-4.2/packages/mongodb-org-4.2.8-1.el7.x86_64.rpm: ヘッダー V3 RSA/SHA1 Signature、鍵 ID 058f8b6b: NOKEY
mongodb-org-4.2.8-1.el7.x86_64.rpm の公開鍵がインストールされていません
(1/5): mongodb-org-4.2.8-1.el7.x86_64.rpm | 5.9 kB 00:00:01
(2/5): mongodb-org-mongos-4.2.8-1.el7.x86_64.rpm | 15 MB 00:04:14
(3/5): mongodb-org-shell-4.2.8-1.el7.x86_64.rpm | 17 MB 00:04:17
(4/5): mongodb-org-server-4.2.8-1.el7.x86_64.rpm | 25 MB 00:09:31
(5/5): mongodb-org-tools-4.2.8-1.el7.x86_64.rpm | 62 MB 00:09:32
-----------------------------------------------------------------------------------------------------------------------------
合計 112 kB/s | 119 MB 00:18:04
https://www.mongodb.org/static/pgp/server-4.2.asc から鍵を取得中です。
Importing GPG key 0x058F8B6B:
Userid : "MongoDB 4.2 Release Signing Key <packaging@mongodb.com>"
Fingerprint: e162 f504 a20c df15 827f 718d 4b7c 549a 058f 8b6b
From : https://www.mongodb.org/static/pgp/server-4.2.asc
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : mongodb-org-mongos-4.2.8-1.el7.x86_64 1/5
インストール中 : mongodb-org-tools-4.2.8-1.el7.x86_64 2/5
インストール中 : mongodb-org-shell-4.2.8-1.el7.x86_64 3/5
インストール中 : mongodb-org-server-4.2.8-1.el7.x86_64 4/5
Created symlink from /etc/systemd/system/multi-user.target.wants/mongod.service to /usr/lib/systemd/system/mongod.service.
インストール中 : mongodb-org-4.2.8-1.el7.x86_64 5/5
検証中 : mongodb-org-server-4.2.8-1.el7.x86_64 1/5
検証中 : mongodb-org-4.2.8-1.el7.x86_64 2/5
検証中 : mongodb-org-shell-4.2.8-1.el7.x86_64 3/5
検証中 : mongodb-org-tools-4.2.8-1.el7.x86_64 4/5
検証中 : mongodb-org-mongos-4.2.8-1.el7.x86_64 5/5
インストール:
mongodb-org.x86_64 0:4.2.8-1.el7
依存性関連をインストールしました:
mongodb-org-mongos.x86_64 0:4.2.8-1.el7 mongodb-org-server.x86_64 0:4.2.8-1.el7 mongodb-org-shell.x86_64 0:4.2.8-1.el7
mongodb-org-tools.x86_64 0:4.2.8-1.el7
完了しました!
それぞれのソフトウェアに個別のバージョンを指定することもできますが、それは省略します。
MongoDBのシステム構成
MongoDBのシステムを構成するファイル・ディレクトリは3つです。
データディレクトリ | /var/lib/mongo |
ログディレクトリ | /var/log/mongodb |
設定ファイル | /etc/mongod.conf |
グループ | : | ユーザー |
---|---|---|
mongod | : | mongod |
yumでインストールすればデータディレクトリ・ログディレクトリまで作ってくれます。
rpmを自分でダウンロードしたときはこれらを手作業で作らないといけません。
(だからこのイントール方法は推奨しない。)
ちなみに、設定ファイルでデータディレクトリ・ログディレクトリは変更できます。
(接続ポート番号なども)
# mongod.conf
# (省略)
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# Where and how to store data.
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
# (省略)
net:
port: 27017
bindIp: 127.0.0.1 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
# (省略)
ほかにもデータディレクトリにいろいろなファイル・ディレクトリが作られる。
MongoDBの起動・停止など
システムの起動などはsystemdのいつものやつです。
sudo systemctl start mongod
sudo systemctl status mongod
● mongod.service - MongoDB Database Server
Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; vendor preset: disabled)
Active: active (running) since 水 2020-06-17 13:14:20 JST; 6s ago
Docs: https://docs.mongodb.org/manual
Process: 10325 ExecStart=/usr/bin/mongod $OPTIONS (code=exited, status=0/SUCCESS)
Process: 10322 ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb (code=exited, status=0/SUCCESS)
Process: 10320 ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb (code=exited, status=0/SUCCESS)
Process: 10318 ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb (code=exited, status=0/SUCCESS)
Main PID: 10328 (mongod)
CGroup: /system.slice/mongod.service
mq10328 /usr/bin/mongod -f /etc/mongod.conf
6月 17 13:14:19 *** systemd[1]: Starting MongoDB Database Server...
6月 17 13:14:19 *** mongod[10325]: about to fork child process, waiting until server is ready for connections.
6月 17 13:14:19 *** mongod[10325]: forked process: 10328
6月 17 13:14:20 *** mongod[10325]: child process started successfully, parent exiting
6月 17 13:14:20 *** systemd[1]: Started MongoDB Database Server.
OS起動時に自動起動するようにしておきましょう。
sudo systemctl enable mongod
シェル起動
MySQLのmysqlコマンドにあたるのがmongoコマンドです。
mongo
MongoDB shell version v4.2.8
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("7d713e73-9a0f-4059-aee1-d805eacb31b5") }
MongoDB server version: 4.2.8
Server has startup warnings:
2020-06-17T13:14:20.898+0900 I CONTROL [initandlisten]
2020-06-17T13:14:20.899+0900 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2020-06-17T13:14:20.899+0900 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2020-06-17T13:14:20.899+0900 I CONTROL [initandlisten]
2020-06-17T13:14:20.899+0900 I CONTROL [initandlisten]
2020-06-17T13:14:20.899+0900 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2020-06-17T13:14:20.899+0900 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2020-06-17T13:14:20.899+0900 I CONTROL [initandlisten]
2020-06-17T13:14:20.899+0900 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2020-06-17T13:14:20.899+0900 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2020-06-17T13:14:20.899+0900 I CONTROL [initandlisten]
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).
The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.
To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
>
'>' が出て各操作コマンドが実行できればOKです。ここでは、初期状態のDB一覧を見てみましょう。
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
>
3つのデータベースがあるようですね? さらに、どのようなコレクションがあるのか見てみましょう。
> use admin
switched to db admin
> show collections
system.version
> use config
switched to db config
> show collections
system.sessions
> use local
switched to db local
> show collections
startup_log
>
use ***はmysqlコマンドを使っている人は分かるでしょう。操作するデータベースの変更です。
ただし、MongoDBのちがうところは、存在しないデータベースでuseした場合、データベースを新規作成します。
MySQL | mongoDB |
---|---|
カレントDBの変更。 | カレントDBの変更。 データベース作成。 |
今回はここまで。そのあとはインストール後の最初の設定、データベース作成、コレクション作成などなど行います。