Generative Artificial Intelligence: How generative AI works.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
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