the-little-mongodb-book/jaを読んだよ 5,7
GitHub - ma2/the-little-mongodb-book: The Little MongoDB Bookを読んだメモ。
the-little-mongodb-book/jaを読んだよ 3〜4まで - 四角革命前夜の続き。
環境:Ubuntu 10.04.3 LTS 64bit / MongoDB 2.0.4 64bit
MongoDBを使うのはどのような場合か
RDBの直接の代替手段、ねえ。代替であって置き換えではないのはRDBがうまくやれることもあるし、MongoDBがうまくやれることもあるから、と。
まあ、NoSQLにしては扱いやすい(?)方だとは思う。他のNoSQL扱ったこと無いけど。
全文検索
今は機能としては無いが、配列サポートがあるので基本的な全文検索は簡単に実装できる。
LuceneやSolrなどのソリューションが〜って、この二つの作りを知らないのだけどMongoDBからでも扱えるのかな?
トランザクション
トランザクションが無いのでアトミック操作かツーフェーズコミットへのフォールバックとか何これ……
解説がOpen Source Document Database | MongoDBらしいが……
データ処理
MapReduceがなんとかかんとか
空間情報
$near(1点からの距離)や$within(矩形または円形の内部かどうか)なんて検索ができるみたい。すごい。
マップリデュース
理解出来ないと思うので飛ばす
性能とツール
いくつかのツールを見ていくことと、重要な側面についての説明。
インデクス
system.indexesという特別なコレクションは、データベースのインデクスに関する情報を保持している。
RDBのインデクスと同じように機能し、クエリとソートの性能を改善する。
ensureIndexで作り、dropIndexで削除をする。
> db.unicorns.ensureIndex({name: 1}) > db.unicorns.dropIndex({name: 1})
ユニークインデクスはunique=>trueを渡すことで生成される。
> db.unicorns.ensureIndex({name: 1}, {unique: true})
(インデクスは埋め込みフィールド上に作れるとか配列フィールド上に作れるとか複合インデクスが〜は省略されました)
Explain
クエリがインデクスを使うかどうかを見るにはカーソルで(?)explainを使う。
> db.unicorns.find().explain()
投げっぱなしの書き込み
データを書いたらそのまますぐに戻ってくるが、書き込みの失敗を知るにはdb.getLastErrorを挿入後に呼び出す必要がある。
ほとんどのドライバこれを隠蔽して追加のパラメータでsafe writeを出来るようにしてあるらしい。
シェルからはsafe writeを実行するので振る舞いは見ることは簡単ではない。
シャーディング
シャーディングの存在を知っておきましょう。
レプリケーション
性能向上をさせることもあるが、本来の目的は信頼性向上。
シャーディングと組み合わせることがよくある。存在を知っておきましょう。
統計
db.stats()でデータベースの統計情報を取得できる。
db.unicorns.stats()でコレクションに関する統計情報を取得できる。
Webインターフェース
MongoDB起動時のメッセージにWebベースの管理者ツールへのリンクが含まれている。らしい。それらしいの無いよ……
http://localhost:28017/にアクセスすると見れるらしい。
mongodb.configにrest=trueを追加してリスタートしたいと思うだろう、ってこれするとどうなんのさ?
プロファイラ
プロファイラを有効にするには
> db.setProfilingLevel(2)
を実行する。この状態でコマンドを実行し、
> db.unicorns.find({weight: {$gt: 600}})
プロファイラをチェックする。
> db.system.profile.find()
何が実行され、いつ、どのくらいのドキュメントがスキャンされ、どうやってデータが返されたかがわかる、らしい。
setProfilingLevelに0を渡すと無効化、1を指定すると100ミリ秒以上かかるクエリだけプロファイルする。
> db.setProfilingLevel(1, 1000)
とすると1秒以上かかる処理をプロファイルする、ということになるらしい。
バックアップとリストア
binディレクトリにmongodumpがあるが、これを実行するとローカルホストに接続して
すべてのデータベースをdumpディレクトリにダンプする。
特定のデータベースをバックアップする--db DBNAMEと特定のコレクションをバックアップする--collection COLLECTIONNAMEもよく使う。
リストアする場合はmongoresoreを、ダンプと同様に--dbと--collectionが使用できる。
learnデータベースをbackupディレクトリにバックアップするには以下のようにする。
$ mongodump --db learn --out backup
unicornsコレクションだけリストアするには、以下のようにする。
$ mongorestore --collection unicorns backup/learn/unicorns.bson
これら以外に、JSON or CSVからデータをインポート・エクスポートできるmongoexportとmongoimportがある。
$ mongoexport --db learn --collection unicorns
$ mongoexport --db learn --collection unicorns --csv --fields name,weight,vampires
でできる。
ただ、mongoexportとmongoimportは常にデータを全部表現出来るとは限らないので、mongodumpとmongorestoreだけがバックアップに使われるべき。
まとめ
コマンドとかツールとかいろいろ見てきた。
MongoDBのインデクスはRDBのものと似ているが、的を射ており使いやすい。
結論
- これから扱うドライバについて習熟しましょう
- http://www.mongodb.com/には有益な情報がたくさん
- https://groups.google.com/group/mongodb-user?pli=1は質問をするには最適な場所
終わり。後半かなりいい加減だったけど。
でもまあ、なんとなくわかったし、触ってるうちに疑問点が解けることもあると思うので、これから触っていこうと思う。