Mongo db勉強会
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Mongo db勉強会

  • 6,987 views
Uploaded on

社内向けにMongoDB勉強会をしました。...

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

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
6,987
On Slideshare
6,065
From Embeds
922
Number of Embeds
4

Actions

Shares
Downloads
26
Comments
0
Likes
4

Embeds 922

http://labs.infoalive.com 902
http://webcache.googleusercontent.com 16
http://translate.googleusercontent.com 2
http://www.techgig.com 2

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

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