Mongo db勉強会

6,546 views

Published on

社内向けにMongoDB勉強会をしました。
社内フレームワークDecoでの実装について。

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,546
On SlideShare
0
From Embeds
0
Number of Embeds
939
Actions
Shares
0
Downloads
28
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Mongo db勉強会

  1. 1. MongoDB 勉強会
  2. 2. MongoDB とは?
  3. 3. ドキュメント指向型 データーベース
  4. 4. RDB が関係を格納するのに対し、 ドキュメント指向は、 ドキュメントを格納します。
  5. 5. 何故ドキュメント指向を使うのか?
  6. 6. 背景としては、 RDB では、 一般的にスケールアウトが難しい。 今も DB は一台で他を 分散化しようという流れがありますよね? 何にでも RDB を使うのではなく、 用途に応じて、分散化しやすい KVS やデータストアを利用していこう。 NoSQL を使おうという流れがある。
  7. 7. NoSQL は 既に活用されています
  8. 8. 例えば、
  9. 9. Google の BigTable
  10. 10. Amazon の Dynamo
  11. 11. これらはプロプライエタリな データーベース
  12. 12. では、オープンな ドキュメント指向は 何があるか?
  13. 13. Cassandra Apache License 2.0 Java
  14. 14. CouchDB( カウチ DB) Apache License 2.0 Erlang
  15. 15. MongoDB GNU AGPL v3.0 C++
  16. 16. 他にも色々 - Chordless - Db4o - GT.M - HBase - Hypertable - Memcachedb - Mnesia - Project Voldemort - Redis - SimpleDB
  17. 17. 前置きはこのくらいにして、
  18. 18. 操作をしよう。
  19. 19. ユーザーを作成
  20. 20. // 接続 $ mongo > // 予約語として管理 DB があります。 > use admin // 現在はユーザーがいません。 > db.system.users.find() // ユーザーを作成します。 > db.addUser('root','password') { "_id" : ObjectId("4ce0d5d806d4bbe3c620c5a4"), "user" : "root", "readOnly" : false, "pwd" : "d60e7db4538202339acd585fa951c5aa" } // ユーザーを確認 > db.system.users.find() { "_id" : ObjectId("4ce0d5d806d4bbe3c620c5a4"), "user" : "root", "readOnly" : false, "pwd" : "d60e7db4538202339acd585fa951c5aa" }
  21. 21. 管理ユーザーが作成できれば、 // パスワード設定を行います。 $ vi /etc/mongo.conf noauth = false auth = true $ /etc/init.d/mongo restart 次に認証の操作。
  22. 22. // 接続 $ mongo > > use admin // DB の一覧を求めます。 Error を返します。 > show dbs // 認証します。 > db.auth('root','password') 1 // DB の一覧が見れるようになりました > show dbs // データーを登録します。 // use で DB を指定(作成 ) > use test // コレクションを指定してデーターを登録することで、コレクション ( テーブル ) が出来ます。 > db.hoge.insert({hoge: 1}) > db.hoge.find() // コレクションの一覧確認 > show collections
  23. 23. 高度な検索をする際は、以下を参考ください。 http://www.mongodb.org/pages/viewpage.action?pageId=6029357 イコールだと、 > db.hoge.find({hoge : 1 }) 例えば ne > db.hoge.find({ hoge: { $ne : 1 } })
  24. 24. 簡単な操作は以上 次は社内フレームワーク Deco
  25. 25. Deco で Mongo を 実装しました。
  26. 26. なんで MongoDB なの?
  27. 27. 理由
  28. 28. PHP から接続できるライブラリが 簡単に利用できるのと、記述が簡単
  29. 29. // ライブラリの インストール は一行 $ pecl install mongo // 設定は php.ini に 一行 extension=mongo.so
  30. 30. では、 Deco での初期設定、 操作をみていきます。
  31. 31. 接続 env.yml db: dsn: "mongodb://[username]:[password]@localhost/[database]" database: [database] 設定は以上
  32. 32. コードの書き方 // DB のインスタンス作成 $hoge = $c->mongo('hoge'); // 結果の配列を受け取る $out = $hoge->findBy($id); var_dump($out);
  33. 33. 以上で、操作出来ます。 次に PHP のライブラリを見ていきます。
  34. 34. MongoDB の コアクラス Mongo Class MongoDB Class MongoCollection Class MongoCursor Class コアクラスは4つある。 次はクラスの説明。
  35. 35. - Mongo Class MongoDB と PHP を接続 - MongoDB Class Mongo Class のインスタンスを利用した データベースとのやりとり $m = new Mongo(); // 接続 $db = $m->selectDB("example"); - MongoCollection Class MongoDB のインスタンスを利用した コレクションを操作するクラス - MongoCursor Class データベースクエリの結果を表すオブジェクト
  36. 36. Deco での実装では MongoCollection Class を オーバーライドし、 インスタンスの結果を返します。
  37. 37. 何が嬉しいか? MongoCollection の メソッドを自由に変更できる。
  38. 38. また、 plugin/mongo/[collection].php を用意することで、 コレクション毎に、 MongoCommon を オーバーライドする実装としました。
  39. 39. Deco Mongo パッケージ構成 plugin/mongo.php plugin/mongo/MongoCommon.php plugin/mongo/[collection].php + Deco.php に function 追加 // mongoDB function & mongo($table){ $db = $this->plugin('mongo', 1); return $db->getMongo($table); }
  40. 40. クラスのイメージ plugin/mongo/MongoCommon.php class MongoCommon extends MongoCollection { } plugin/mongo/[collection].php // location.php class P_mongo_location extends MongoCommon { }
  41. 41. つまり、メソッドの MongoCommon の find メソッドに対し、 P_mongo_location に find を実装することで、 処理の上書きができます。 plugin/mongo/MongoCommon.php class MongoCommon extends MongoCollection { function find($query = array()){ return parent::find($query); } } plugin/mongo/[collection].php class P_mongo_location extends MongoCommon { function find($query = array()){ // ← が優先となる。 return 'hoge'; } }
  42. 42. 実装は以上です。 あとは、 Deco での操作を見ながら 確認していきます。

×