Alternative Databases
Scott MacVicar
Dutch PHP Conference 2009
Saturday, 13 June 2009
Who are you?
Saturday, 13 June 2009
History Lesson
Saturday, 13 June 2009
First Data
Storage
Saturday, 13 June 2009
Relational
Databases FTW!
Relational Database is Born
Saturday, 13 June 2009
Parts of a RDBMS?
Maths SQL
Relation Table
Derived
Result Set
Relation
Tuple Row
Attribute Column
Domain Type
Saturday, 13 June 2009
SQL Purpose
Retrieval
Manipulation
Transactions
Saturday, 13 June 2009
SQL Fails
Complex Specification
Join Fails
Where clause
Saturday, 13 June 2009
RDBMS through the Ages
Saturday, 13 June 2009
RDBMs suck
Adding fields is hard
Complex
Copying / Backup database
Performance
Saturday, 13 June 2009
Scaling?
Master Master Master
Database Database Database
App App App
Saturday, 13 June 2009
Scaling?
Slave Master Slave
Database Database Database
App App App
Saturday, 13 June 2009
“Write consistency is the reason RDBMS are
imploding under their own weight.”
Saturday, 13 June 2009
Why do we use a RDBMs?
Saturday, 13 June 2009
RDBMS Hangups
Saturday, 13 June 2009
SQL
blog comments
blog_id comment_id
title blog_id
publish_time author
author content
content
Saturday, 13 June 2009
Save See
Secure Share
Saturday, 13 June 2009
Memcache + BerkleyDB =
MemcacheDB?
Saturday, 13 June 2009
MemcacheDB
Memcache isn’t persistent :(
Memcache dependency
Memcache does what it does well
Saturday, 13 June 2009
MemcacheDB
Simple Protocol
Tried and tested DB
Transactions
Replication
Saturday, 13 June 2009
Using MemcacheDB
Saturday, 13 June 2009
MemcacheDB + PHP
Saturday, 13 June 2009
Blog Example
Saturday, 13 June 2009
Tokyo Cabinet
Collection of types
Created for mixi.jp (Facebook of Japan)
Common API
New in PHP6, maybe PHP 5.3.1
Saturday, 13 June 2009
Tokyo Hash Database
Constant time for most operations
Second Hash for collisions
Key values stored in a bucket array
Saturday, 13 June 2009
Buckets!
Key Value
Key Value
Key Value
Key Value
Key Value
Key Value
Saturday, 13 June 2009
Tokyo Cabinet Hash
Saturday, 13 June 2009
B+ Tree
Ordered Access
Multiple Keys
Cursor
Saturday, 13 June 2009
Fixed-Length
Access by numeric key
No keys stored
Fast
Saturday, 13 June 2009
Fixed-Length
0
value value value value value value value
8
value value value value value value value
16
value value value value value value value
24
value value value value value value value
32
value value value value value value value
40
Saturday, 13 June 2009
Table Database
Schema-less
Named Attributes
Indexes
Queries
Saturday, 13 June 2009
Table Database
Primary Key name value name value name value
Primary Key name value name value name value
Primary Key name value name value name value
Saturday, 13 June 2009
Tokyo Tyrant
Network wrapper
Speaks Memcache / HTTP
Extension in works by Mikko
Saturday, 13 June 2009
Tokyo Tyrant
High Availability
Asynchronous Updates
Lua scripting
Saturday, 13 June 2009
CouchDB
REST
JavaScript
Erlang
Saturday, 13 June 2009
CouchDB
Document Database
Replication
Map Reduce
No Indexes
Saturday, 13 June 2009
Database Access
GET /_all_dbs
PUT /somedatabase/
DELETE /somedatabase/
GET /somedatabase/
Saturday, 13 June 2009
Document Access
GET /somedatabase/_all_docs
PUT /somedatabase/some_docid
POST /somedatabase/
DELETE /somedatabase/some_docid
GET /somedatabase/some_docid
Saturday, 13 June 2009
CouchDB Document
Saturday, 13 June 2009
CouchDB Document
Saturday, 13 June 2009
CouchDB Views
Saturday, 13 June 2009
CouchDB Scaling
Caching
Clustering
Layering
Saturday, 13 June 2009
CouchDB Wrappers
PHPillow - http://short.ie/buiqhu
Phly_Couch - http://short.ie/pa47gp
Saturday, 13 June 2009
CouchDB Blog
Saturday, 13 June 2009
CouchDB Blog Alternative
Saturday, 13 June 2009
Amazon SimpleDB
XML Rest
Application
Saturday, 13 June 2009
Amazon SimpleDB
Amazon Web Service
Cloudy
Rest / XML
Saturday, 13 June 2009
SimpleDB
1 billion attributes
5 seconds execution
1024 byte values
Saturday, 13 June 2009
SimpleDB Set
Saturday, 13 June 2009
SimpleDB Query
Saturday, 13 June 2009
SimpleDB API
Officially Amazon API - http://short.ie/apx6c3
Tarzan-AWS - http://short.ie/54rucx
Saturday, 13 June 2009
Questions?
http://talks.macvicar.net
http://couchdb.apache.org
http://aws.amazon.com
http://memcachedb.org
Saturday, 13 June 2009