• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Mongo db勉強会
 

Mongo db勉強会

on

  • 6,694 views

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

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

Statistics

Views

Total Views
6,694
Views on SlideShare
5,776
Embed Views
918

Actions

Likes
4
Downloads
26
Comments
0

4 Embeds 918

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

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Mongo db勉強会 Mongo db勉強会 Presentation Transcript

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