• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
How to use MongoDB with CakePHP
 

How to use MongoDB with CakePHP

on

  • 19,138 views

Cakefest2010 ichikaway, How to use MongoDB with CakePHP

Cakefest2010 ichikaway, How to use MongoDB with CakePHP

Statistics

Views

Total Views
19,138
Views on SlideShare
18,703
Embed Views
435

Actions

Likes
26
Downloads
0
Comments
1

14 Embeds 435

http://d.hatena.ne.jp 324
http://icpcrm01 36
https://twitter.com 27
http://linyo.ws 14
http://www.techgig.com 13
http://150.67.170.201 7
http://paper.li 3
http://www.php.rk.edu.pl 3
http://115.112.206.131 2
http://172.29.42.225 2
http://a0.twimg.com 1
http://webcache.googleusercontent.com 1
http://www.rkblog.rk.edu.pl 1
http://localhost 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

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

11 of 1 previous next

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • how to use distinct and group by in Cakephp with MOngoDB
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    How to use MongoDB with CakePHP How to use MongoDB with CakePHP Presentation Transcript

    • How to use MongoDB with CakePHP 2010/9/4 Cakefest2010 Yasushi Ichikawa
    • TOPIC 1. Who am I 2. MongoDB 3. PHP + MongoDB 4. CakePHP + MongoDB
    • Yasushi Ichikawa Twitter: @ichikaway Call me ichi
    • My Code • I've used Cakephp since Aug 2008. • Author of the SQL Explain Component → One of Debug_kit Contributors • Author of the Cakephp MongoDB-Datasource
    • My Code  My code for Cakephp  http://github.com/ichikaway
    • TOPIC 1. Who am I 2. MongoDB 3. PHP + MongoDB 4. CakePHP + MongoDB
    • MongoDB is One of NoSQL
    • MongoDB • Open-source non-relational DB • C++ • GNU AGPL v3.0 • Many Drivers(PHP, Perl, Ruby, etc) – Apache License • Company: 10gen • Download (version 1.6.2) – http://www.mongodb.org/display/DOCS/Downloads
    • MongoDB TERMs RDB MongoDB Table Collection Row Document Column Field
    • MongoDB Position • Performance – Key/Value > mongoDB >>> RDBMS • Functionality – RDBMS > mongoDB >>> Key/Value
    • MongoDB Provides • Scalability • Queryable • Read/Write FAST • Schema Free
    • MongoDB Schema • Document: bson (similar json) – Binary data • Schema Free – different schema in same collection Id, title, body Id, name, tel, fax Id, name, nickname, email Posts collection
    • MongoDB Schema • Embedded Object Posts collection id: 1, name: ichikaway, tel: 090-1111-2222. fax: Address skill Country: Japan, Java: 2years, Zip: 222-3333 PHP: 3years id: 2, name: Yasushi, tel: 090-3333-4444. fax: id: 3, name: Ninjaaa, tel: 090-5555-6666. fax:
    • RDB Schema • RDB schema • Natural data structure?? Screen Blog Blog table Tags table Title Title Tag1 Text Text Tag2 Tag3 tag1,tag2,tag3 RDB Comment Table Comment1 Comment2 Comment1 Comment3 Comment2 Comment3
    • MongoDB schema • Schema Free – Natural data structure Screen Blog Blog collection Title Title : xxxx Text Text : yyyy tag1,tag2,tag3 Mongo Tag: [tag1,tag2,tag3] Comment: [comment1, Comment1 comment2, Comment2 comment3 Comment3 ]
    • MongoDB In Production github, heroku(MongoHQ), etc
    • MongoDB Production Case • Business insider • http://www.businessinsider.com/how-we-use-mongodb-2009-11 • Over 600,000 PV / business day • 3 apache + 1 mongoDB • MongoDB uses under 5% cpu time
    • MongoDB Fit or Not Not replace all RDBMS
    • MongoDB Not FIT • Need Join • Need Transaction • Small disk space – each record has field label data Posts collection id: 1, name: ichikaway, tel: 090-1111-2222. fax: 6bytes id: 2, name: Yasushi, Age: 20 . Tel: 111-2222 id: 3, name: Ninjaaa, Language: Japanese
    • MongoDB Fit • Need Performance – Read/Write is fast • Scale out – Master/Slave – Replica set(Automatic Failover) – Sharding
    • How to use
    • MongoDB Retrieving Data SELECT field1, field2 From blog WHERE field1 = 'aaa'; db.blog.find( { field1 : ”aaa” }, { field1 : 1, field2 : 1 } ) Collection name
    • MongoDB Retrieving Data SELECT * WHERE field1 > 3 ORDER BY field2 DESC LIMIT 10, 20; db.collection.find( { field1 : { $gt:3 } } ) .sort(field2: -1) .skip(10) .limit(20);
    • MongoDB find operators • $gt, $gte • $lt, $lte • $ne • $in • $nin • $or http://www.mongodb.org/display/DOCS/Advanced+Queries
    • MongoDB find tips • Regular Expressions – { name : /ichikawa.*sushi/i } • Embedded Object – { "author.name" : "ichikawa" } Blog collection Title : xxxx Text : yyyy author: { name : 'ichikawa', age : 15 }
    • MongoDB DEMO
    • SQL to Mongo Mapping Chart http://www.mongodb.org/display/DOCS/SQL+to+Mongo+ Mapping+Chart
    • MongoDB Indexing Create Index db.collection.ensureIndex({“title” : 1}) Delete Index db.collection.dropIndex({“title” : 1}) Create Embedded Doc Index db.collection.ensureIndex ({“Autor.name” : 1}) Create Index(Background) db.collection.ensureIndex ({“title” : 1}, {background:true} )
    • Cool Stuffs of MongoDB Geospatial Index Capped Collection
    • MongoDB Geospatial Index  Version 1.3.3+ , recommend 1.6.2+ (Bug fix)  Calculate location data – Latitude(緯度), Longitude(経度)  find the closest location with Operators – $near: sort from the closest point – $box: find points within the rectangle – $center: find points within the circle
    • MongoDB Geospatial Index  Insert data db.geotest.save({ loc:[ 35, 139 ] }) Latitude Longitude  create Index db.geotest.ensureIndex( {loc:”2d”} )
    • MongoDB Geospatial Index  Find the point db.geotest.find({ loc:[35, 140] });  $near db.geotest.find({ loc:{ $near : [30, 130] } })
    • MongoDB Geospatial Index  $box – lower left, upper right db.geotest.find({ loc:{ $within:{ $box: [[1, 1], [10,10]] }}});  $center – set radius(degree) db.geotest.find({ loc:{ $within:{ $center: [[10, 10], 0.1 ] } radius(degree) }})
    • MongoDB Geospatial Index DEMO
    • MongoDB Capped Collection  Creating a Fixed Size (capped) Collection  Not think about data space / overflow • Age out data is deleted when Collection is full • Good for – Logging – Caching db.createCollection("testcap1", {capped: true, size:5000});
    • MongoDB Attension  32bit version limitation –can't save data over 2Gbytes
    • MongoDB Books http://www.mongodb.org/display/DOCS/Books
    • TOPIC 1. Who am I 2. MongoDB 3. PHP + MongoDB 4. CakePHP + MongoDB
    • Pecl Mongo Driver • Apache License • Setup pecl install mongo extension=mongo.so (php.ini) • Manual –http://us2.php.net/mongo
    • Pecl Mongo • Connect $mongo = new Mongo(localhost:27017); $db = $mongo->selectDB('blog'); • select collection $collection = $db->selectCollection('posts'); • Find $collection->find($cond, $filed) ->sort()->limit(5)->skip();
    • Pecl Mongo $data = array('field1' => 'val1', 'field2' => 'val2'); • Insert $collection->insert($data); • Update $new = array('$set' => array('field2' => 'aa')); $cond = array('field1' => 'val1'); $collection->update($cond, $new);
    • TOPIC 1. Who am I 2. MongoDB 3. PHP + MongoDB 4. CakePHP + MongoDB
    • MongoDB Datasource  Developed since Jan, 2010  PHP5+  Pecl Mongo  CakePHP1.2+ – Recommend Cake1.3
    • MongoDB Datasource  Version 0.3 – set schema info to Model::schema – test cases  Version 0.4 – create schema info from Post data – show command log Huge Thanks AD7six
    • Cake Datasource  The link between models and the source(DB)  Transparency – Use Mongo from Model methods – connect to MongoDB and use collection automatically
    • Cake calls Datasource methods Model Method Datasource find() read() save() create() save() update() delete() delete()
    • Let's use
    • Setup  cd app/plugins  git clone http://github.com/ichikaway/mongoDB- Datasource.git mongodb  cd app/config  vi database.php
    • database.php <?php class DATABASE_CONFIG { public $default = array( 'driver' => 'mongodb.mongodbSource', 'database' => 'cakemongo1', 'host' => 'localhost', 'port' => 27017, );
    • Sample Cake Mongo DEMO Sample1
    • Sample2
    • Sample Cake Mongo part 2  Delete History  Main data is stored in MySQL  save deleted records in history table  search history records
    • Sample Cake Mongo part 2 MySQL App Default Schema CakePHP Post table User table
    • Sample Cake Mongo part 2  RDB way  copy schema(all table)
    • Sample Cake Mongo part 2 MySQL App Default Schema CakePHP Post table User table 1. Delete Copy Schema Post table User table 2. save
    • Sample Cake Mongo part 2  RDB way  copy schema(all table)  Hard to maintain both schema  serialize deleted record, save in history table  Hard to search in history table
    • Sample Cake Mongo 2 Mongo Way
    • Sample Cake Mongo part 2 MySQL App Default Schema CakePHP Post table User table 1. Delete MongoDB History Collection {'post' : Post record} 2. save {'user' : User record}
    • Sample Cake Mongo 2 DEMO
    • Sample Cake Mongo 2  Good Fit Document Database – save different table records in one collection  Don't need prepare schema before Save  Search easily in History Collection
    • Summary  MongoDB - Good case - Query - Geospatial Index - Capped Collection  PHP + MongoDB  CakePHP + MongoDB
    • Thank you! Questions? Please, speak slowly :)