MySQL & NoSQL from a PHP Perspective

13,858 views
13,536 views

Published on

Published in: Technology
0 Comments
11 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
13,858
On SlideShare
0
From Embeds
0
Number of Embeds
27
Actions
Shares
0
Downloads
130
Comments
0
Likes
11
Embeds 0
No embeds

No notes for slide

MySQL & NoSQL from a PHP Perspective

  1. 1. MySQL & NoSQL from aPHP perspective Tim Juravich @timjuravich October 4th, 2011 - Tim Juravich
  2. 2. MySQL & NoSQL from a PHP perspectiveWho 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. 3. MySQL & NoSQL from a PHP perspectiveWhat 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. 4. MySQL & NoSQL from a PHP perspectiveData ModelsA data model defines how your application stores data and how itmakes associations.If you force an incorrect data model into your application...you’reprobably going to have a hard time. October 4th, 2011 - Tim Juravich
  5. 5. MySQL & NoSQL from a PHP perspective Traditional relational Model (MySQL) addresses usersid address city state zip user_id id first_name last_name 123 Main1 Seattle WA 98101 1 Street 1 John Doe 120 Pike2 Seattle WA 98101 1 Street 2 Jane Doe 321 2nd3 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. 6. MySQL & NoSQL from a PHP perspectiveWhat’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. 7. MySQL & NoSQL from a PHP perspectiveNoSQL 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. 8. MySQL & NoSQL from a PHP perspectiveNoSQL• 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. 9. MySQL & NoSQL from a PHP perspectiveThere are no silver bullets! October 4th, 2011 - Tim Juravich
  10. 10. MySQL & NoSQL from a PHP perspectiveSize 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. 11. MySQL & NoSQL from a PHP perspectiveKey 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. 12. MySQL & NoSQL from a PHP perspectiveRedis• 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. 13. MySQL & NoSQL from a PHP perspectiveRedis & 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. 14. MySQL & NoSQL from a PHP perspectiveColumn 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. 15. MySQL & NoSQL from a PHP perspectiveColumn 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. 16. MySQL & NoSQL from a PHP perspectiveCassandra• 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. 17. MySQL & NoSQL from a PHP perspectiveCassandra & 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. 18. MySQL & NoSQL from a PHP perspectiveCassandra & 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. 19. MySQL & NoSQL from a PHP perspectiveDocument 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. 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. 21. MySQL & NoSQL from a PHP perspectiveMongoDB• 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. 22. MySQL & NoSQL from a PHP perspectiveMongoDB & 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. 23. MySQL & NoSQL from a PHP perspectiveMongoDB & PHP (Active Mongo)<?phpActiveMongo::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. 24. MySQL & NoSQL from a PHP perspectiveCouchDB• 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. 25. MySQL & NoSQL from a PHP perspectiveCouchDB & 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. 26. MySQL & NoSQL from a PHP perspectiveCouchDB & PHP (Sag)<?phpclass 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. 27. MySQL & NoSQL from a PHP perspectiveGraph Databases• Definition - Instead of tables, rows, columns, its a flexible graph model that contains nodes. Nodes have properties and relationships to other nodes. October 4th, 2011 - Tim Juravich
  28. 28. MySQL & NoSQL from a PHP perspectiveGraph Databases October 4th, 2011 - Tim Juravich
  29. 29. MySQL & NoSQL from a PHP perspectiveNeo4j• 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. 30. MySQL & NoSQL from a PHP perspectiveNeo4j & 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. 31. MySQL & NoSQL from a PHP perspectiveSo 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. 32. Thanks!Feel free to reach out with any questions: tim.juravich@gmail.com @timjuravich October 4th, 2011 - Tim Juravich

×