CodeFest 2010. Билык В. — CouchDB: от теории к практике

30

Transcript of CodeFest 2010. Билык В. — CouchDB: от теории к практике

Page 1: CodeFest 2010. Билык В. — CouchDB: от теории к практике
Page 2: CodeFest 2010. Билык В. — CouchDB: от теории к практике
Page 4: CodeFest 2010. Билык В. — CouchDB: от теории к практике
Page 5: CodeFest 2010. Билык В. — CouchDB: от теории к практике
Page 6: CodeFest 2010. Билык В. — CouchDB: от теории к практике

“The learning curve for CouchDB is quite shallow”

Page 7: CodeFest 2010. Билык В. — CouchDB: от теории к практике

“The only drawback is that you may need to do a lot of unlearning if you're well versed in SQL”

Page 8: CodeFest 2010. Билык В. — CouchDB: от теории к практике

Keys&Values

Page 9: CodeFest 2010. Билык В. — CouchDB: от теории к практике

{ "type": "passport", "id": "F7802033", "countryCode": "IND", "surname": "Rai", "givenNames": [ "Aishwarya" ], "sex": "F", "birthDate": "01/11/1973", "placeOfIssue": "Mumbai"}

Page 10: CodeFest 2010. Билык В. — CouchDB: от теории к практике

{ "type": "passport", "id": "F7802033", "countryCode": "IND", "surname": "Rai", "givenNames": [ "Aishwarya" ], "sex": "F", "birthDate": "01/11/1973", "placeOfIssue": "Mumbai"}

Page 11: CodeFest 2010. Билык В. — CouchDB: от теории к практике
Page 12: CodeFest 2010. Билык В. — CouchDB: от теории к практике
Page 13: CodeFest 2010. Билык В. — CouchDB: от теории к практике
Page 14: CodeFest 2010. Билык В. — CouchDB: от теории к практике

{ "type": "passport", "id": "F7802033", "countryCode": "IND", "surname": "Rai", "givenNames": [ "Aishwarya" ], "sex": "F", "birthDate": "01/11/1973", "placeOfIssue": "Mumbai"}

Page 15: CodeFest 2010. Билык В. — CouchDB: от теории к практике

function(doc){ if (doc.type == ʻpassportʼ) { emit(doc._id, doc); }}

Page 16: CodeFest 2010. Билык В. — CouchDB: от теории к практике

{ "total_rows": 100500, "offset": 0, "rows": [ { "id": "F7802033", "key": "F7802033", "value": { "_id": "F7802033", "type": "passport", "countryCode": "IND", "surname": "Rai", ... } },...

Page 17: CodeFest 2010. Билык В. — CouchDB: от теории к практике

function(doc){ if (doc.type == ʻpassportʼ) { emit(doc._id, null); }}

Page 18: CodeFest 2010. Билык В. — CouchDB: от теории к практике

{ "total_rows": 100500, "offset": 0, "rows": [ { "id": "F7802033", "key": "F7802033", "value": null },...

Page 19: CodeFest 2010. Билык В. — CouchDB: от теории к практике

... "rows": [{ "id": "F7802033", "key": "F7802033", "value": null, "doc": { "_id": "F7802033", "type": "passport", "countryCode": "IND", "surname": "Rai", ... } },...

?include_docs=true

Page 20: CodeFest 2010. Билык В. — CouchDB: от теории к практике
Page 21: CodeFest 2010. Билык В. — CouchDB: от теории к практике

?skip=100&limit=10

...skip...skip... ...skip...skip...

!

Page 22: CodeFest 2010. Билык В. — CouchDB: от теории к практике

?startkey=foo&limit=11

!... ...

Page 23: CodeFest 2010. Билык В. — CouchDB: от теории к практике

{ "_id": "FFE2...", "type": "post", "title": "Умники и умницы CodeFest", "text": "Сегодня пятница, а значит осталась всего неделя до CodeFest в Новосибирске..." ...}

{ "type": "comment", "post": "FFE2...", "text": "Хотелось бы сходить." ...}

{ "type": "comment", "post": "FFE2...", "text": "Обязательно буду!" ...}

Page 24: CodeFest 2010. Билык В. — CouchDB: от теории к практике

function(doc){ if (doc.type == ʻpostʼ) {

emit([doc._id,0], null);

} else if (doc.type == ʼcommentʼ) {

emit([doc.post,1], null);

}}

["FFE2...",0] → {"type": "post", "title": "Умники и умницы CodeFest" ...}

["FFE2...",1] → {"type": "comment", "text": "Хотелось бы сходить."...}

["FFE2...",1] → {"type": "comment", "text": "Обязательно буду!"...}

Page 25: CodeFest 2010. Билык В. — CouchDB: от теории к практике

Остроумный коментарий-42?anonymous {

"type": "comment_rating", "comment": "ABE2...", "rating": -1 ...}

Page 26: CodeFest 2010. Билык В. — CouchDB: от теории к практике

function( doc ) {

if (doc.type == ʼcomment_ratingʼ ) {emit(doc.comment, doc.rating);

}}

function( keys, values ) { return sum(values);}

Page 27: CodeFest 2010. Билык В. — CouchDB: от теории к практике

GQL: SELECT * FROM Person WHERE birth_year >= :min_year AND height >= :min_height #ERROR

["heavy",191] → {"type": "boxer", "name": "David Deron Haye" ...}...["heavy",201] → {"type": "boxer", "name": "Vitaliy Klychko" ...}...["heavy",213] → {"type": "boxer", "name": "Nikolai Valuev" ...}

Page 28: CodeFest 2010. Билык В. — CouchDB: от теории к практике

function( doc ) {if (doc.type == ʼorderʼ ) {

for(i in doc.orderLines) {for(j in doc.orderLines) {

if ( i != j ) {emit([ doc.orderLines[i].article, doc.orderLines[j].article ], 1);

}

......

Page 29: CodeFest 2010. Билык В. — CouchDB: от теории к практике

Cartesian explosion

Page 30: CodeFest 2010. Билык В. — CouchDB: от теории к практике