SlideShare ist ein Scribd-Unternehmen logo
1 von 62
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 :)

Weitere ähnliche Inhalte

Was ist angesagt?

Seres intraterrestres
Seres intraterrestresSeres intraterrestres
Seres intraterrestres
Richird7
 
Curso ibm: Administración de Bases de Datos IBM DB2 en Multiplataforma.
Curso ibm:  Administración de Bases de Datos IBM DB2 en Multiplataforma.Curso ibm:  Administración de Bases de Datos IBM DB2 en Multiplataforma.
Curso ibm: Administración de Bases de Datos IBM DB2 en Multiplataforma.
camforma
 
[216]딥러닝예제로보는개발자를위한통계 최재걸
[216]딥러닝예제로보는개발자를위한통계 최재걸[216]딥러닝예제로보는개발자를위한통계 최재걸
[216]딥러닝예제로보는개발자를위한통계 최재걸
NAVER D2
 

Was ist angesagt? (16)

Demystifying flink memory allocation and tuning - Roshan Naik, Uber
Demystifying flink memory allocation and tuning - Roshan Naik, UberDemystifying flink memory allocation and tuning - Roshan Naik, Uber
Demystifying flink memory allocation and tuning - Roshan Naik, Uber
 
Seres intraterrestres
Seres intraterrestresSeres intraterrestres
Seres intraterrestres
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
 
위성이미지 객체 검출 대회 - 1등
위성이미지 객체 검출 대회 - 1등위성이미지 객체 검출 대회 - 1등
위성이미지 객체 검출 대회 - 1등
 
Apache Jackrabbit Oak - Scale your content repository to the cloud
Apache Jackrabbit Oak - Scale your content repository to the cloudApache Jackrabbit Oak - Scale your content repository to the cloud
Apache Jackrabbit Oak - Scale your content repository to the cloud
 
KOCOON – KAKAO Automatic K8S Monitoring
KOCOON – KAKAO Automatic K8S MonitoringKOCOON – KAKAO Automatic K8S Monitoring
KOCOON – KAKAO Automatic K8S Monitoring
 
1.Introduction to Python and TensorFlow
1.Introduction to Python and TensorFlow1.Introduction to Python and TensorFlow
1.Introduction to Python and TensorFlow
 
Curso ibm: Administración de Bases de Datos IBM DB2 en Multiplataforma.
Curso ibm:  Administración de Bases de Datos IBM DB2 en Multiplataforma.Curso ibm:  Administración de Bases de Datos IBM DB2 en Multiplataforma.
Curso ibm: Administración de Bases de Datos IBM DB2 en Multiplataforma.
 
Optimizing InfluxDB Performance in the Real World by Dean Sheehan, Senior Dir...
Optimizing InfluxDB Performance in the Real World by Dean Sheehan, Senior Dir...Optimizing InfluxDB Performance in the Real World by Dean Sheehan, Senior Dir...
Optimizing InfluxDB Performance in the Real World by Dean Sheehan, Senior Dir...
 
Building fast interpreters in Rust
Building fast interpreters in RustBuilding fast interpreters in Rust
Building fast interpreters in Rust
 
[216]딥러닝예제로보는개발자를위한통계 최재걸
[216]딥러닝예제로보는개발자를위한통계 최재걸[216]딥러닝예제로보는개발자를위한통계 최재걸
[216]딥러닝예제로보는개발자를위한통계 최재걸
 
6 Nines: How Stripe keeps Kafka highly-available across the globe with Donny ...
6 Nines: How Stripe keeps Kafka highly-available across the globe with Donny ...6 Nines: How Stripe keeps Kafka highly-available across the globe with Donny ...
6 Nines: How Stripe keeps Kafka highly-available across the globe with Donny ...
 
Developing functional domain models with event sourcing (sbtb, sbtb2015)
Developing functional domain models with event sourcing (sbtb, sbtb2015)Developing functional domain models with event sourcing (sbtb, sbtb2015)
Developing functional domain models with event sourcing (sbtb, sbtb2015)
 
인공지능 슈퍼마리오의 거의 모든 것( Pycon 2018 정원석)
인공지능 슈퍼마리오의 거의 모든 것( Pycon 2018 정원석)인공지능 슈퍼마리오의 거의 모든 것( Pycon 2018 정원석)
인공지능 슈퍼마리오의 거의 모든 것( Pycon 2018 정원석)
 
Putting Kafka Into Overdrive
Putting Kafka Into OverdrivePutting Kafka Into Overdrive
Putting Kafka Into Overdrive
 
[131]chromium binging 기술을 node.js에 적용해보자
[131]chromium binging 기술을 node.js에 적용해보자[131]chromium binging 기술을 node.js에 적용해보자
[131]chromium binging 기술을 node.js에 적용해보자
 

Andere mochten auch

Tips of CakePHP and MongoDB - Cakefest2011 ichikaway
Tips of CakePHP and MongoDB - Cakefest2011 ichikaway Tips of CakePHP and MongoDB - Cakefest2011 ichikaway
Tips of CakePHP and MongoDB - Cakefest2011 ichikaway
ichikaway
 
Experience of (Ichikaway iteigo1)
Experience of (Ichikaway iteigo1)Experience of (Ichikaway iteigo1)
Experience of (Ichikaway iteigo1)
ichikaway
 
3.4 ict strategy
3.4 ict strategy3.4 ict strategy
3.4 ict strategy
mrmwood
 

Andere mochten auch (13)

Tips of CakePHP and MongoDB - Cakefest2011 ichikaway
Tips of CakePHP and MongoDB - Cakefest2011 ichikaway Tips of CakePHP and MongoDB - Cakefest2011 ichikaway
Tips of CakePHP and MongoDB - Cakefest2011 ichikaway
 
Experience of (Ichikaway iteigo1)
Experience of (Ichikaway iteigo1)Experience of (Ichikaway iteigo1)
Experience of (Ichikaway iteigo1)
 
CakePHP 3
CakePHP 3CakePHP 3
CakePHP 3
 
Tài liệu HTML5-CSS3
Tài liệu HTML5-CSS3Tài liệu HTML5-CSS3
Tài liệu HTML5-CSS3
 
Road to CakePHP 3.0
Road to CakePHP 3.0Road to CakePHP 3.0
Road to CakePHP 3.0
 
Advanced Querying with CakePHP 3
Advanced Querying with CakePHP 3Advanced Querying with CakePHP 3
Advanced Querying with CakePHP 3
 
3.4 ict strategy
3.4 ict strategy3.4 ict strategy
3.4 ict strategy
 
The Business Case for Corporate Performance Management
The Business Case for Corporate Performance ManagementThe Business Case for Corporate Performance Management
The Business Case for Corporate Performance Management
 
2011-2012 Slumber Parties Catalog
2011-2012 Slumber Parties Catalog2011-2012 Slumber Parties Catalog
2011-2012 Slumber Parties Catalog
 
Biography= My grandmother
Biography= My grandmotherBiography= My grandmother
Biography= My grandmother
 
Cell project example
Cell project exampleCell project example
Cell project example
 
Leadership Sustainability: Seven Disciplines to Achieve the Changes Great Lea...
Leadership Sustainability: Seven Disciplines to Achieve the Changes Great Lea...Leadership Sustainability: Seven Disciplines to Achieve the Changes Great Lea...
Leadership Sustainability: Seven Disciplines to Achieve the Changes Great Lea...
 
Satellite Videoconferencing
Satellite VideoconferencingSatellite Videoconferencing
Satellite Videoconferencing
 

Ähnlich wie How to use MongoDB with CakePHP

Java Persistence Frameworks for MongoDB
Java Persistence Frameworks for MongoDBJava Persistence Frameworks for MongoDB
Java Persistence Frameworks for MongoDB
MongoDB
 
BedCon 2013 - Java Persistenz-Frameworks für MongoDB
BedCon 2013 - Java Persistenz-Frameworks für MongoDBBedCon 2013 - Java Persistenz-Frameworks für MongoDB
BedCon 2013 - Java Persistenz-Frameworks für MongoDB
Tobias Trelle
 
Mongo db eveningschemadesign
Mongo db eveningschemadesignMongo db eveningschemadesign
Mongo db eveningschemadesign
MongoDB APAC
 

Ähnlich wie How to use MongoDB with CakePHP (20)

MongoDB
MongoDBMongoDB
MongoDB
 
MongoDB Pros and Cons
MongoDB Pros and ConsMongoDB Pros and Cons
MongoDB Pros and Cons
 
Back to Basics 2017: Mí primera aplicación MongoDB
Back to Basics 2017: Mí primera aplicación MongoDBBack to Basics 2017: Mí primera aplicación MongoDB
Back to Basics 2017: Mí primera aplicación MongoDB
 
Building your first app with MongoDB
Building your first app with MongoDBBuilding your first app with MongoDB
Building your first app with MongoDB
 
MongoDB and Python
MongoDB and PythonMongoDB and Python
MongoDB and Python
 
Python and MongoDB
Python and MongoDB Python and MongoDB
Python and MongoDB
 
2016 feb-23 pyugre-py_mongo
2016 feb-23 pyugre-py_mongo2016 feb-23 pyugre-py_mongo
2016 feb-23 pyugre-py_mongo
 
Using MongoDB and Python
Using MongoDB and PythonUsing MongoDB and Python
Using MongoDB and Python
 
Rails with mongodb
Rails with mongodbRails with mongodb
Rails with mongodb
 
MongoDB using Grails plugin by puneet behl
MongoDB using Grails plugin by puneet behlMongoDB using Grails plugin by puneet behl
MongoDB using Grails plugin by puneet behl
 
MongoDB
MongoDBMongoDB
MongoDB
 
MongoDB at FrozenRails
MongoDB at FrozenRailsMongoDB at FrozenRails
MongoDB at FrozenRails
 
Java Persistence Frameworks for MongoDB
Java Persistence Frameworks for MongoDBJava Persistence Frameworks for MongoDB
Java Persistence Frameworks for MongoDB
 
BedCon 2013 - Java Persistenz-Frameworks für MongoDB
BedCon 2013 - Java Persistenz-Frameworks für MongoDBBedCon 2013 - Java Persistenz-Frameworks für MongoDB
BedCon 2013 - Java Persistenz-Frameworks für MongoDB
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
2012 phoenix mug
2012 phoenix mug2012 phoenix mug
2012 phoenix mug
 
Mongodb intro
Mongodb introMongodb intro
Mongodb intro
 
Mongo db eveningschemadesign
Mongo db eveningschemadesignMongo db eveningschemadesign
Mongo db eveningschemadesign
 
Getting started with MongoDB and Scala - Open Source Bridge 2012
Getting started with MongoDB and Scala - Open Source Bridge 2012Getting started with MongoDB and Scala - Open Source Bridge 2012
Getting started with MongoDB and Scala - Open Source Bridge 2012
 
mongodb tutorial
mongodb tutorialmongodb tutorial
mongodb tutorial
 

Mehr von ichikaway

VAddy at LL Diver LT
VAddy at LL Diver LTVAddy at LL Diver LT
VAddy at LL Diver LT
ichikaway
 

Mehr von ichikaway (20)

forteeに脆弱性検査をかけてみた VAddy編
forteeに脆弱性検査をかけてみた VAddy編forteeに脆弱性検査をかけてみた VAddy編
forteeに脆弱性検査をかけてみた VAddy編
 
Understanding Computer Architecture with NES Emulator
Understanding Computer Architecture with NES EmulatorUnderstanding Computer Architecture with NES Emulator
Understanding Computer Architecture with NES Emulator
 
VAddyの課金システムを Stripeに乗り換えた話
VAddyの課金システムを Stripeに乗り換えた話VAddyの課金システムを Stripeに乗り換えた話
VAddyの課金システムを Stripeに乗り換えた話
 
Hello, Worldまで3ヶ月 Golangでファミコンエミュレータ実装 #gocon fukuoka 2019
Hello, Worldまで3ヶ月 Golangでファミコンエミュレータ実装 #gocon fukuoka 2019Hello, Worldまで3ヶ月 Golangでファミコンエミュレータ実装 #gocon fukuoka 2019
Hello, Worldまで3ヶ月 Golangでファミコンエミュレータ実装 #gocon fukuoka 2019
 
ゼロから始めるファミコンエミュレータ生活 PHPerKaigi2019
ゼロから始めるファミコンエミュレータ生活 PHPerKaigi2019ゼロから始めるファミコンエミュレータ生活 PHPerKaigi2019
ゼロから始めるファミコンエミュレータ生活 PHPerKaigi2019
 
現場で使える脆弱性検査サービス VAddy
現場で使える脆弱性検査サービス VAddy 現場で使える脆弱性検査サービス VAddy
現場で使える脆弱性検査サービス VAddy
 
OS入門 Fukuoka.php vol.18 LT資料
OS入門 Fukuoka.php vol.18 LT資料OS入門 Fukuoka.php vol.18 LT資料
OS入門 Fukuoka.php vol.18 LT資料
 
Yapc8oji: セキュリティテストサービスを開発運営してきた2年
Yapc8oji: セキュリティテストサービスを開発運営してきた2年Yapc8oji: セキュリティテストサービスを開発運営してきた2年
Yapc8oji: セキュリティテストサービスを開発運営してきた2年
 
VAaddyとは VAddyミートアップvol3_20160629
VAaddyとは  VAddyミートアップvol3_20160629VAaddyとは  VAddyミートアップvol3_20160629
VAaddyとは VAddyミートアップvol3_20160629
 
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
 
脆弱性もバグ、だからテストしよう DevSummiFukuoka
脆弱性もバグ、だからテストしよう DevSummiFukuoka脆弱性もバグ、だからテストしよう DevSummiFukuoka
脆弱性もバグ、だからテストしよう DevSummiFukuoka
 
Vulnerabilities are bugs, Let's test for them!
Vulnerabilities are bugs, Let's test for them!Vulnerabilities are bugs, Let's test for them!
Vulnerabilities are bugs, Let's test for them!
 
脆弱性もバグ、だからテストしよう!
脆弱性もバグ、だからテストしよう!脆弱性もバグ、だからテストしよう!
脆弱性もバグ、だからテストしよう!
 
継続的Webセキュリティテスト PHPカンファレンス関西2015 LT
継続的Webセキュリティテスト PHPカンファレンス関西2015 LT継続的Webセキュリティテスト PHPカンファレンス関西2015 LT
継続的Webセキュリティテスト PHPカンファレンス関西2015 LT
 
継続的Webセキュリティテスト testing casual talks2
継続的Webセキュリティテスト testing casual talks2継続的Webセキュリティテスト testing casual talks2
継続的Webセキュリティテスト testing casual talks2
 
Ctf2015 ichikawa Eizoku PM2.5 dial
Ctf2015 ichikawa Eizoku PM2.5 dialCtf2015 ichikawa Eizoku PM2.5 dial
Ctf2015 ichikawa Eizoku PM2.5 dial
 
VAddy - CI勉強会 fukuoka
VAddy - CI勉強会 fukuokaVAddy - CI勉強会 fukuoka
VAddy - CI勉強会 fukuoka
 
Jenkinsを使った継続的セキュリティテスト
Jenkinsを使った継続的セキュリティテストJenkinsを使った継続的セキュリティテスト
Jenkinsを使った継続的セキュリティテスト
 
継続的セキュリティテストVaddy説明資料
継続的セキュリティテストVaddy説明資料継続的セキュリティテストVaddy説明資料
継続的セキュリティテストVaddy説明資料
 
VAddy at LL Diver LT
VAddy at LL Diver LTVAddy at LL Diver LT
VAddy at LL Diver LT
 

Kürzlich hochgeladen

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Kürzlich hochgeladen (20)

Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 

How to use MongoDB with CakePHP

  • 1. How to use MongoDB with CakePHP 2010/9/4 Cakefest2010 Yasushi Ichikawa
  • 2. TOPIC 1. Who am I 2. MongoDB 3. PHP + MongoDB 4. CakePHP + MongoDB
  • 4. 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
  • 5. My Code  My code for Cakephp  http://github.com/ichikaway
  • 6. TOPIC 1. Who am I 2. MongoDB 3. PHP + MongoDB 4. CakePHP + MongoDB
  • 8. 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
  • 9. MongoDB TERMs RDB MongoDB Table Collection Row Document Column Field
  • 10. MongoDB Position • Performance – Key/Value > mongoDB >>> RDBMS • Functionality – RDBMS > mongoDB >>> Key/Value
  • 11. MongoDB Provides • Scalability • Queryable • Read/Write FAST • Schema Free
  • 12. 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
  • 13. 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:
  • 14. 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
  • 15. 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 ]
  • 16. MongoDB In Production github, heroku(MongoHQ), etc
  • 17. 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
  • 18. MongoDB Fit or Not Not replace all RDBMS
  • 19. 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
  • 20. MongoDB Fit • Need Performance – Read/Write is fast • Scale out – Master/Slave – Replica set(Automatic Failover) – Sharding
  • 22. MongoDB Retrieving Data SELECT field1, field2 From blog WHERE field1 = 'aaa'; db.blog.find( { field1 : ”aaa” }, { field1 : 1, field2 : 1 } ) Collection name
  • 23. 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);
  • 24. MongoDB find operators • $gt, $gte • $lt, $lte • $ne • $in • $nin • $or http://www.mongodb.org/display/DOCS/Advanced+Queries
  • 25. 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 }
  • 27. SQL to Mongo Mapping Chart http://www.mongodb.org/display/DOCS/SQL+to+Mongo+ Mapping+Chart
  • 28. 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} )
  • 29. Cool Stuffs of MongoDB Geospatial Index Capped Collection
  • 30. 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
  • 31. MongoDB Geospatial Index  Insert data db.geotest.save({ loc:[ 35, 139 ] }) Latitude Longitude  create Index db.geotest.ensureIndex( {loc:”2d”} )
  • 32. MongoDB Geospatial Index  Find the point db.geotest.find({ loc:[35, 140] });  $near db.geotest.find({ loc:{ $near : [30, 130] } })
  • 33. 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) }})
  • 35. 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});
  • 36. MongoDB Attension  32bit version limitation –can't save data over 2Gbytes
  • 37. MongoDB Books http://www.mongodb.org/display/DOCS/Books
  • 38. TOPIC 1. Who am I 2. MongoDB 3. PHP + MongoDB 4. CakePHP + MongoDB
  • 39. Pecl Mongo Driver • Apache License • Setup pecl install mongo extension=mongo.so (php.ini) • Manual –http://us2.php.net/mongo
  • 40. 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();
  • 41. 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);
  • 42. TOPIC 1. Who am I 2. MongoDB 3. PHP + MongoDB 4. CakePHP + MongoDB
  • 43. MongoDB Datasource  Developed since Jan, 2010  PHP5+  Pecl Mongo  CakePHP1.2+ – Recommend Cake1.3
  • 44. 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
  • 45. Cake Datasource  The link between models and the source(DB)  Transparency – Use Mongo from Model methods – connect to MongoDB and use collection automatically
  • 46. Cake calls Datasource methods Model Method Datasource find() read() save() create() save() update() delete() delete()
  • 48. Setup  cd app/plugins  git clone http://github.com/ichikaway/mongoDB- Datasource.git mongodb  cd app/config  vi database.php
  • 49. database.php <?php class DATABASE_CONFIG { public $default = array( 'driver' => 'mongodb.mongodbSource', 'database' => 'cakemongo1', 'host' => 'localhost', 'port' => 27017, );
  • 50. Sample Cake Mongo DEMO Sample1
  • 52. Sample Cake Mongo part 2  Delete History  Main data is stored in MySQL  save deleted records in history table  search history records
  • 53. Sample Cake Mongo part 2 MySQL App Default Schema CakePHP Post table User table
  • 54. Sample Cake Mongo part 2  RDB way  copy schema(all table)
  • 55. Sample Cake Mongo part 2 MySQL App Default Schema CakePHP Post table User table 1. Delete Copy Schema Post table User table 2. save
  • 56. 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
  • 57. Sample Cake Mongo 2 Mongo Way
  • 58. 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}
  • 60. 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
  • 61. Summary  MongoDB - Good case - Query - Geospatial Index - Capped Collection  PHP + MongoDB  CakePHP + MongoDB
  • 62. Thank you! Questions? Please, speak slowly :)