MongoDB という名前は、Humongo に由来しています。
オープンソースの NoSQL データベースです。 MongoDB は 10gen 社によって開発され、商業的にサポートされています。
MongoDB の焦点は、スケーラビリティとパフォーマンスにあります。 MongoDB は、スキーマのないドキュメント指向のデータベースです。これにより、データが JSON オブジェクトとして保存されます。従来の SQL データベースとは異なり、スキーマを定義する必要はありません。スキーマはデータ ドキュメント自体に埋め込まれているため、ロードされた以前のドキュメントを変更することを心配することなく、いつでも簡単にスキーマを変更できます。結合がなく、MongoDB で複数ドキュメントのトランザクションが実行されないため、高いパフォーマンスとスケーラビリティが可能です。これにより、自動的にフェイルオーバーする機能を備えたサーバー間でのレプリケーションも提供されます。また、高可用性のためにサーバー間でスケーリングすることもできます。
この記事は、MongoDB に関する一連の記事の第 1 部です。
YUM を使用して MongoDB をインストールする
yum を使用した MongoDB のインストールは非常に簡単です。
10gen Yum リポジトリのセットアップ
まず、以下に示すように 10gen リポジトリを yum に追加します。
# vi /etc/yum.repos.d/10gen.repo [10gen] name=10gen Repository baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64 gpgcheck=0 enabled=1
注:上記は 64 ビット システム用です。 32 ビット システムを使用している場合は、上記のファイルの baseurl を http://downloads-distro.mongodb.org/repo/redhat/os/i686 に指定してください
ここで、「yum info」を実行して、mongo-10gen および mongo-10gen-server パッケージを表示します。
# yum info mongo-10gen Name : mongo-10gen Arch : x86_64 Version : 2.2.2 Release : mongodb_1 Size : 43 M Repo : 10gen Summary : mongo client shell and tools URL : http://www.mongodb.org License : AGPL 3.0 # yum info mongo-10gen-server Name : mongo-10gen-server Arch : x86_64 Version : 2.2.2 Release : mongodb_1 Size : 6.7 M Repo : 10gen Summary : mongo server, sharding server, and support scripts URL : http://www.mongodb.org License : AGPL 3.0
Mongo クライアントとサーバー パッケージをインストールする
以下に示すように、これら 2 つの mongo-* パッケージをインストールします。
# yum install mongo-10gen mongo-10gen-server Installing : mongo-10gen-2.2.2-mongodb_1.x86_64 Installing : mongo-10gen-server-2.2.2-mongodb_1.x86_64
mongod.conf ファイルを確認する
これにより、デフォルトの /etc/mongod.conf ファイルと起動スクリプト /etc/rc.d/init.d/mongod もインストールされます
/etc/mongod.conf ファイルには、次のデフォルト値が含まれています。ここでわかるように、mongo データベース ファイルは /var/lib/mongo ディレクトリの下に作成されます。 DB ファイルを別のディレクトリに作成する場合は、mongod.conf ファイルの dbpath ディレクトリを変更してください。
# cat /etc/mongod.conf logpath=/var/log/mongo/mongod.log logappend=true fork = true dbpath=/var/lib/mongo pidfilepath = /var/run/mongodb/mongod.pid
MongoDB サーバーを起動
以下に示すように、mongod サービスを開始します。
# service mongod start Starting mongod: forked process: 15968 all output going to: /var/log/mongo/mongod.log child process started successfully, parent exiting
ログ ファイルを表示して、MongoDB が正常に起動したことを確認します。デフォルトでは、MongoDB サーバーはポート 27017 で実行されます。
# cat /var/log/mongo/mongod.log Sat Jan 19 10:57:03 [initandlisten] MongoDB starting : pid=15968 port=27017 dbpath=/var/lib/mongo 64-bit host=centos Sat Jan 19 10:57:03 [initandlisten] db version v2.2.2, pdfile version 4.5 Sat Jan 19 10:57:03 [initandlisten] git version: d1b43b61a5308c4ad0679d34b262c5af9d664267 Sat Jan 19 10:57:03 [initandlisten] build info: Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_49 Sat Jan 19 10:57:03 [initandlisten] options: { config: "/etc/mongod.conf", dbpath: "/var/lib/mongo", fork: "true", logappend: "true", logpath: "/var/log/mongo/mongod.log", pidfilepath: "/var/run/mongodb/mongod.pid" } Sat Jan 19 10:57:03 [initandlisten] journal dir=/var/lib/mongo/journal Sat Jan 19 10:57:03 [initandlisten] recover : no journal files present, no recovery needed Sat Jan 19 10:57:03 [websvr] admin web console waiting for connections on port 28017 Sat Jan 19 10:57:03 [initandlisten] waiting for connections on port 27017
Mongo Shell を使用して MongoDB に接続する
「mongo」と入力して mongo シェルを起動し、MongoDB に接続してデータベース操作を実行します。これにより、mongo クライアント コマンドを入力できる「>」プロンプトが表示されます。
# mongo MongoDB shell version: 2.2.2 connecting to: test Welcome to the MongoDB shell. >
次のコマンドは、"sites" という名前の MongoDB コレクションにサンプル ドキュメントを挿入します。これは、「INSERT into」SQL コマンドに似ています。
> doc1 = { name : "ramesh" }; > db.sites.insert( doc1 );
以下は、MongoDB の「sites」コレクション内のすべてのドキュメントを表示します。これは、「SELECT * from」SQL コマンドに似ています。
> db.sites.find() { "_id" : ObjectId("50f72809a8e3c7a3aba2bf15"), "name" : "ramesh" }
MongoDB をソースからインストール
ソースから MongoDB をインストールする場合は、以下の手順に従ってください。
前提条件のインストール
gcc-c++ と glibc-devel パッケージが既にインストールされていることを確認してください。 MongoDB は scons を使用してソースコードをビルドします。そのため、scons パッケージが既にインストールされていることを確認してください。
# rpm -qa | egrep 'gcc-c++|glibc-devel|scons' gcc-c++-4.4.6-4.el6.x86_64 glibc-devel-2.12-1.80.el6_3.6.x86_64 scons-2.0.1-1.el6.noarch
これらの前提条件がない場合は、インストールしてください。
# yum install gcc-c++ glibc-devel scons
MongoDB をダウンロード
MongoDB ダウンロード ページに移動し、ソース コードをダウンロードします。 MongoDB の現在の安定バージョンは 2.2.2 です。
ダウンロード リンクを取得したら、wget を使用してソース コードを直接ダウンロードすることもできます。
cd /usr/src wget http://downloads.mongodb.org/src/mongodb-src-r2.2.2.tar.gz tar xvfz mongodb-src-r2.2.2.tar.gz cd mongodb-src-r2.2.2
Scons を使用して MongoDB を構築する
Scons は make に似ています。ソースから MongoDB をビルドするには、「scons all」と入力します。
「scons all」を実行すると、CPU が 1 つしか使用されず、一度に 1 つのジョブしか実行されず、ソース コードがビルドされないことに注意してください。だから、それは遅くなります。 scons にすべての CPU を使用させ、ビルド中に複数のジョブを実行させたい場合は、実行するジョブの数を指定する必要があります。
私のシステムには、8 つのコアがあります。そこで、以下のように「scons -j 8 all」を実行してビルドしました。
# scons -j 8 all scons: Reading SConscript files ... scons version: 2.0.1 python version: 2 6 6 'final' 0 Checking whether the C++ compiler works(cached) yes Checking for C header file unistd.h... (cached) yes Checking whether clock_gettime is declared... (cached) yes Checking for C library rt... (cached) yes Checking for C++ header file execinfo.h... (cached) yes Checking whether backtrace is declared... (cached) yes Checking whether backtrace_symbols is declared... (cached) yes Checking for C library pcap... (cached) no Checking for C library wpcap... (cached) no Checking if __malloc_hook is declared volatile... (cached) no scons: done reading SConscript files. .. Install file: "build/linux2/normal/mongo/test" as "test" scons: done building targets.
ソースコードをビルドしたら、それをインストールする必要があります。 「scons install」を使用して MongoDB をインストールします。デフォルトでは、/usr/local/bin にインストールされます。別のディレクトリに MongoDB をインストールする場合は、「–prefix」オプションを使用してください。
/opt/mongo ディレクトリに MongoDB をインストールするには、次の scons コマンドを実行します。
# scons --prefix=/opt/mongo install
以下に示すように、/opt/mongo ディレクトリに MongoDB がインストールされています。
# ls -l /opt/mongo/ total 12 drwxr-xr-x. 2 root root 4096 Jan 19 13:33 bin drwxr-xr-x. 3 root root 4096 Jan 19 13:33 include drwxr-xr-x. 2 root root 4096 Jan 19 13:33 lib
/etc/mongod.conf ファイルを作成
起動時に MongoDB サーバーによって使用される次の構成ファイルを作成します。
# cat /etc/mongod.conf logpath=/var/log/mongo/mongod.log logappend=true fork = true dbpath=/var/lib/mongo pidfilepath = /var/run/mongodb/mongod.pid
上記のファイルの dbpath パラメータは、MongoDB データベースを起動すると、必要なデータベースが /var/lib/mongo ディレクトリの下に作成されることを示しています。このパスは適宜変更できます。
dbpath によって参照されるディレクトリを作成します。
# mkdir -p /var/lib/mongo
MongoDB デーモンを起動
/opt/mongo/bin/ を PATH 変数に追加します。
# export $PATH=$PATH:/opt/mongo/bin/
以下に示すように、-f オプションを使用して構成ファイルの場所を渡すことにより、mongodb を開始します。
# mongod -f /etc/mongod.conf forked process: 20127 all output going to: /var/log/mongo/mongod.log child process started successfully, parent exiting
引数なしで「mongod」を使用すると、フォアグラウンドでプロセスが開始されます。ターミナルを閉じると、MongoDB サーバーも停止します。そのため、上記のように -f オプションを指定して mongod を実行してください。
ログ ファイルを調べて、正しく開始されたことを確認します。デフォルトでは、MongoDB サーバーはポート 27017 で実行されます。
# cat /var/log/mongo/mongod.log Sat Jan 19 13:48:44 [initandlisten] MongoDB starting : pid=20127 port=27017 dbpath=/var/lib/mongo 64-bit host=centos Sat Jan 19 13:48:44 [initandlisten] db version v2.2.2, pdfile version 4.5 Sat Jan 19 13:48:44 [initandlisten] git version: nogitversion Sat Jan 19 13:48:44 [initandlisten] build info: Linux centos 2.6.32-279.19.1.el6.x86_64 #1 SMP Wed Dec 19 07:05:20 UTC 2012 x86_64 BOOST_LIB_VERSION=1_49 Sat Jan 19 13:48:44 [initandlisten] options: { config: "/etc/mongod.conf", dbpath: "/var/lib/mongo", fork: "true", logappend: "true", logpath: "/var/log/mongo/mongod.log", pidfilepath: "/var/run/mongodb/mongod.pid" } Sat Jan 19 13:48:44 [initandlisten] journal dir=/var/lib/mongo/journal Sat Jan 19 13:48:44 [initandlisten] recover : no journal files present, no recovery needed Sat Jan 19 13:48:44 [websvr] admin web console waiting for connections on port 28017 Sat Jan 19 13:48:44 [initandlisten] waiting for connections on port 27017
Mongo Shell を使用して MongoDB に接続する
「mongo」と入力して mongo シェルを起動し、MongoDB に接続してデータベース操作を実行します。これにより、mongo クライアント コマンドを入力できる「>」プロンプトが表示されます。
# mongo MongoDB shell version: 2.2.2 connecting to: test Welcome to the MongoDB shell. >
次のコマンドは、"sites" という名前の MongoDB コレクションにサンプル ドキュメントを挿入します。これは、「INSERT into」SQL コマンドに似ています。
> doc1 = { name : "ramesh" }; > db.sites.insert( doc1 );
以下は、MongoDB の「sites」コレクション内のすべてのドキュメントを表示します。これは、「SELECT * from」SQL コマンドに似ています。
> db.sites.find() { "_id" : ObjectId("50f72809a8e3c7a3aba2bf15"), "name" : "ramesh" }
このシリーズの次の記事では、いくつかの MongoDB コマンドについて例を挙げて説明します。