UTF8対応でつまづいた。
(ノ・・)ン。。。。。。(((●コロコロッ
---
RDBばかり長いことやってきたので、
それ以外のデータベースを扱うのは概念自体を勉強しなおさなければならなくて、
全然理解が追いついていない状況。
以下の記事は内容が間違っていることだらけだと思うが。
ご了承いただきたい。
---
fuelPHPを触っていたときにmongodbに対応していることに気がついた。
ということでちょっと触ってみることに。
NoSQLという概念があることは知ってはいたものの深く関わることはないだろうと思っていたのだが、
さわりもせずに物事を判断するのは一番やってはいけないことだと思い、
丁度良いタイミングで触れそうな機会があったのでやってみることにした。
ただ、アプリケーションサーバををJavaScript(Node.js)にするのはちょっと厳しそうなので、
そこはPHPのままでやることに。
- yumでmongodb, mongodb-devel, mongodb-serverをインストール
- jsをソースからビルドしてインストール
- libjs.so.1を置き換え
- /var/lib/mongdbディレクトリ作成
普通にyumでインストールするだけだと以下のようなエラーが出る。
MongoDB shell version: 1.6.4
Tue Dec 6 11:06:30 *** warning: spider monkey build without utf8 support. consider rebuilding with utf8 support
connecting to: test
以下の手順ではUTF8の対策も施している。
[More:]
●yumでmongodb, mongodb-devel, mongdb-serverをインストール
$ sudo yum install mongodb mongodb-devel mongdb-server
mongodb-develは必須ではないが、
PHPプログラマなら後は言わなくてもわかるよね。
●/var/lib/mongdbディレクトリ作成
monbodb-serverのパッケージではデフォルトの保存ディレクトリを作ってくれないので手動で作成する。
任意の場所にすることも可能だが、
/etc/mongodb.confを修正することを忘れずに。
$ sudo mkdir /var/lib/mongodb
$ sudo chown mongodb.mongodb /var/lib/mongodb
●jsをソースからビルドしてインストール
●libjs.so.1を置き換え
インストールは完了しているのだが、
単にyumでインストールすると上記のようにエラーが表示される。
これはjs-1.7のrpmパッケージがデフォルトでUTF8に対応していないからのようだ。
公式サイトでもそのことが明記されている。
http://www.mongodb.org/display/DOCS/Building+Spider+Monkey
ただ、debianパッケージでの記載なので、
この通りにやっても上手くいかない。
ここは少々手動でやる必要がある。
ダウンロードしたjsソースファイルを、
UTF8に対応させた状態でコンパイルし、
適当なディレクトリ/usr/local/jsにインストールする。
そのごlibjsを置き換える。
ソースファイルのダウンロード、展開
$ wget ftp://ftp.mozilla.org/pub/mozilla.org/js/js-1.7.0.tar.gz
$ tar xvfz js-1.7.0.tar.gz
$ cd js/src
ソースコードのビルド
$ export CFLAGS="-DJS_C_STRINGS_ARE_UTF8"
$ make -f Makefile.ref
$ sudo JS_DIST=/usr/local/js make -f Makefile.ref export
ファイル置き換え
$ sudo mv /usr/lib/libjs.so.1 /usr/lib/libjs.so.1_old
$ sudo mv /usr/local/js/lib/libjs.so /usr/lib/libjs.so.1
2012/01/10追記:
※64bitOSの場合はディレクトリ名をlib→lib64にする必要がある
実際使ってみたが、正直さっぱりわからない。
何となく出来上がったデータをそのまま突っ込んでいる印象なのだが、
これでちゃんと動くのかどうか?レスポンスに影響がないかどうか?など不明点だらけだ。
これで設計もせずにデータベースを構築するというのが全く理解できない状況。
とりあえずこのまま運用してみようと思う。
参考:
http://blog.mamemomonga.com/item/460