Anda di halaman 1dari 32

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 well talk about today


A high level discussion on NoSQL databases from the PHP developer POV
Well focus on Data Models
What we wont be able to talk about:
- How each database scales, stores its data.
- CAP Theorem (http://tinyurl.com/nosql-cap)

Well 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...youre


probably going to have a hard time.

October 4th, 2011 - Tim Juravich

MySQL & NoSQL from a PHP perspective

Traditional relational Model (MySQL)


users

addresses
id

address

city

state

zip

user_id

123 Main
Street

Seattle

WA

98101

Seattle

WA

98101

Seattle

WA

98101

2
3

120 Pike
Street
321 2nd
Ave

phone numbers
id

number

primary

user_id

1
2

555-867-5309
555-867-5309

1
0

1
1

555-867-5309

2
October 4th, 2011 - Tim Juravich

id

first_name last_name

John

Doe

Jane

Doe

MySQL & NoSQL from a PHP perspective

Whats 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

Scale To Size

Column Stores
Document Database
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
- Simple CLI

Weaknesses

redis> set im.a.key "im.a.value"


OK
redis> get im.a.key
"im.a.value"

- 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 Predis\Client();
$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 its 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',
name: 'John Doe',
email : john@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 }
]
}

{ id: 'janedoe',
name: 'Jane Doe',
email : jane@example.com,
}

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

Its pretty complex...

October 4th, 2011 - Tim Juravich

MySQL & NoSQL from a PHP perspective

So which DB should you use?


Dont 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

Anda mungkin juga menyukai