2010年9月16日

MongoDB を Windows で使ってみる

今後の Google WaveDiaspora で使われるそうなので MongoDB をインストールしてみます。 手順はとても簡単なので、時間があればいつでも、というレベルです。 Mac OSX や Ubuntu あるいは Fedora の場合はパッケージ管理ソフトのコマンドひとつでインストールできるようです。

今回やってみたのは次のことです。

  • Windows の 32-bit パッケージをダウンロードする。(64-bit パッケージもあります)
  • サーバが利用するデータ領域を準備する。
  • サーバを起動する。
  • クライアントからデータを操作してみる。

Quickstart が Mac OSX 用、Unix 用、Windows 用に用意されていますので、Windows 用のを読みながら実行してみます。

Windows の 32-bit パッケージをダウンロード

MongoDB のダウンロードページから mongodb-win32-i386-1.6.2.zip をダウンロードして展開します。 展開したら適当なフォルダに移動します。 中身を確認する (dir /b/s) と次のようになります。

C:\Users\shigeru\work\mongodb-win32-i386-1.6.2>dir /b/s
C:\Users\shigeru\work\mongodb-win32-i386-1.6.2\bin
C:\Users\shigeru\work\mongodb-win32-i386-1.6.2\GNU-AGPL-3.0
C:\Users\shigeru\work\mongodb-win32-i386-1.6.2\README
C:\Users\shigeru\work\mongodb-win32-i386-1.6.2\THIRD-PARTY-NOTICES
C:\Users\shigeru\work\mongodb-win32-i386-1.6.2\bin\bsondump.exe
C:\Users\shigeru\work\mongodb-win32-i386-1.6.2\bin\mongo.exe
C:\Users\shigeru\work\mongodb-win32-i386-1.6.2\bin\mongod.exe
C:\Users\shigeru\work\mongodb-win32-i386-1.6.2\bin\mongodump.exe
C:\Users\shigeru\work\mongodb-win32-i386-1.6.2\bin\mongoexport.exe
C:\Users\shigeru\work\mongodb-win32-i386-1.6.2\bin\mongofiles.exe
C:\Users\shigeru\work\mongodb-win32-i386-1.6.2\bin\mongoimport.exe
C:\Users\shigeru\work\mongodb-win32-i386-1.6.2\bin\mongorestore.exe
C:\Users\shigeru\work\mongodb-win32-i386-1.6.2\bin\mongos.exe
C:\Users\shigeru\work\mongodb-win32-i386-1.6.2\bin\mongostat.exe

結果が非常に読みにくいですが、bin/ ディレクトリ以下にいくつかの .exe があり、その簡単な説明が README に英語で記述されています。 mongod.exe がサーバで mongo.exe がクライアントです。

なお、mongodb-win32-i386-1.6.2 というディレクトリ名は長いので、mongo と名称を変更しておくと便利です、と Quickstart に書かれています。

サーバが利用するデータ領域を準備

次に、サーバがデータを保存するために利用するデータ領域を準備します。 デフォルトでは C:\data\db がデータ領域ですのでフォルダを作成します。コマンドプロンプトから操作してもエクスプローラーから操作しても構いません。

C:\>mkdir \data
C:\>mkdir \data\db

C ドライブ直下にディレクトリを作成するのは微妙な気はしますが、設定項目が増えてややこしくなるのも嫌なのでとりあえずこれで進むことにします。

サーバを起動

サーバを起動します。Windows サービスに設定できるようですが、後から考えることにします。データ領域の設定などもあるためです。 権限管理の問題などもありますので、今は何も考えずにコンソールから使えることを優先します。

サーバソフトウェアは zip を展開したフォルダの bin/ ディレクトリに存在しますので、コマンドプロンプトでそこへ移動して mongod.exe を実行します。

C:\Users\shigeru\work\mongodb-win32-i386-1.6.2\bin>mongod.exe
mongod.exe --help for help and startup options
Thu Sep 16 19:29:29 MongoDB starting : pid=4636 port=27017 dbpath=/data/db/ 32-bit

** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data

**       see http://blog.mongodb.org/post/137788967/32-bit-limitations

Thu Sep 16 19:29:29 db version v1.6.2, pdfile version 4.5
Thu Sep 16 19:29:29 git version: aef371ecf5d2a824f16ccdc3b745f3702165602f
Thu Sep 16 19:29:29 sys info: windows (5, 1, 2600, 2, 'Service Pack 3') BOOST_LIB_VERSION=1_35
Thu Sep 16 19:29:29 [initandlisten] waiting for connections on port 27017
Thu Sep 16 19:29:29 [websvr] web admin interface listening on port 28017

出力ログからプロセス ID は 4636、ポート番号は 27017、データ領域は /data/db であることが分かります。 また、32-bit 環境では 2GB までのデータしか扱えない、との注意書きも出力されています。

ログの最後の一行を見ると管理用 Web インターフェイスが 28017 番ポートで待ち受けているようです。 しかし、Web ブラウザで localhost:28017 にアクセスしてみると、次のメッセージのエラーが返されてしまいました。 ソースコードを取得して自分でコンパイルしたわけではありませんので、深追いしません。

error loading page: assertion db\stats\snapshots.cpp:40

クライアントからデータを操作

Quickstart にあるサンプルをそのまま実行します。mongo シェルは JavaScript を解析できるので普通の四則演算を実行できるようです。

C:\Users\shigeru\work\mongodb-win32-i386-1.6.2\bin>mongo.exe
MongoDB shell version: 1.6.2
connecting to: test
> 3+3
6
> db
test
> db.foo.insert( { a : 1 } )
> db.foo.find()
{ "_id" : ObjectId("4c91f27a1a3c00000000666e"), "a" : 1 }

サーバ側には次のようなログが出力されます。

Thu Sep 16 19:32:32 [initandlisten] connection accepted from 127.0.0.1:51211 #1
Thu Sep 16 19:33:30 [conn1] building new index on { _id: 1 } for test.foo
Thu Sep 16 19:33:30 [conn1] Buildindex test.foo idxNo:0 { name: "_id_", ns: "test.foo", key: { _id: 1 } }
Thu Sep 16 19:33:30 [conn1] done for 0 records 0.018secs

サーバを再起動して同じ操作を実行しても同様の結果を取得できました。 C:\data\db ディレクトリを見ると test.0test.ns ファイルが作成されていることを確認できます。

まとめ

MongoDB をインストールして使いました。 ドキュメントに記述されている通りに進めることができて拍子抜けするくらいです。ディプロイメントとドキュメントが十分に準備されている印象です。 データを保存するディレクトリの変更と Windows サービスとしての設定は行っていませんが、調べればきっと設定できるでしょう。

データの操作には付属のクライアントコンソールを使いましたが、チュートリアルのページを見ると、もう少したくさんのデータを扱う方法が説明されています。 また、MongoDB に関する多くのプログラミング言語ドライバが開発されていますので、独自のプログラム経由でデータを扱うことができそうです。なお、ドライバにはオフィシャルなものとコミュニティベースのものがあるようです。

とりあえずちょっと触ってみた、ということで。

コメントを投稿