Rotterdam.php CouchDB2. CouchDB
relax
Sander van de Graaf
svdgraaf
19. “[The NoSQL movement] departs from the relational
model altogether, it should therefore have been called
more appropriately ‘NoREL’, or something to that
effect.”
- Carlo Strozzi
21. DISTRIBUTED VS NON-DISTRIBUTED
Distributed Non distributed
Amazon Dynamo Redis
Amazon S3 Tokyo Tyrant
Scalaris MemcacheDb
CouchDB Amazon SimpleDb
Voldemort
Riak
MongoDb
BigTable
Cassandra
HyperTable
HBase
source: Vineet Gupta http://bit.ly/5kuQgB
22. DATAMODEL STORAGE
Key/Value Document Column
Amazon Dynamo Amazon SimpleDb Cassandra
Amazon S3 CouchDB Google BigTable
Redis MongoDb HBase
Scalaris Riak Hyperbase
Voldemort
23. STORAGE
Memory Configurable Disk
Scalaris BigTable CouchDB
Redis Cassandra MongoDb
Hbase Riak
HyperTable Voldemort
42. REST
• GET • SELECT
• PUT • UPDATE
• POST • INSERT
• DELETE • DELETE
• COPY • ...
44. JSON
{
total_rows: 2,
offset: 0,
rows: [
{
id: '_design/foobar',
key: '_design/foobar',
value: { rev: '5-982b2fc36835715b2aae54609b5d5f1e' }
},
{
id: 'f0e1fd96eb6e094f74dda8d949000a6a',
key: 'f0e1fd96eb6e094f74dda8d949000a6a',
value: { rev: '1-86bca407fce8234a63c90ff549b56b10' }
},
]
}
48. CouchDB
relax
CouchDB
relax
CouchDB
relax
CouchDB
relax
50. CouchDB
relax
CouchDB
relax
CouchDB
relax
51. Laptop Desktop
CouchDB
relax
CouchDB
relax Phone
CouchDB
relax
52. US NL
CouchDB
relax
CouchDB
relax
CouchDB
relax
53. IDG US IDG AUSTRALIA
CouchDB
relax
CouchDB
relax CouchDB
relax
CouchDB
relax
CouchDB
relax CouchDB
relax
CouchDB
relax
CouchDB
relax
CouchDB
relax
IDG NL IDG DE
54. IDG US IDG Australia IDG Poland IDG Romania
CouchDB
relax
CouchDB
relax
CouchDB
relax
CouchDB
relax
CouchDB CouchDB
CouchDB
relax
CouchDB
relax
CouchDB
relax
relax relax
IDG NL IDG UK IDG Spania IDG Portugal
CouchDB
relax
CouchDB
relax CouchDB CouchDB CouchDB CouchDB
relax relax relax relax
IDG Germany IDG Brasil IDG Ghana IDG Hungary
CouchDB
relax
CouchDB
relax
CouchDB
relax CouchDB CouchDB
relax relax
IDG India IDG Thailand IDG Japan IDG Vietnam
CouchDB
relax
CouchDB
relax
CouchDB
relax
CouchDB
relax
CouchDB
relax
CouchDB
relax
60. SELECT * FROM documents WHERE id = 123
GET /documents/123
PUT /documents/123
POST /documents/123
DELETE /documents/123
etc.
63. INPUT
IP Bytes
212.122.174.13 18271
212.122.174.13 191726
212.122.174.13 198
74.119.8.111 91272
74.119.8.111 8371
212.122.174.13 43
64. MAPPER => REDUCER
IP Bytes
18271
191726
212.122.174.13
198
43
91272
74.119.8.111
8371
65. AFTER REDUCE
IP Bytes
212.122.174.13 210238
74.119.8.111 99643
75. _DESIGN
{
_id: '_design/foobar',
_rev: '8-03a6bc983c721b1cc0ae4b461326bc31',
language: 'javascript',
views: {
foo: { map: 'function(doc) {n emit(doc.foo,1);n}',
reduce: 'function(keys, values, rereduce) {return sum(values);}' }
}
}
76. _DESIGN
{
_id: '_design/foobar',
_rev: '8-03a6bc983c721b1cc0ae4b461326bc31',
language: 'javascript',
views: {
foo: { map: 'function(doc) {n emit(doc.foo,1);n}',
reduce: 'function(keys, values, rereduce) {return sum(values);}' }
},
fulltext: {
by_subject: {
index:"function(doc) { var ret=new Document(); ret.add
(doc.subject); return ret }"
},
}
}
78. _DESIGN
function(doc) {
var result = new Document();
result.add(doc.subject, {"field":"subject", "store":"yes"});
result.add(doc.content, {"field":"subject"});
result.add(new Date(), {"field":"indexed_at"});
return result;
}
84. CouchDB
relax
CouchDB
relax
CouchDB
relax