SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
MySQL & NoSQL from a
PHP perspective



                                            Tim Juravich
                                            @timjuravich
         October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




Who Am I?
• Developer, Startup Junky
• Lead projects in .NET, Ruby, and PHP
• Book on PHP & CouchDB development out early next year from Packt Publishing




                               October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




What we’ll talk about today
• A high level discussion on NoSQL databases from the PHP developer POV
• We’ll focus on Data Models
• What we won’t be able to talk about:
  - How each database scales, stores it’s data.
  - CAP Theorem (http://tinyurl.com/nosql-cap)

• We’ll touch on tools for us PHP Developers




                                October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




Data Models
A data model defines how your application stores data and how it
makes associations.


If you force an incorrect data model into your application...you’re
probably going to have a hard time.




                                 October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




 Traditional relational Model (MySQL)
          addresses                                                                          users
id    address      city      state     zip        user_id                               id   first_name last_name
      123 Main
1                 Seattle     WA      98101         1
       Street                                                                           1       John       Doe
      120 Pike
2                 Seattle     WA      98101         1
       Street                                                                           2       Jane       Doe
      321 2nd
3                 Seattle     WA      98101         2
        Ave


      phone numbers
 id      number             primary      user_id

 1    555-867-5309            1               1
 2    555-867-5309            0               1
 3    555-867-5309            1               2


                                                     October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




What’s wrong with this?
• Nothing really...there are just limitations
   - Due to normalization as your data grows so does the complexity of your
  database

  - As your database grows, writing becomes a bottleneck
  - Difficult to scale horizontally
  - Sometimes tables are just too limiting




                                      October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




NoSQL databases are born
• History
  - Some NoSQL databases have been around forever
  - In 2004 & 2005 they explode

• NoSQL really means “Not Only SQL”




                              October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




NoSQL
• The Good News
  - Different tools for different situations
  - Flexible (Schema-less)

  - Focused on scalability out of the box
  - New data models

• The Bad News
  - No common standards
  - Relatively immature
  - New data models


                                  October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




There are no silver bullets!




          October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




Size vs. Complexity
                 Key/value Stores
                                     Column Stores
                                                                       Document Database
 Scale To Size




                                                                                  Graph Database


                           Typical RDMBS


                                    RDMBS Performance Line



                                Scale To Complexity
                                    October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




Key Value Stores
• Definition
   - Access to a value based on a unique key
   - Think of this in terms of a hash-table, or in PHP an associative array.


                 user_1                                            user_2
               “John Doe”                         { name: “John Doe”,
                                                    email: john@example.com”,
                                                    phone: “8675309”
                                                  }




                                October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




Redis
• Strengths
   - Incredibly Fast
   - Pub/Sub support      redis> set im.a.key "im.a.value"
                          OK
   - Simple CLI           redis> get im.a.key
                          "im.a.value"
• Weaknesses
   - It can feel limiting with a complex use case

• Use it for
   - Rapidly changing data.
   - Stocks, Analytics, Real-time collection/communication


                                October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




Redis & PHP
• There are a variety of Redis & PHP toolkits (http://tinyurl.com/redis-php)
• My favorite is Predis (https://github.com/nrk/predis)

          <?php
          $redis = new PredisClient();
          $redis->set('foo', 'bar');
          $value = $redis->get('foo');


• Twitter clone to play with: (http://redis.io/topics/twitter-clone)



                                 October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




Column Stores
• Definition
   - Similar to relational database, but it flips it all around. Instead of storing
   records, column stores store all of the values for a column together in a

   stream. From there, you can use an index to get column values for a particular
   record.
   - Can handle 4 or 5 dimensions

     Keyspace, Column Family, Column Family Row, Column
     Keyspace, Column Family, Column Family Row, Super Column, Column




                                  October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




Column Stores
  example-db (Keyspace)
  users (Column Family)
      johndoe (key)
        name (column)        email (column)                phone (column)
          John Doe          john@example.com                 5558675309




      janedoe (key)
        name (column)       email (column)
          Jane Doe          jane@example.com




                        October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




Cassandra
• Strengths
   - Can handle some serious data
   - Writes are much faster than reads

   - Hadoop integration

• Weaknesses
   - Complex for it’s offering and bloated

• Use it for
   - Apps with a lot of writing. Serious applications.




                                  October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




Cassandra & PHP
• Thrift
• There are a few PHP libraries (http://tinyurl.com/cassandra-php)
• My favorite is phpcassa (https://github.com/thobbs/phpcassa)




                               October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




Cassandra & PHP (phpcassa)
<?php

// Connect to Keyspace
$pool = new ConnectionPool('example-db');


// Create ColumnFamily
$users = new ColumnFamily($pool, 'users');


// Create User
$users->insert('2’, array('name' => 'Jane Doe',
                          'email' => 'jane@example.com'));

// Get User
$users->get('2');



                          October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




Document Databases
• Definition
   - Documents provide access to structured data, without a schema.
   - Buckets of key-value pairs inside of a self contained object.

   - Friendliest NoSQL databases for PHP developers




                                October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




    Document Databases
{ id: 'johndoe',                                                   { id: 'janedoe',
  name: 'John Doe',                                                  name: 'Jane Doe',
  email : ‘john@example.com’,                                        email : ‘jane@example.com’,
  phone : ‘5558675309’                                             }
  addresses : [ “address1” : {
                   address: '123 main street',
                   city: 'seattle',
                   state: 'WA',
                   zip: ‘98101’ },
                 “address2” : {
                   address: '123 main street',
                   city: 'seattle',
                   state: 'WA',
                   zip: ‘98101’ }
              ]
}




                                      October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




MongoDB
• Strengths
   - Familiar Query Language                     $post->where('id',       $this->getID());


   - A lot of developer toolkits

• Weaknesses
   - Sharding can be a pain

• Use it for
   - Things you might do with MySQL, but schemas are getting in the way.




                                   October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




MongoDB & PHP
• A TON of libraries (http://tinyurl.com/mongo-php)
   - Doctrine
   - Cake

   - Code Ignitor
   - Symfony
   - Zend

   - etc.

• My favorite is ActiveMongo (https://github.com/crodas/ActiveMongo)



                              October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




MongoDB & PHP (Active Mongo)
<?php
ActiveMongo::connect('example-db', 'localhost');

class User extends ActiveMongo
{
  public $name;
  public $email;
}

$user = new User();
$user->name = 'John Doe';
$user->email = 'john@example.com';

// Insert
$user->save();

// Update
$user->email = 'john@example.org';
$user->save();

                          October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




CouchDB
• Strengths
   - Bi-lateral replication (master-master)
   - Slick RESTful JSON API, easy to use

• Weaknesses
   - Need some Javascript chops
   - Slower writes

• Use it for
   - Mobile, CRM, CMS systems, multi-site deployments




                                October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




CouchDB & PHP
• Not as many as MongoDB (http://tinyurl.com/couch-php)
   - Doctrine
   - Variety of standalone libraries

• My favorite is Sag (https://github.com/sbisbee/sag)




                                 October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




CouchDB & PHP (Sag)
<?php
class User
{
  public $name;
  public $email;
}

$user = new User();
$user->name = 'John Doe';
$user->email = 'john@example.com';

$sag = new Sag('127.0.0.1', '5984');
$sag->setDatabase('example-db');
$sag->post($user);




                          October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




Graph Databases
• Definition
   - Instead of tables, rows, columns, it's a flexible graph model that contains
   nodes. Nodes have properties and relationships to other nodes.




                                October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




Graph Databases




           October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




Neo4j
• Strengths
   - Fully transactional
   - Flexible API

• Weaknesses
   - A completely different way of thinking
   - Complex

• Use it for
   - Social relations, road maps, network topologies




                               October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




Neo4j & PHP
• There are a few of options (http://tinyurl.com/neo4j-php)
   - REST API
   - Thrift

• It’s pretty complex...




                               October 4th, 2011 - Tim Juravich
MySQL & NoSQL from a PHP perspective




So which DB should you use?
• Don’t rule out relational databases
• Do your homework
• Every project is different
• NoSQL probably should be avoided in these areas
   - Transactions, orders, anything where money changes hands
   - Business critical data or line of business applications




                                 October 4th, 2011 - Tim Juravich
Thanks!
Feel free to reach out with any questions:
        tim.juravich@gmail.com
              @timjuravich




            October 4th, 2011 - Tim Juravich

Mais conteúdo relacionado

Destaque

1. Introduction to DBMS
1. Introduction to DBMS1. Introduction to DBMS
1. Introduction to DBMS
koolkampus
 
Alphorm.com Support de la Formation PHP MySQL
Alphorm.com Support de la Formation PHP MySQLAlphorm.com Support de la Formation PHP MySQL
Alphorm.com Support de la Formation PHP MySQL
Alphorm
 
Database Management Systems (DBMS)
Database Management Systems (DBMS)Database Management Systems (DBMS)
Database Management Systems (DBMS)
Dimara Hakim
 
Database management system presentation
Database management system presentationDatabase management system presentation
Database management system presentation
sameerraaj
 

Destaque (13)

Extensible Data Modeling
Extensible Data ModelingExtensible Data Modeling
Extensible Data Modeling
 
Speed up your Symfony2 application and build awesome features with Redis
Speed up your Symfony2 application and build awesome features with RedisSpeed up your Symfony2 application and build awesome features with Redis
Speed up your Symfony2 application and build awesome features with Redis
 
Introduction to MySQL
Introduction to MySQLIntroduction to MySQL
Introduction to MySQL
 
Introduction to Mysql
Introduction to MysqlIntroduction to Mysql
Introduction to Mysql
 
Database Management System Introduction
Database Management System IntroductionDatabase Management System Introduction
Database Management System Introduction
 
CBSE XII Database Concepts And MySQL Presentation
CBSE XII Database Concepts And MySQL PresentationCBSE XII Database Concepts And MySQL Presentation
CBSE XII Database Concepts And MySQL Presentation
 
1. Introduction to DBMS
1. Introduction to DBMS1. Introduction to DBMS
1. Introduction to DBMS
 
Alphorm.com Support de la Formation PHP MySQL
Alphorm.com Support de la Formation PHP MySQLAlphorm.com Support de la Formation PHP MySQL
Alphorm.com Support de la Formation PHP MySQL
 
Database Management Systems (DBMS)
Database Management Systems (DBMS)Database Management Systems (DBMS)
Database Management Systems (DBMS)
 
Introduction to PHP
Introduction to PHPIntroduction to PHP
Introduction to PHP
 
Php mysql ppt
Php mysql pptPhp mysql ppt
Php mysql ppt
 
Introduction to database
Introduction to databaseIntroduction to database
Introduction to database
 
Database management system presentation
Database management system presentationDatabase management system presentation
Database management system presentation
 

Semelhante a MySQL & NoSQL from a PHP Perspective

No sql and sql - open analytics summit
No sql and sql - open analytics summitNo sql and sql - open analytics summit
No sql and sql - open analytics summit
Open Analytics
 
Microsoft Openness Mongo DB
Microsoft Openness Mongo DBMicrosoft Openness Mongo DB
Microsoft Openness Mongo DB
Heriyadi Janwar
 
Introducing Hibernate OGM: porting JPA applications to NoSQL, Sanne Grinovero...
Introducing Hibernate OGM: porting JPA applications to NoSQL, Sanne Grinovero...Introducing Hibernate OGM: porting JPA applications to NoSQL, Sanne Grinovero...
Introducing Hibernate OGM: porting JPA applications to NoSQL, Sanne Grinovero...
OpenBlend society
 
Fb talk arch_summit
Fb talk arch_summitFb talk arch_summit
Fb talk arch_summit
drewz lin
 
Data massage! databases scaled from one to one million nodes (ulf wendel)
Data massage! databases scaled from one to one million nodes (ulf wendel)Data massage! databases scaled from one to one million nodes (ulf wendel)
Data massage! databases scaled from one to one million nodes (ulf wendel)
Zhang Bo
 

Semelhante a MySQL & NoSQL from a PHP Perspective (20)

NoSQL databases
NoSQL databasesNoSQL databases
NoSQL databases
 
New Persistence Features in Spring Roo 1.1
New Persistence Features in Spring Roo 1.1New Persistence Features in Spring Roo 1.1
New Persistence Features in Spring Roo 1.1
 
NoSQL or not NoSQL?
NoSQL or not NoSQL?NoSQL or not NoSQL?
NoSQL or not NoSQL?
 
flickr's architecture & php
flickr's architecture & php flickr's architecture & php
flickr's architecture & php
 
Nashville analytics summit aug9 no sql mike king dell v1.5
Nashville analytics summit aug9 no sql mike king dell v1.5Nashville analytics summit aug9 no sql mike king dell v1.5
Nashville analytics summit aug9 no sql mike king dell v1.5
 
Scaling with Riak at Showyou
Scaling with Riak at ShowyouScaling with Riak at Showyou
Scaling with Riak at Showyou
 
SQL or NoSQL, that is the question!
SQL or NoSQL, that is the question!SQL or NoSQL, that is the question!
SQL or NoSQL, that is the question!
 
No sql and sql - open analytics summit
No sql and sql - open analytics summitNo sql and sql - open analytics summit
No sql and sql - open analytics summit
 
Introduction to Graph databases and Neo4j (by Stefan Armbruster)
Introduction to Graph databases and Neo4j (by Stefan Armbruster)Introduction to Graph databases and Neo4j (by Stefan Armbruster)
Introduction to Graph databases and Neo4j (by Stefan Armbruster)
 
Microsoft Openness Mongo DB
Microsoft Openness Mongo DBMicrosoft Openness Mongo DB
Microsoft Openness Mongo DB
 
Big Data technology Landscape
Big Data technology LandscapeBig Data technology Landscape
Big Data technology Landscape
 
NOsql Presentation.pdf
NOsql Presentation.pdfNOsql Presentation.pdf
NOsql Presentation.pdf
 
Rails ORM De-mystifying Active Record has_many
Rails ORM De-mystifying Active Record has_manyRails ORM De-mystifying Active Record has_many
Rails ORM De-mystifying Active Record has_many
 
Combine Spring Data Neo4j and Spring Boot to quickl
Combine Spring Data Neo4j and Spring Boot to quicklCombine Spring Data Neo4j and Spring Boot to quickl
Combine Spring Data Neo4j and Spring Boot to quickl
 
Solr cloud the 'search first' nosql database extended deep dive
Solr cloud the 'search first' nosql database   extended deep diveSolr cloud the 'search first' nosql database   extended deep dive
Solr cloud the 'search first' nosql database extended deep dive
 
Introducing Hibernate OGM: porting JPA applications to NoSQL, Sanne Grinovero...
Introducing Hibernate OGM: porting JPA applications to NoSQL, Sanne Grinovero...Introducing Hibernate OGM: porting JPA applications to NoSQL, Sanne Grinovero...
Introducing Hibernate OGM: porting JPA applications to NoSQL, Sanne Grinovero...
 
Fb talk arch_summit
Fb talk arch_summitFb talk arch_summit
Fb talk arch_summit
 
Data massage! databases scaled from one to one million nodes (ulf wendel)
Data massage! databases scaled from one to one million nodes (ulf wendel)Data massage! databases scaled from one to one million nodes (ulf wendel)
Data massage! databases scaled from one to one million nodes (ulf wendel)
 
A review of the state of the art in Machine Learning on the Semantic Web
A review of the state of the art in Machine Learning on the Semantic WebA review of the state of the art in Machine Learning on the Semantic Web
A review of the state of the art in Machine Learning on the Semantic Web
 
NoSQL databases
NoSQL databasesNoSQL databases
NoSQL databases
 

Último

Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
panagenda
 
Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for Success
UXDXConf
 
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptxHarnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
FIDO Alliance
 
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider  Progress from Awareness to Implementation.pptxTales from a Passkey Provider  Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
FIDO Alliance
 

Último (20)

Overview of Hyperledger Foundation
Overview of Hyperledger FoundationOverview of Hyperledger Foundation
Overview of Hyperledger Foundation
 
Introduction to FIDO Authentication and Passkeys.pptx
Introduction to FIDO Authentication and Passkeys.pptxIntroduction to FIDO Authentication and Passkeys.pptx
Introduction to FIDO Authentication and Passkeys.pptx
 
2024 May Patch Tuesday
2024 May Patch Tuesday2024 May Patch Tuesday
2024 May Patch Tuesday
 
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
 
ERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage IntacctERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage Intacct
 
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
 
Microsoft CSP Briefing Pre-Engagement - Questionnaire
Microsoft CSP Briefing Pre-Engagement - QuestionnaireMicrosoft CSP Briefing Pre-Engagement - Questionnaire
Microsoft CSP Briefing Pre-Engagement - Questionnaire
 
Oauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoftOauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoft
 
(Explainable) Data-Centric AI: what are you explaininhg, and to whom?
(Explainable) Data-Centric AI: what are you explaininhg, and to whom?(Explainable) Data-Centric AI: what are you explaininhg, and to whom?
(Explainable) Data-Centric AI: what are you explaininhg, and to whom?
 
Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for Success
 
Continuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on ThanabotsContinuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
 
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptxHarnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
 
Intro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераIntro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджера
 
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider  Progress from Awareness to Implementation.pptxTales from a Passkey Provider  Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
 
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdfWhere to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
 
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdfIntroduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
 
Portal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russePortal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russe
 
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
 
State of the Smart Building Startup Landscape 2024!
State of the Smart Building Startup Landscape 2024!State of the Smart Building Startup Landscape 2024!
State of the Smart Building Startup Landscape 2024!
 
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdfLinux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
 

MySQL & NoSQL from a PHP Perspective

  • 1. MySQL & NoSQL from a PHP perspective Tim Juravich @timjuravich October 4th, 2011 - Tim Juravich
  • 2. MySQL & NoSQL from a PHP perspective Who Am I? • Developer, Startup Junky • Lead projects in .NET, Ruby, and PHP • Book on PHP & CouchDB development out early next year from Packt Publishing October 4th, 2011 - Tim Juravich
  • 3. MySQL & NoSQL from a PHP perspective What we’ll talk about today • A high level discussion on NoSQL databases from the PHP developer POV • We’ll focus on Data Models • What we won’t be able to talk about: - How each database scales, stores it’s data. - CAP Theorem (http://tinyurl.com/nosql-cap) • We’ll touch on tools for us PHP Developers October 4th, 2011 - Tim Juravich
  • 4. MySQL & NoSQL from a PHP perspective Data Models A data model defines how your application stores data and how it makes associations. If you force an incorrect data model into your application...you’re probably going to have a hard time. October 4th, 2011 - Tim Juravich
  • 5. MySQL & NoSQL from a PHP perspective Traditional relational Model (MySQL) addresses users id address city state zip user_id id first_name last_name 123 Main 1 Seattle WA 98101 1 Street 1 John Doe 120 Pike 2 Seattle WA 98101 1 Street 2 Jane Doe 321 2nd 3 Seattle WA 98101 2 Ave phone numbers id number primary user_id 1 555-867-5309 1 1 2 555-867-5309 0 1 3 555-867-5309 1 2 October 4th, 2011 - Tim Juravich
  • 6. MySQL & NoSQL from a PHP perspective What’s wrong with this? • Nothing really...there are just limitations - Due to normalization as your data grows so does the complexity of your database - As your database grows, writing becomes a bottleneck - Difficult to scale horizontally - Sometimes tables are just too limiting October 4th, 2011 - Tim Juravich
  • 7. MySQL & NoSQL from a PHP perspective NoSQL databases are born • History - Some NoSQL databases have been around forever - In 2004 & 2005 they explode • NoSQL really means “Not Only SQL” October 4th, 2011 - Tim Juravich
  • 8. MySQL & NoSQL from a PHP perspective NoSQL • The Good News - Different tools for different situations - Flexible (Schema-less) - Focused on scalability out of the box - New data models • The Bad News - No common standards - Relatively immature - New data models October 4th, 2011 - Tim Juravich
  • 9. MySQL & NoSQL from a PHP perspective There are no silver bullets! October 4th, 2011 - Tim Juravich
  • 10. MySQL & NoSQL from a PHP perspective Size vs. Complexity Key/value Stores Column Stores Document Database Scale To Size Graph Database Typical RDMBS RDMBS Performance Line Scale To Complexity October 4th, 2011 - Tim Juravich
  • 11. MySQL & NoSQL from a PHP perspective Key Value Stores • Definition - Access to a value based on a unique key - Think of this in terms of a hash-table, or in PHP an associative array. user_1 user_2 “John Doe” { name: “John Doe”, email: john@example.com”, phone: “8675309” } October 4th, 2011 - Tim Juravich
  • 12. MySQL & NoSQL from a PHP perspective Redis • Strengths - Incredibly Fast - Pub/Sub support redis> set im.a.key "im.a.value" OK - Simple CLI redis> get im.a.key "im.a.value" • Weaknesses - It can feel limiting with a complex use case • Use it for - Rapidly changing data. - Stocks, Analytics, Real-time collection/communication October 4th, 2011 - Tim Juravich
  • 13. MySQL & NoSQL from a PHP perspective Redis & PHP • There are a variety of Redis & PHP toolkits (http://tinyurl.com/redis-php) • My favorite is Predis (https://github.com/nrk/predis) <?php $redis = new PredisClient(); $redis->set('foo', 'bar'); $value = $redis->get('foo'); • Twitter clone to play with: (http://redis.io/topics/twitter-clone) October 4th, 2011 - Tim Juravich
  • 14. MySQL & NoSQL from a PHP perspective Column Stores • Definition - Similar to relational database, but it flips it all around. Instead of storing records, column stores store all of the values for a column together in a stream. From there, you can use an index to get column values for a particular record. - Can handle 4 or 5 dimensions Keyspace, Column Family, Column Family Row, Column Keyspace, Column Family, Column Family Row, Super Column, Column October 4th, 2011 - Tim Juravich
  • 15. MySQL & NoSQL from a PHP perspective Column Stores example-db (Keyspace) users (Column Family) johndoe (key) name (column) email (column) phone (column) John Doe john@example.com 5558675309 janedoe (key) name (column) email (column) Jane Doe jane@example.com October 4th, 2011 - Tim Juravich
  • 16. MySQL & NoSQL from a PHP perspective Cassandra • Strengths - Can handle some serious data - Writes are much faster than reads - Hadoop integration • Weaknesses - Complex for it’s offering and bloated • Use it for - Apps with a lot of writing. Serious applications. October 4th, 2011 - Tim Juravich
  • 17. MySQL & NoSQL from a PHP perspective Cassandra & PHP • Thrift • There are a few PHP libraries (http://tinyurl.com/cassandra-php) • My favorite is phpcassa (https://github.com/thobbs/phpcassa) October 4th, 2011 - Tim Juravich
  • 18. MySQL & NoSQL from a PHP perspective Cassandra & PHP (phpcassa) <?php // Connect to Keyspace $pool = new ConnectionPool('example-db'); // Create ColumnFamily $users = new ColumnFamily($pool, 'users'); // Create User $users->insert('2’, array('name' => 'Jane Doe', 'email' => 'jane@example.com')); // Get User $users->get('2'); October 4th, 2011 - Tim Juravich
  • 19. MySQL & NoSQL from a PHP perspective Document Databases • Definition - Documents provide access to structured data, without a schema. - Buckets of key-value pairs inside of a self contained object. - Friendliest NoSQL databases for PHP developers October 4th, 2011 - Tim Juravich
  • 20. MySQL & NoSQL from a PHP perspective Document Databases { id: 'johndoe', { id: 'janedoe', name: 'John Doe', name: 'Jane Doe', email : ‘john@example.com’, email : ‘jane@example.com’, phone : ‘5558675309’ } addresses : [ “address1” : { address: '123 main street', city: 'seattle', state: 'WA', zip: ‘98101’ }, “address2” : { address: '123 main street', city: 'seattle', state: 'WA', zip: ‘98101’ } ] } October 4th, 2011 - Tim Juravich
  • 21. MySQL & NoSQL from a PHP perspective MongoDB • Strengths - Familiar Query Language $post->where('id', $this->getID()); - A lot of developer toolkits • Weaknesses - Sharding can be a pain • Use it for - Things you might do with MySQL, but schemas are getting in the way. October 4th, 2011 - Tim Juravich
  • 22. MySQL & NoSQL from a PHP perspective MongoDB & PHP • A TON of libraries (http://tinyurl.com/mongo-php) - Doctrine - Cake - Code Ignitor - Symfony - Zend - etc. • My favorite is ActiveMongo (https://github.com/crodas/ActiveMongo) October 4th, 2011 - Tim Juravich
  • 23. MySQL & NoSQL from a PHP perspective MongoDB & PHP (Active Mongo) <?php ActiveMongo::connect('example-db', 'localhost'); class User extends ActiveMongo { public $name; public $email; } $user = new User(); $user->name = 'John Doe'; $user->email = 'john@example.com'; // Insert $user->save(); // Update $user->email = 'john@example.org'; $user->save(); October 4th, 2011 - Tim Juravich
  • 24. MySQL & NoSQL from a PHP perspective CouchDB • Strengths - Bi-lateral replication (master-master) - Slick RESTful JSON API, easy to use • Weaknesses - Need some Javascript chops - Slower writes • Use it for - Mobile, CRM, CMS systems, multi-site deployments October 4th, 2011 - Tim Juravich
  • 25. MySQL & NoSQL from a PHP perspective CouchDB & PHP • Not as many as MongoDB (http://tinyurl.com/couch-php) - Doctrine - Variety of standalone libraries • My favorite is Sag (https://github.com/sbisbee/sag) October 4th, 2011 - Tim Juravich
  • 26. MySQL & NoSQL from a PHP perspective CouchDB & PHP (Sag) <?php class User { public $name; public $email; } $user = new User(); $user->name = 'John Doe'; $user->email = 'john@example.com'; $sag = new Sag('127.0.0.1', '5984'); $sag->setDatabase('example-db'); $sag->post($user); October 4th, 2011 - Tim Juravich
  • 27. MySQL & NoSQL from a PHP perspective Graph Databases • Definition - Instead of tables, rows, columns, it's a flexible graph model that contains nodes. Nodes have properties and relationships to other nodes. October 4th, 2011 - Tim Juravich
  • 28. MySQL & NoSQL from a PHP perspective Graph Databases October 4th, 2011 - Tim Juravich
  • 29. MySQL & NoSQL from a PHP perspective Neo4j • Strengths - Fully transactional - Flexible API • Weaknesses - A completely different way of thinking - Complex • Use it for - Social relations, road maps, network topologies October 4th, 2011 - Tim Juravich
  • 30. MySQL & NoSQL from a PHP perspective Neo4j & PHP • There are a few of options (http://tinyurl.com/neo4j-php) - REST API - Thrift • It’s pretty complex... October 4th, 2011 - Tim Juravich
  • 31. MySQL & NoSQL from a PHP perspective So which DB should you use? • Don’t rule out relational databases • Do your homework • Every project is different • NoSQL probably should be avoided in these areas - Transactions, orders, anything where money changes hands - Business critical data or line of business applications October 4th, 2011 - Tim Juravich
  • 32. Thanks! Feel free to reach out with any questions: tim.juravich@gmail.com @timjuravich October 4th, 2011 - Tim Juravich