Slide 1

Slide 1 text

BaseCouch letting CouchDB (and TouchDB) replicate with Couchbase Server 2 Jens Alfke ~ Oct 24, 2012 Thursday, October 25, 12

Slide 2

Slide 2 text

BaseCouch Thursday, October 25, 12

Slide 3

Slide 3 text

BaseCouch Is… a little HTTP listener written in Go (~2500LOC; my first Go program!) that understands a subset of CouchDB’s REST API: For pull: _changes, GET doc … For push: _revs_diff, _bulk_docs … and stores CouchDB docs in Couchbase Thursday, October 25, 12

Slide 4

Slide 4 text

BaseCouch Is Not… a full CouchDB-compatible server (no views, no replicator, other API bits missing) a way to make Couchbase databases accessible through CouchDB Thursday, October 25, 12

Slide 5

Slide 5 text

IT HAZ A SCHEMA LET ME SHOW U IT… Thursday, October 25, 12

Slide 6

Slide 6 text

Schema: Database {“name”: “demodb”, “docPrefix”: “doc:demodb/A9FF:”} cdb:demodb 232 seq:demodb Thursday, October 25, 12

Slide 7

Slide 7 text

Schema: Document {“id”: “sample-doc”, “rev”: “3-cfsdklaeip”, “sequence”: 231, “history”: { “revs”: [...], “parents”: [...], “keys”: [...], “deleted”: [...] } } doc:demodb/A9FF:sample-doc parent 2-9#f(Jq key sha1-X*@! deleted false 3-cfsdklaeip Conceptually, “history” is a map: Thursday, October 25, 12

Slide 8

Slide 8 text

Revisions/Attachments {“name”: “INVISIBLE SANDWICH”, “year”: 2007, “subtype”: “invisible things” “_attachments”: { “img.jpg”: { “digest”: “md5-X&_x3”, “length”: 8032 } } } rev:sha1-X*@! att:md5-X&_x3 Thursday, October 25, 12

Slide 9

Slide 9 text

Revisions/Attachments Content-Addressable Store No duplicates are stored Efficient for Syncpoint-style server with lots of similar databases Requires explicit garbage collection Thursday, October 25, 12

Slide 10

Slide 10 text

Views Used all_dbs all_docs changes all_bits revs atts for garbage collection } Thursday, October 25, 12

Slide 11

Slide 11 text

github.com/couchbaselabs/basecouch Thursday, October 25, 12