PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples Kore Nordmann

59
PHPillow & CouchDB Kore Nordmann <[email protected]> July 11, 2009 http://kore-nordmann.de/portfolio.html Kore Nordmann <[email protected]>

Transcript of PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples Kore Nordmann

Page 1: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

PHPillow & CouchDB

Kore Nordmann <[email protected]>

July 11, 2009

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 2: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

About me 2 / 30

I Kore Nordmann, <[email protected]>, <[email protected]>

I Long time PHP developer

I Regular speaker, author, etc.

I Studies computer science in DortmundI Active open source developer:

I eZ Components (Graph, WebDav, Document), Arbit,PHPUnit, Torii, PHPillow, KaForkL, Image 3D, WCV, ...

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 3: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Outline 3 / 30

Introduction

CouchDB

PHPillow

View examples

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 4: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Databases 4 / 30

I Who uses an RDBMS (relational database managementsystem)?

I Who uses a hash based “database”? (MemcacheDB, ...)I Who uses a “document” based database?

I Amazon S3 (SimpleDB)I StrokeDB (Ruby)I FeatherDB (Java port of CouchDB)I CouchDB

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 5: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Databases 4 / 30

I Who uses an RDBMS (relational database managementsystem)?

I Who uses a hash based “database”? (MemcacheDB, ...)I Who uses a “document” based database?

I Amazon S3 (SimpleDB)I StrokeDB (Ruby)I FeatherDB (Java port of CouchDB)I CouchDB

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 6: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Databases 4 / 30

I Who uses an RDBMS (relational database managementsystem)?

I Who uses a hash based “database”? (MemcacheDB, ...)I Who uses a “document” based database?

I Amazon S3 (SimpleDB)I StrokeDB (Ruby)I FeatherDB (Java port of CouchDB)I CouchDB

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 7: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Outline 5 / 30

Introduction

CouchDB

PHPillow

View examples

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 8: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

PHPillow 6 / 30

I A PHP based object oriented client for CouchDB

I The Pillow to make using the couch more comfortable

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 9: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

PHPillow 6 / 30

I A PHP based object oriented client for CouchDB

I The Pillow to make using the couch more comfortable

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 10: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

CouchDB vs. RDBMS 7 / 30

I RDBMS: Static data with dynamic views

I CouchDB: Dynamic data with “static” views

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 11: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

CouchDB 8 / 30

I Document based databaseI Schema-lessI Store anything you want, even deep structuresI Arbitrary JSON objects, attachmentsI No inter-document consistency

I Apache Project

I ACID compliant

I MVCC (Multiversion Concurrency Control)

I Trivial replication

I Communicates with clients using HTTP

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 12: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

CouchDB 8 / 30

I Document based databaseI Schema-lessI Store anything you want, even deep structuresI Arbitrary JSON objects, attachmentsI No inter-document consistency

I Apache Project

I ACID compliant

I MVCC (Multiversion Concurrency Control)

I Trivial replication

I Communicates with clients using HTTP

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 13: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

CouchDB 8 / 30

I Document based databaseI Schema-lessI Store anything you want, even deep structuresI Arbitrary JSON objects, attachmentsI No inter-document consistency

I Apache Project

I ACID compliant

I MVCC (Multiversion Concurrency Control)

I Trivial replication

I Communicates with clients using HTTP

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 14: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

CouchDB 8 / 30

I Document based databaseI Schema-lessI Store anything you want, even deep structuresI Arbitrary JSON objects, attachmentsI No inter-document consistency

I Apache Project

I ACID compliant

I MVCC (Multiversion Concurrency Control)

I Trivial replication

I Communicates with clients using HTTP

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 15: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

CouchDB 8 / 30

I Document based databaseI Schema-lessI Store anything you want, even deep structuresI Arbitrary JSON objects, attachmentsI No inter-document consistency

I Apache Project

I ACID compliant

I MVCC (Multiversion Concurrency Control)

I Trivial replication

I Communicates with clients using HTTP

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 16: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

CouchDB 8 / 30

I Document based databaseI Schema-lessI Store anything you want, even deep structuresI Arbitrary JSON objects, attachmentsI No inter-document consistency

I Apache Project

I ACID compliant

I MVCC (Multiversion Concurrency Control)

I Trivial replication

I Communicates with clients using HTTP

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 17: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

CouchDB 8 / 30

I Document based databaseI Schema-lessI Store anything you want, even deep structuresI Arbitrary JSON objects, attachmentsI No inter-document consistency

I Apache Project

I ACID compliant

I MVCC (Multiversion Concurrency Control)

I Trivial replication

I Communicates with clients using HTTP

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 18: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

CouchDB 8 / 30

I Document based databaseI Schema-lessI Store anything you want, even deep structuresI Arbitrary JSON objects, attachmentsI No inter-document consistency

I Apache Project

I ACID compliant

I MVCC (Multiversion Concurrency Control)

I Trivial replication

I Communicates with clients using HTTP

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 19: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

CouchDB 8 / 30

I Document based databaseI Schema-lessI Store anything you want, even deep structuresI Arbitrary JSON objects, attachmentsI No inter-document consistency

I Apache Project

I ACID compliant

I MVCC (Multiversion Concurrency Control)

I Trivial replication

I Communicates with clients using HTTP

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 20: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

CouchDB 8 / 30

I Document based databaseI Schema-lessI Store anything you want, even deep structuresI Arbitrary JSON objects, attachmentsI No inter-document consistency

I Apache Project

I ACID compliant

I MVCC (Multiversion Concurrency Control)

I Trivial replication

I Communicates with clients using HTTP

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 21: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Architecture 9 / 30

I Written in/for Erlang/OTPI Rocks! ... why?

I Scales nearly linearly with amount of processorsI Highly fault tolerant (9 nines @Ericsson)

I Live updates of application code

I Developed by Ericsson for telephony systems

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 22: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Architecture 9 / 30

I Written in/for Erlang/OTPI Rocks! ... why?

I Scales nearly linearly with amount of processorsI Highly fault tolerant (9 nines @Ericsson)

I Live updates of application code

I Developed by Ericsson for telephony systems

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 23: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Architecture 9 / 30

I Written in/for Erlang/OTPI Rocks! ... why?

I Scales nearly linearly with amount of processorsI Highly fault tolerant (9 nines @Ericsson)

I Live updates of application code

I Developed by Ericsson for telephony systems

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 24: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Architecture 9 / 30

I Written in/for Erlang/OTPI Rocks! ... why?

I Scales nearly linearly with amount of processorsI Highly fault tolerant (9 nines @Ericsson)

I Live updates of application code

I Developed by Ericsson for telephony systems

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 25: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

ACID compliant 10 / 30

I ACID = atomicity, consistency, isolation and durabilityI The key-constraint for databasesI Requires fsync() callsI fsync() calls are THE speed limit for databases [Leh09]

I Optionally disable fsync() calls, loosing guaranteed storageI Major speed upI Useful for bulk insertions

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 26: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

ACID compliant 10 / 30

I ACID = atomicity, consistency, isolation and durabilityI The key-constraint for databasesI Requires fsync() callsI fsync() calls are THE speed limit for databases [Leh09]

I Optionally disable fsync() calls, loosing guaranteed storageI Major speed upI Useful for bulk insertions

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 27: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

ACID compliant 10 / 30

I ACID = atomicity, consistency, isolation and durabilityI The key-constraint for databasesI Requires fsync() callsI fsync() calls are THE speed limit for databases [Leh09]

I Optionally disable fsync() calls, loosing guaranteed storageI Major speed upI Useful for bulk insertions

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 28: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

ACID compliant 10 / 30

I ACID = atomicity, consistency, isolation and durabilityI The key-constraint for databasesI Requires fsync() callsI fsync() calls are THE speed limit for databases [Leh09]

I Optionally disable fsync() calls, loosing guaranteed storageI Major speed upI Useful for bulk insertions

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 29: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

MVCC 11 / 30

I MVCC (Multiversion Concurrency Control)I Multiple revisions of documents in the database

I Identified using some revision-ID.

I Updates and deletes operate on specific revisionsI Provides a consistent database to multiple clients

I Even on concurrent updates.I Conflict handling left to the clients

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 30: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

MVCC 11 / 30

I MVCC (Multiversion Concurrency Control)I Multiple revisions of documents in the database

I Identified using some revision-ID.

I Updates and deletes operate on specific revisionsI Provides a consistent database to multiple clients

I Even on concurrent updates.I Conflict handling left to the clients

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 31: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

MVCC 11 / 30

I MVCC (Multiversion Concurrency Control)I Multiple revisions of documents in the database

I Identified using some revision-ID.

I Updates and deletes operate on specific revisionsI Provides a consistent database to multiple clients

I Even on concurrent updates.I Conflict handling left to the clients

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 32: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

MVCC 11 / 30

I MVCC (Multiversion Concurrency Control)I Multiple revisions of documents in the database

I Identified using some revision-ID.

I Updates and deletes operate on specific revisionsI Provides a consistent database to multiple clients

I Even on concurrent updates.I Conflict handling left to the clients

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 33: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

MVCC 11 / 30

I MVCC (Multiversion Concurrency Control)I Multiple revisions of documents in the database

I Identified using some revision-ID.

I Updates and deletes operate on specific revisionsI Provides a consistent database to multiple clients

I Even on concurrent updates.I Conflict handling left to the clients

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 34: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Replication 12 / 30

I Trivial incremental user-requested pull- or push-replication[Apa09]

I Just call replicate(source, target)I Pull: local-source → remote-targetI Push: remote-source → local-target

I Everything else happens automaticallyI Conflicts in multi-write setups are resolved deterministically

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 35: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Replication 12 / 30

I Trivial incremental user-requested pull- or push-replication[Apa09]

I Just call replicate(source, target)I Pull: local-source → remote-targetI Push: remote-source → local-target

I Everything else happens automaticallyI Conflicts in multi-write setups are resolved deterministically

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 36: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Replication 12 / 30

I Trivial incremental user-requested pull- or push-replication[Apa09]

I Just call replicate(source, target)I Pull: local-source → remote-targetI Push: remote-source → local-target

I Everything else happens automaticallyI Conflicts in multi-write setups are resolved deterministically

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 37: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Replication 12 / 30

I Trivial incremental user-requested pull- or push-replication[Apa09]

I Just call replicate(source, target)I Pull: local-source → remote-targetI Push: remote-source → local-target

I Everything else happens automaticallyI Conflicts in multi-write setups are resolved deterministically

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 38: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Replication 12 / 30

I Trivial incremental user-requested pull- or push-replication[Apa09]

I Just call replicate(source, target)I Pull: local-source → remote-targetI Push: remote-source → local-target

I Everything else happens automaticallyI Conflicts in multi-write setups are resolved deterministically

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 39: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Replication 12 / 30

I Trivial incremental user-requested pull- or push-replication[Apa09]

I Just call replicate(source, target)I Pull: local-source → remote-targetI Push: remote-source → local-target

I Everything else happens automaticallyI Conflicts in multi-write setups are resolved deterministically

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 40: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Communicates with HTTP (1/3) 13 / 30

1 $ c u r l − I −X PUT h t t p : / / l o c a l h o s t :5984/ phpug2 HTTP/ 1 . 1 201 C r e a t e d3 S e r v e r : CouchDB / 0 . 1 0 . 0 a773833 ( E r l a n g OTP/R12B )4 Content−Type : t e x t / p l a i n ; c h a r s e t=u t f−85

6 {” ok ” : t r u e }

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 41: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Communicates with HTTP (2/3) 14 / 30

1 $ c u r l − I −X GET h t t p : / / l o c a l h o s t :5984/ phpug2 HTTP/ 1 . 1 200 OK3 S e r v e r : CouchDB / 0 . 1 0 . 0 a773833 ( E r l a n g OTP/R12B )4 Content−Type : t e x t / p l a i n ; c h a r s e t=u t f−85

6 {7 ” db name ” : ” phpug ” ,8 ” d o c c o u n t ” : 0 ,9 ” d o c d e l c o u n t ” : 0 ,

10 ” u p d a t e s e q ” : 0 ,11 ” p u r g e s e q ” : 0 ,12 ” c o m p a c t r u n n i n g ” : f a l s e ,13 ” d i s k s i z e ” : 4096 ,14 ” i n s t a n c e s t a r t t i m e ” : ”1243673303593969” ,15 ” d i s k f o r m a t v e r s i o n ” : 216 }

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 42: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Communicates with HTTP (3/3) 15 / 30

1 $ c u r l − I −X GET h t t p : / / l o c a l h o s t :5984/ unknown2 HTTP/ 1 . 1 404 Object Not Found3 S e r v e r : CouchDB / 0 . 1 0 . 0 a773833 ( E r l a n g OTP/R12B )4 Content−Type : t e x t / p l a i n ; c h a r s e t=u t f−85

6 {” e r r o r ” : ” n o t f o u n d ” ,” r e a s o n ” : ” M i s s i n g ”}

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 43: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Views 16 / 30

I Map-reduce implementations for “static” views

1 r e t u r n a r r a y r e d u c e (2 array map (3 f u n c t i o n ( $ c h a r a c t e r )4 {5 r e t u r n ord ( $ c h a r a c t e r ) ;6 } ,7 s t r s p l i t ( $ s t r i n g , 1 )8 ) ,9 f u n c t i o n ( $sum , $ c h a r a c t e r )

10 {11 r e t u r n $sum + $ c h a r a c t e r ;12 }13 ) % 1 6 ;

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 44: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Views 17 / 30

I Map-reduce live session

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 45: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Outline 18 / 30

Introduction

CouchDB

PHPillow

View examples

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 46: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

PHPillow 19 / 30

I Object-oriented client for CouchDB

I PHP >= 5.2 since last release (5.3 only before)

I >96% test coverageI Still in alpha state

I Since CouchDB is still “alpha”

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 47: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

PHPillow 19 / 30

I Object-oriented client for CouchDB

I PHP >= 5.2 since last release (5.3 only before)

I >96% test coverageI Still in alpha state

I Since CouchDB is still “alpha”

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 48: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

PHPillow 19 / 30

I Object-oriented client for CouchDB

I PHP >= 5.2 since last release (5.3 only before)

I >96% test coverageI Still in alpha state

I Since CouchDB is still “alpha”

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 49: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Document examples 20 / 30

I Document creation example

1 // C r e a t e a document2 $doc = new phpi l lowUserDocument ( ) ;3 $doc−> l o g i n = ’ k o r e ’ ;4 $doc−>name = ’ Kore Nordmann ’ ;5 $doc−>data = ar ray (6 ’ m a i l ’ => ” kore@php . ne t ” ,7 // . . .8 ) ;9 $ i d = $doc−>s a v e ( ) ;

10

11 // Fetch a document by ID12 $doc = new phpi l lowUserDocument ( $ i d ) ;

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 50: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Outline 21 / 30

Introduction

CouchDB

PHPillow

View examples

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 51: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

View examples 22 / 30

I Issue tracker views from arbitI The next generation issue tracking system ;)

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 52: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Simple view 23 / 30

I Show all user documents

1 f u n c t i o n ( doc ) {2 i f ( doc . t y p e == ” u s e r ” ) {3 emit ( nu l l , doc . i d ) ;4 }5 }

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 53: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Simple view 24 / 30

I Show only unregistered users

1 f u n c t i o n ( doc ) {2 i f ( doc . t y p e == ” u s e r ” &&3 doc . v a l i d !== ”0” &&4 doc . v a l i d !== ”1” ) {5 emit ( doc . v a l i d , doc . i d ) ;6 }7 }

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 54: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Simple view 25 / 30

I Emit values from deep structures

1 f u n c t i o n ( doc ) {2 i f ( doc . t y p e == ” group ” ) {3 f o r ( v a r i = 0 ; i < doc . u s e r s . l e n g t h ; ++i ) {4 emit ( doc . u s e r s [ i ] , doc . p e r m i s s i o n s ) ;5 }6 }7 }

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 55: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Map-Reduce: Full-Text-Search 26 / 30

I Index all documents by all their words

1 f u n c t i o n ( doc ) {2 i f ( doc . t y p e == ” t r a c k e r i s s u e ” ) {3 // S imple word i n d e x i n g , does not r e s p e c t o v e r a l l

o c c u r e n c e s o f words ,4 // stopwords , d i f f e r e n t word s e p e r a t i o n c h a r a c t e r s ,

o r word v a r i a t i o n s .5 v a r t e x t = doc . t i t l e . r e p l a c e ( / [\ s : . , ! ? − ] +/ g , ” ”

) +6 doc . t e x t . r e p l a c e ( / [\ s : . , ! ? − ] +/ g , ” ” ) ;7 v a r words = t e x t . s p l i t ( ” ” ) ;8 f o r ( v a r i = 0 ; i < words . l e n g t h ; ++i ) {9 v a l u e = {} ;

10 v a l u e [ doc . i d ] = 1 ;11 emit ( words [ i ] . toLowerCase ( ) , v a l u e ) ;12 }13 }14 }

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 56: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Map-Reduce: Full-Text-Search 27 / 30

I Reduce by word count

1 f u n c t i o n ( keys , v a l u e s ) {2 v a r count = {} ;3 f o r ( v a r i i n v a l u e s ) {4 f o r ( v a r i d i n v a l u e s [ i ] ) {5 i f ( count [ i d ] ) {6 count [ i d ] = v a l u e s [ i ] [ i d ] + count [ i d ] ;7 } e l s e {8 count [ i d ] = v a l u e s [ i ] [ i d ] ;9 }

10 }11 }12 re tu rn count ;13 }

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 57: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

URLs 28 / 30

I Apache CouchDB: http://couchdb.org/

I PHPillow:http://kore-nordmann.de/projects/phpillow/

I CouchDB use case: http://kore-nordmann.de/blog/phpillow_php_couchdb_wrapper.html

I Implementing a user permission system using CouchDB

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 58: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

The end 29 / 30

I Open questions?

I Further remarks?I Contact

I Mail: <[email protected]>I Web: http://kore-nordmann.de/ (Slides will be available

here soonish)I Twitter: http://twitter.com/koredn

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>

Page 59: PHPillow & CouchDB · Outline 3 / 30 Introduction CouchDB PHPillow View examples  Kore Nordmann

Bibliography I 30 / 30

Apache, Replication,http://wiki.apache.org/couchdb/Replication, July2009.

Jan Lehnardt, Caveats of evaluating databases,http://jan.prima.de/~jan/plok/archives/176-Caveats-of-Evaluating-Databases.html, June 2009.

http://kore-nordmann.de/portfolio.html

Kore Nordmann <[email protected]>