MongoDBをインストールするには

「7つのデータベース 7つの世界」第5章の学習のために、MongoDBをインストールします。

7つのデータベース 7つの世界

  • PotgreSQL
  • Riak
  • HBase
  • MongoDB
  • CouchDB
  • Neo4j
  • Redis
MongoDB Documentation

原著の発行は 2012/5/21 で、書籍で使ったMongoDBのバージョンは 1.6.2 です。(156ページの脚注、157ページのmongo shell起動メッセージより)

最新バージョンは 4.2.6 です。

Riak、HBaseのインストールは大変だったけど、
MongoDBのインストールは簡単だったよ

書籍中のコードが動くといいわね

インストール

Windows 10

Install MongoDB Community Edition on Windows — MongoDB Manual

ダウンロードページを表示して、
OS=Windows x64
Package=MSI
を選択して、ダウンロードしてください。

ダウンロードしたmsiファイルを開きます。

「I accept ...」にチェックを付けます。

Completeボタンをクリックします。

「Install MongoD as a Service」にチェックを付けます。mongodが自動起動サービスとして登録されます。

「Install MongoDB Compass」のチェックをはずします。チェックをつけてインストールしてもいいのですが、Compassのインストールに時間がかかります。

途中「FireFoxを終了してください」と表示されたので、FireFoxを終了しました。

インストールされた場所は、"C:\Program Files\MongoDB\Server\4.2\bin" でした。バージョンは4.2.6です。

> "C:\Program Files\MongoDB\Server\4.2\bin\mongo" --version MongoDB shell version v4.2.6 git version: 20364840b8f1af16917e4c23c1b5f5efd8b352f8 allocator: tcmalloc modules: none build environment: distmod: 2012plus distarch: x86_64 target_arch: x86_64 > "C:\Program Files\MongoDB\Server\4.2\bin\mongod" --version db version v4.2.6 git version: 20364840b8f1af16917e4c23c1b5f5efd8b352f8 allocator: tcmalloc modules: none build environment: distmod: 2012plus distarch: x86_64 target_arch: x86_64

MongoDBサービススタート(コマンドプロンプトを管理者として実行)

> sc start MongoDB

MongoDBサービスストップ(コマンドプロンプトを管理者として実行)

> sc stop MongoDB

設定ファイルは、"C:\Program Files\MongoDB\Server\4.2\bin\mongod.cfg" です。拡張子は conf ではなく cfg です。

> type "C:\Program Files\MongoDB\Server\4.2\bin\mongod.cfg" # mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # Where and how to store data. storage: dbPath: C:\Program Files\MongoDB\Server\4.2\data journal: enabled: true # engine: # mmapv1: # wiredTiger: # where to write logging data. systemLog: destination: file logAppend: true path: C:\Program Files\MongoDB\Server\4.2\log\mongod.log # network interfaces net: port: 27017 bindIp: 127.0.0.1 #processManagement: #security: #operationProfiling: #replication: #sharding: ## Enterprise-Only Options: #auditLog: #snmp:

データの場所は、"C:\Program Files\MongoDB\Server\4.2\data" です。

> dir "C:\Program Files\MongoDB\Server\4.2\data" ドライブ C のボリューム ラベルは Windows です ボリューム シリアル番号は B68A-30EF です C:\Program Files\MongoDB\Server\4.2\data のディレクトリ 2020/05/08 11:59 <DIR> . 2020/05/08 11:59 <DIR> .. 2020/05/08 11:14 20,480 collection-0-3108540780963219096.wt 2020/05/08 11:15 36,864 collection-2-3108540780963219096.wt 2020/05/08 11:56 24,576 collection-4-3108540780963219096.wt 2020/05/08 12:00 <DIR> diagnostic.data 2020/05/08 11:14 20,480 index-1-3108540780963219096.wt 2020/05/08 11:15 36,864 index-3-3108540780963219096.wt 2020/05/08 11:56 24,576 index-5-3108540780963219096.wt 2020/05/08 11:58 12,288 index-6-3108540780963219096.wt 2020/05/08 11:14 <DIR> journal 2020/05/08 11:14 6 mongod.lock 2020/05/08 11:57 36,864 sizeStorer.wt 2020/05/08 11:11 114 storage.bson 2020/05/08 11:11 46 WiredTiger 2020/05/08 11:11 21 WiredTiger.lock 2020/05/08 11:59 1,250 WiredTiger.turtle 2020/05/08 11:59 61,440 WiredTiger.wt 2020/05/08 11:14 4,096 WiredTigerLAS.wt 2020/05/08 11:14 20,480 _mdb_catalog.wt 16 個のファイル 300,445 バイト 4 個のディレクトリ 143,801,733,120 バイトの空き領域

環境変数Path

ユーザー環境変数Pathに「C:\Program Files\MongoDB\Server\4.2\bin」を挿入しておくと、mongoだけで実行できます。

(1)検索バーで「システム環境変数」を検索して、「システム環境変数の編集」を起動します。「環境変数」ボタンをクリックします。

(2)環境変数ダイアログが表示されます。「Path」を選択して、「編集」ボタンをクリックします。

(3)ユーザー変数の編集ダイアログが表示されます。編集前の値をコピペして、テキストエディタで保存しておきます。

編集前の値の先頭に「C:\Program Files\MongoDB\Server\4.2\bin;」を挿入します。binの後ろにセミコロンをつけてください。

PathPathの値
編集前の例%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;
編集後の例C:\Program Files\MongoDB\Server\4.2\bin;%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;

コマンドプロンプトを閉じて、再度コマンドプロンプトを開いて、mongo --versionを実行してみてください。

> mongo --version MongoDB shell version v4.2.6 git version: 20364840b8f1af16917e4c23c1b5f5efd8b352f8 allocator: tcmalloc modules: none build environment: distmod: 2012plus distarch: x86_64 target_arch: x86_64

Mac OS X

Install MongoDB Community Edition on macOS — MongoDB Manual

Homebrew でインストールできます。パッケージ名は「mongodb-community@4.2」です。

$ brew tap mongodb/brew $ brew install mongodb-community@4.2

バージョンは、4.2.6でした。

$ mongo --version MongoDB shell version v4.2.6 git version: 20364840b8f1af16917e4c23c1b5f5efd8b352f8 allocator: system modules: none build environment: distarch: x86_64 target_arch: x86_64 $ mongod --version db version v4.2.6 git version: 20364840b8f1af16917e4c23c1b5f5efd8b352f8 allocator: system modules: none build environment: distarch: x86_64 target_arch: x86_64

mongodスタート

$ brew services start mongodb-community@4.2

mongodストップ

$ brew services stop mongodb-community@4.2

設定ファイルは、/usr/local/etc/mongod.conf です。

$ cat /usr/local/etc/mongod.conf systemLog: destination: file path: /usr/local/var/log/mongodb/mongo.log logAppend: true storage: dbPath: /usr/local/var/mongodb net: bindIp: 127.0.0.1

データの場所は、/usr/local/var/mongodb/ です。

$ ls -al /usr/local/var/mongodb/ total 648 drwxr-xr-x 22 aoki.makoto admin 704 5 7 19:03 . drwxrwxr-x 11 aoki.makoto admin 352 5 7 18:53 .. -rw------- 1 aoki.makoto admin 46 5 7 18:54 WiredTiger -rw------- 1 aoki.makoto admin 21 5 7 18:54 WiredTiger.lock -rw------- 1 aoki.makoto admin 1249 5 7 19:03 WiredTiger.turtle -rw------- 1 aoki.makoto admin 61440 5 7 19:03 WiredTiger.wt -rw------- 1 aoki.makoto admin 4096 5 7 19:03 WiredTigerLAS.wt -rw------- 1 aoki.makoto admin 36864 5 7 19:03 _mdb_catalog.wt -rw------- 1 aoki.makoto admin 20480 5 7 19:03 collection-0--54388837473210117.wt -rw------- 1 aoki.makoto admin 20480 5 7 19:03 collection-0-1944324710744862371.wt -rw------- 1 aoki.makoto admin 36864 5 7 19:03 collection-2--54388837473210117.wt -rw------- 1 aoki.makoto admin 4096 5 7 18:56 collection-4--54388837473210117.wt drwx------ 4 aoki.makoto admin 128 5 7 19:03 diagnostic.data -rw------- 1 aoki.makoto admin 20480 5 7 19:03 index-1--54388837473210117.wt -rw------- 1 aoki.makoto admin 20480 5 7 19:03 index-1-1944324710744862371.wt -rw------- 1 aoki.makoto admin 36864 5 7 19:03 index-3--54388837473210117.wt -rw------- 1 aoki.makoto admin 4096 5 7 19:03 index-5--54388837473210117.wt -rw------- 1 aoki.makoto admin 12288 5 7 19:03 index-6--54388837473210117.wt drwx------ 5 aoki.makoto admin 160 5 7 18:56 journal -rw------- 1 aoki.makoto admin 0 5 7 19:03 mongod.lock -rw------- 1 aoki.makoto admin 36864 5 7 19:03 sizeStorer.wt -rw------- 1 aoki.makoto admin 114 5 7 18:54 storage.bson

各コマンドの本体は、/usr/local/Cellar/mongodb-community/4.2.6/bin/ にありました。

$ which mongo /usr/local/bin/mongo $ ls -al /usr/local/bin/mongo lrwxr-xr-x 1 aoki.makoto admin 43 5 7 18:53 /usr/local/bin/mongo -> ../Cellar/mongodb-community/4.2.6/bin/mongo $ ls -al /usr/local/Cellar/mongodb-community/4.2.6/bin total 626544 drwxr-xr-x 15 aoki.makoto admin 480 5 7 18:53 . drwxr-xr-x 11 aoki.makoto admin 352 5 7 18:53 .. -r-xr-xr-x 1 aoki.makoto admin 13190252 4 17 12:11 bsondump -r-xr-xr-x 1 aoki.makoto admin 7693 4 17 12:26 install_compass -r-xr-xr-x 1 aoki.makoto admin 47455304 4 17 12:16 mongo -r-xr-xr-x 1 aoki.makoto admin 74424388 4 17 12:26 mongod -r-xr-xr-x 1 aoki.makoto admin 18668452 4 17 12:11 mongodump -r-xr-xr-x 1 aoki.makoto admin 18359580 4 17 12:11 mongoexport -r-xr-xr-x 1 aoki.makoto admin 18325828 4 17 12:11 mongofiles -r-xr-xr-x 1 aoki.makoto admin 18563020 4 17 12:11 mongoimport -r-xr-xr-x 1 aoki.makoto admin 17630172 4 17 12:11 mongoreplay -r-xr-xr-x 1 aoki.makoto admin 19036460 4 17 12:11 mongorestore -r-xr-xr-x 1 aoki.makoto admin 39291660 4 17 12:20 mongos -r-xr-xr-x 1 aoki.makoto admin 18096140 4 17 12:11 mongostat -r-xr-xr-x 1 aoki.makoto admin 17715188 4 17 12:11 mongotop

Ubuntu 18.04

Install MongoDB Community Edition on macOS — MongoDB Manual

MongoDBのGPGキーをインポートします。

$ wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -

MongoDBのapt listを作成します。

$ echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list $ sudo apt update

「mongodb-org」をインストールします。

$ sudo apt install mongodb-org
Package NameDescription
mongodb-org以下のパッケージをインストールします。
mongodb-org-servermongod
mongodb-org-mongosmongos
mongodb-org-shellmongo
mongodb-org-toolsmongodump
bsondump
mongoimport
mongoexport
mongostat
mongotop
mongofiles
install_compass

バージョンは、4.2.6でした。

$ which mongo /usr/bin/mongo $ mongo --version MongoDB shell version v4.2.6 git version: 20364840b8f1af16917e4c23c1b5f5efd8b352f8 OpenSSL version: OpenSSL 1.1.1 11 Sep 2018 allocator: tcmalloc modules: none build environment: distmod: ubuntu1804 distarch: x86_64 target_arch: x86_64 $ mongod --version db version v4.2.6 git version: 20364840b8f1af16917e4c23c1b5f5efd8b352f8 OpenSSL version: OpenSSL 1.1.1 11 Sep 2018 allocator: tcmalloc modules: none build environment: distmod: ubuntu1804 distarch: x86_64 target_arch: x86_64

スタート

$ sudo systemctl daemon-reload $ sudo service mongod start

ストップ

$ sudo service mongod stop

設定ファイルは、/etc/mongod.conf です。

$ cat /etc/mongod.conf # mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # Where and how to store data. storage: dbPath: /var/lib/mongodb journal: enabled: true # engine: # mmapv1: # wiredTiger: # where to write logging data. systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log # network interfaces net: port: 27017 bindIp: 127.0.0.1 # how the process runs processManagement: timeZoneInfo: /usr/share/zoneinfo #security: #operationProfiling: #replication: #sharding: ## Enterprise-Only Options: #auditLog: #snmp:

データの場所は、/var/lib/mongodb/ です。

$ ls -al /var/lib/mongodb/ 合計 280 drwxr-xr-x 4 mongodb mongodb 4096 5月 7 20:02 . drwxr-xr-x 77 root root 4096 5月 7 20:01 .. -rw------- 1 mongodb mongodb 46 5月 7 20:01 WiredTiger -rw------- 1 mongodb mongodb 21 5月 7 20:01 WiredTiger.lock -rw------- 1 mongodb mongodb 1246 5月 7 20:02 WiredTiger.turtle -rw------- 1 mongodb mongodb 61440 5月 7 20:02 WiredTiger.wt -rw------- 1 mongodb mongodb 4096 5月 7 20:02 WiredTigerLAS.wt -rw------- 1 mongodb mongodb 20480 5月 7 20:02 _mdb_catalog.wt -rw------- 1 mongodb mongodb 20480 5月 7 20:02 collection-0--1106797949873816583.wt -rw------- 1 mongodb mongodb 36864 5月 7 20:02 collection-2--1106797949873816583.wt -rw------- 1 mongodb mongodb 4096 5月 7 20:01 collection-4--1106797949873816583.wt drwx------ 2 mongodb mongodb 4096 5月 7 20:02 diagnostic.data -rw------- 1 mongodb mongodb 20480 5月 7 20:02 index-1--1106797949873816583.wt -rw------- 1 mongodb mongodb 36864 5月 7 20:02 index-3--1106797949873816583.wt -rw------- 1 mongodb mongodb 4096 5月 7 20:01 index-5--1106797949873816583.wt -rw------- 1 mongodb mongodb 8192 5月 7 20:01 index-6--1106797949873816583.wt drwx------ 2 mongodb mongodb 4096 5月 7 20:01 journal -rw------- 1 mongodb mongodb 0 5月 7 20:02 mongod.lock -rw------- 1 mongodb mongodb 36864 5月 7 20:02 sizeStorer.wt -rw------- 1 mongodb mongodb 114 5月 7 20:01 storage.bson

書籍内のコードについて

p144 explain()の結果

explainの結果が全く違うんだけど...

バージョンによって違うのはしょうがないわね

書籍の、index作成前のexplainは

{ "cursor": "BasicCurosr", "nscanned", 109999, "millis", 52,

書籍の、index作成後のexplainは

{ "cursor": "BtreeCurosr display_1", "nscanned", 1, "millis", 0,

4.2.6での、index作成前のexplainは

{ "queryPlanner": { "winningPlan": { "stage": "COLLSCAN", "filter": { "display": { "$eq": "+5 800-5649999"

4.2.6での、index作成後のexplainは

{ "queryPlanner": { "winningPlan": { "stage": "FETCH", "inputStage": { "stage": "IXSCAN", "keyPattern": { "display": 1 }, "indexName": "display_1", "isMultiKey": false, "multiKeyPaths": { "display": [] }, "isUnique": true, "isSparse": false, "isPartial": false, "indexVersion": 2, "direction": "forward", "indexBounds": { "display": [ "[\"+5 800-5649999\", \"+5 800-5649999\"]" ] } }

4.2.6でのexplain結果はフィールド構成から違います。

調べると、MongoDB 3.0 で、explain()のフォーマットが変更されました。

(Google翻訳)
クエリプランナーがコレクションスキャンを選択した場合、Explain結果にはCOLLSCANステージが含まれます。

クエリプランナーがインデックスを選択した場合、Explain結果にはIXSCANステージが含まれ ます。ステージには、インデックスキーパターン、走査方向、インデックス境界などの情報が含まれます。

Explain Results, 3.0 Format Change

3.0以降は、コレクションスキャンの場合、"stage": "COLLSCAN"、インデックススキャンの場合、"stage": "IXSCAN" と表示されるようになりました。

4.2.6のexplain結果はどう見ればいいのかな

それをふまえて見ると、4.2.6のindex作成前のexplain結果には「"stage": "COLLSCAN"」がありますね。インデックスを使わない、コレクションスキャンをしています。

4.2.6のindex作成後のexplain結果には「"stage": "IXSCAN"」と「"indexName": "display_1"」とあります。インデックス display_1 を使ったインデックススキャンをしています。

p146 db.collections.group()

4.2.6には、group()はありませんでした。代わりに、aggregate()を使います。

db.collection.aggregate() — MongoDB Manual
Aggregation Pipeline Stages — MongoDB Manual

p147の1つめの例

db.phones.group({ initial: { count: 0 }, reduce: function (phone, output) { coutput.count += 1; }, cond: { 'components.number': { $gt: 5599999 } }, key: { 'components.area': true } })

aggregateを使った例

db.phones.aggregate([ { $match: { 'components.number': { $gt: 5599999 } } }, { $group: { _id: '$components.area', count: { $sum: 1 } } } ]) { "_id" : 800, "count" : 50000 } { "_id" : 855, "count" : 50000 }

p147の2つめの例

db.phones.group({ initial: { count: 0 }, reduce: function (phone, output) { coutput.count += 1; }, cond: { 'components.number': { $gt: 5599999 } } })

aggregateを使った例

db.phones.aggregate([ { $match: { 'components.number': { $gt: 5599999 } } }, { $group: { _id: null, count: { $sum: 1 } } } ]) { "_id" : null, "count" : 100000 }

p148 サーバーサイドコマンド

4.2以降、db.eval()関数はなくなりました。

version 4.2からevalコマンドを削除しました。

https://docs.mongodb.com/manual/reference/method/db.eval/

p149 db.phones.countのjsソースは、4.2.6では大きく変わっていて、db.phones.find().count を呼んでいませんでした。

> db.phones.count function(query, options) { query = this.find(query); // Apply options and return the result of the find return QueryHelpers._applyCountOptions(query, options).count(true); }

p150では、db.system.js.save()を呼んでいますが、4.2.6では、db.sysdb.phones.find().countのjsソースも違っています。います。からはrunCommnadを呼んでいませんでした。

p155 レプリカセット

mongod起動時のrestオプションは3.6で廃止されました。

MongoDB 3.6 removes the deprecated HTTP interface and REST API to MongoDB.

Configuration(/etc/mongo.conf)
net.http.enabled
net.http.JSONPEnabled
net.http.port
net.http.RESTInterfaceEnabled

mongod/mongos option
httpinterface
nohttpinterface
jsonp
rest

Compatibility Changes in MongoDB 3.6

p158 シャーディング

シャーディングサーバ、コンフィグサーバ、どちらもレプリカセットの必要があります。幸いにも、1台だけのレプリカセットを設定できます。

ターミナル1

$ mongod --shardsvr --replSet shard1 --dbpath ./mongo4 --port 27014

ターミナル2

$ mongod localhost:27014 > rs.initiate()

ターミナル3

$ mongod --shardsvr --replSet shard1 --dbpath ./mongo5 --port 27015

ターミナル4

$ mongod localhost:27015 > rs.initiate()

ターミナル5

$ mongod --configsvr --replSet config --dbpath ./mongoconfig --port 27016

ターミナル6

$ mongod localhost:27016 > rs.initiate()

ターミナル7

$ mongos --configdb config/localhost:27016 --port 27020

ターミナル8

$ mongo localhost:27020/admin > sh.addShard("shard1/localhost:27014") > sh.addShard("shard2/localhost:27015") > sh.enableSharding("test") > sh.shardCollection("test.cities", {name: 1}) > exit $ mongo localhost:27020/test mongo_cities1000.js

デフォルトchunksizeは64Mで、64Mバイトを超えるデータを挿入すると、複数のシャードに分けて保存するようです。残念ながら、mongo_cities1000.js は、12Mバイトで、複数シャードには分かれませんでした。

参考記事

MongoDB Shardingを簡単に体験してみる - Qiita
概要 ShardingはShardキーの値によってデータを格納するShardを決定して分散化を図ります。 以下のURLに古い資料ですが、日立がShardingの性能評価をした資料(PDF)があります。参考にしてください。 ht...
タイトルとURLをコピーしました