Couchdb - WebKonf 2009

50 %
50 %
Information about Couchdb - WebKonf 2009
Technology

Published on October 8, 2009

Author: balinterdi

Source: slideshare.net

Description

The talk I gave about CouchDB at 3 Oct, 2009, at the Hungarian Web Conference. Slides are in Hungarian

A WEBRE TERMETT ADATBÁZIS

ÉRDI BÁLINT (ruby) web developer @baaz http://bucionrails.com

“Django may be built for the Web, but CouchDB is built of the Web. I’ve never seen software that so completely embraces the philosophies behind HTTP.” Jacob Kaplan-Moss, a Django egyik megalkotója

DOKUMENTUM ALAPÚ

SÉMA NÉLKÜLI

ELOSZTOTT

HIBATŰRŐ

SKÁLÁZHATÓ

RESTFUL HTTP/JSON API

minnesotaindependent.com KOOL!

KÖSZÖNÖM. KÉRDÉSEK?

ÁTTEKINTÉS • Történet • CouchDB, mint DB • fő tulajdonságok • adatbázis kezelés (elvek és gyakorlat) • teljesítmény avagy “a színes oszlopokat akarom” • CouchDB mint standalone application

TÖRTÉNET • Damien Katz hobbiprojektje • Apache open source projekt (2008-) • Erlang: funkcionális, konkurrens • 0.10.0

COUCHDB, MINT DB

DOKUMENTUM ALAPÚ • rekordok helyett dokumentumok • “evolving, self-contained documents” • JSON • típusok: minden, ami valid JSON • inkrementált id helyett UUID (universally unique)

{ “_id” : “BE2298A127D”, “_rev” : “2-5d0319b075a”, “type” : “book”, “title” : “CouchDB: The definitive guide”, “authors” : [“J. Chris Anderson”, “Jan Lehnardt”, “Noah Slater”], “published_year”: 2009, “categories” : [“db”, “web”] }

{ “_id” : “BE2298A127D”, “_rev” : “2-5d0319b075a”, “type” : “book”, “title” : “CouchDB: The definitive guide”, “authors” : [“J. Chris Anderson”, “Jan Lehnardt”, “Noah Slater”], “published_year”: 2009, “categories” : [“db”, “web”] }

SÉMA NÉLKÜLI • Az igazi világ nem (mindig) sematikus • nem kell előre tervezni • nincs szükség migrációra • ugyanaz a típus != ugyanaz a séma

ELOSZTOTT, HIBATŰRŐ • clustering replikáció segítségével • “crash-only design” • nincs shut-down process, egyszerűen csak terminál • nincs felülírás, mindig csak a db file végére ír • write & commit (két fázisban) • nem kell consistency-check v. fix-up újraindításkor

HTTP API • minden adatbázisműveletre • adatbázis létrehozás és törlés • dokumentum létrehozás és lekérés (view query) • kliensek: curl, wget, FF, Safari, stb. :) • “webre termett”

CREATE: PUT http://localhost:5984/webkonf/ couchdb_eloadas -d {‘title’: ...} READ: GET http://localhost:5984/webkonf/ couchdb_eloadas UPDATE: PUT http://localhost:5984/webkonf/ couchdb_eloadas -d {‘title’: ...} DELETE: DELETE http://localhost:5984/webkonf/ couchdb_eloadas?rev=...

CAP • Consistency: Minden kliens ugyanazt az adatot látja • Availability: Minden kliens megkapja az adat valamelyik verzióját • Partition tolerance: Az adatbázis szétosztható több szerverre

CAP ELV: VÁLASSZ 2-T

“Each node in a system should be able to make decisions purely based on local state. If you need to do something under high load with failures occurring and you need to reach agreement, you’re lost…” Werner Vogels, Amazon CTO and Vice President

AVAILABILITY > CONSISTENCY • nagy forgalmú, elosztott rendszereknél életbevágó • minden adat megvan a node-on • minden kérés rögtön megkapja a dok. valamely verzióját • replikáció után konzisztens (“eventual consistency”)

HOGYAN? MVCC • Multi Version Concurrency Control • minden íráskor új verzió keletkezik • az írás alatt beérkező olvasások a régi verziót kapják meg •a CouchDB a _rev mezőt automatikusan növeli • írás csak a legutolsó _rev átadásával lehetséges

CONFLICT MANAGEMENT • u. azon dokumentum két helyen változik meg • két verzió keletkezik • replikációkor konfliktus (_conflicts mező) • determinisztikus nyertes • az app feladata a konfliktus feloldása

ADATTÁROLÁS • B-treeben •1 B-tree / adatbázis •1 B-tree / view • DocId-vel indexelve • Query key-jel v. key range-dzsel nagyon gyors: O(log N)

ADATTÁROLÁS 2. • nincs felül-, csak hozzáírás (“append-only”) • compaction: a régi verziókat lenyesi

DESIGN DOKUMENTUM • nem adatot, design elemeket tárol • view-k, show és list functionök, stb. • mindenben megegyezik az “adatdokumentumokkal” • lehet több is egy adatbázisban

REPLIKÁCIÓ • adat szinkronizáció módja • két adatbázis között • inkrementális: csak az új ill. módosult dokumentumok replikálódnak • mindig egyirányú (source és target) • indított és folyamatos (>= 0.10.0) replikáció

VALIDÁCIÓ •a régi dok., az új dok. és a user alapján • true : mehet, false v. raise: nem • alkalmas hozzáférés kezelésre is

LEKÉRDEZÉS • csak view-kon keresztül • view: map + reduce funkciópár • indexelt (B-treeben) • javascript • kevésbé flexibilis, mint az SQL, de indexelt •a view a design dokumentumban tárolódik

MAP • először minden dokumentumon végigmegy • utána csak dok. változáskor fut le • mindegyikhez 0..n key-value párt generál a view-ban •a kimenet key szerint rendezve van!

function map(doc) { if ( doc.type == “book” ) { if ( doc.title ) { emit(doc.title, doc) } } }

REDUCE • opcionális • aggregáló funkció • inputja lehet •a Map által generált sor • előző reduce által generált sor (rereduce)

function reduce (keys, values, rereduce) { if (rereduce) { return sum(values); } else { return values.length; } }

QUERY PARAMÉTEREK •= http query paraméterek :) • key • startkey, endkey • group, group_level • reduce • descending

www.graphicshunt.com HÁNY REQ/S, HÁNY REQ/S?

TELJESÍTMÉNY • hangsúly a megbízhatóságon és a concurrency-n • megbízhatóság vs. req/s • “fast enough”

“The ab (apache bench) utility has (or had at the time) a hardcoded limit of 20000 concurrent connections. CouchDB didn't sweat when ab started failing” Jan Lehnardt, CouchDB team

BENCHMARKING • nehéz • reprodukálhatónak kell lennie •a kontextus is fontos • standard benchmark hiánya

STANDALONE APP

“COUCHAPP” • web szerver + document database • html és js file attachmentek a design dochoz • Javascript-tel lehet kommunikálni a szerverrel • offline mód megoldva • deployment = replikáció • shareable apps!

P2P WEB: A JÖVŐ ZENÉJE? • minden eszközön (laptop, mobil, stb.) fut egy CouchDB szerver • replikáció a peerek között •a design dok. (view-k, list functionök, validációk) is replikálódik • push és pull • Ubuntu következő verziójában (Karmic Koala) alapból lesz

SHOW FUNCTIONS •a JSON dokumentumokat más Content-type-re konvertálja • input: a dok. és a Content-type • ETag support

LIST FUNCTIONS •a view kimenetét konvertálja • bármely view-val futtathatóak • input: meta-információ (“head”) és a request • pl. feed-ek előállítására

SHOW, LIST, VIEW FUNCTIONS • nem érhet el külső resource-okat (ismételhető) • side-effect mentes (nem írhat a DB-be, nem indíthat process- eket, stb.) • cache-elhető • egyfunctiont egy dokra csak egyszer kell lekérdezni, utána cache-ből!

BIZTONSÁG • beépített cookie-alapú autentikáció (_session) • admin account-ok • dok.-hoz tartozó reader lista • proxy server-rel az API tetszőleges része elrejthető

COUCHAPP-EK • Futon, a CouchDB admin interface-e • Nymphormation: http://nymphormation.org/ • Boom Amazing: http://github.com/langalex/boom_amazing • Swinger: http://github.com/quirkey/swinger • Real-timegroup calendar: http://jchrisa.net/cal/_design/cal/ index.html • CouchDB twitter client: http://github.com/jchris/couchdb- twitter-client

KÖSZÖNÖM, KÉRDÉSEK?

Add a comment

Related presentations

Presentación que realice en el Evento Nacional de Gobierno Abierto, realizado los ...

In this presentation we will describe our experience developing with a highly dyna...

Presentation to the LITA Forum 7th November 2014 Albuquerque, NM

Un recorrido por los cambios que nos generará el wearabletech en el futuro

Um paralelo entre as novidades & mercado em Wearable Computing e Tecnologias Assis...

Microsoft finally joins the smartwatch and fitness tracker game by introducing the...

Related pages

Tweets by @ArtNagy / October 2009

9:52 AM, Oct 26th, 2009 via Twitter Web Client. What problems does Google Wave solve? http://is.gd/4lyXT. 3:41 AM, Oct 16th, 2009 via Twitter Web Client.
Read more

Elérhető a Magyarországi Web Konferencia 2009 ...

Mint ahogy már bizonyára sok forrásból értesültetek róla (a Weblaboron is több ízben szóltunk róla: tavasz helyett ősszel, előadók ...
Read more