Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Apache CouchDB
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Myles Braithwaite
September 09, 2014
Technology
45
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Apache CouchDB
Myles Braithwaite
September 09, 2014
More Decks by Myles Braithwaite
See All by Myles Braithwaite
pgloader
myles
0
70
IndieWeb - The person-focused alternative to the corporate web
myles
0
190
Let's Encrypt All the Things
myles
1
130
Chat Bots
myles
1
160
Ansible: Orchestrate Your Infustrature Like Gustav Mahler
myles
0
220
PostgresDoc: Using Postgres as a Document Oriented Database
myles
0
210
Take a Stroll in the Bazaar
myles
0
140
LessCSS
myles
0
52
jrnl
myles
0
51
Other Decks in Technology
See All in Technology
Docker Desktop不要の時代が来る? WSL標準の「wslc」で Linuxコンテナを動かしてみた.
ueponx
0
780
Claude Codeとハーネスについて考えてみる
oikon48
18
8.7k
AIDLC_ヤフーショッピングの取り組み
lycorptech_jp
PRO
0
560
ZOZOTOWNの進化と信頼性を両立する負荷試験
zozotech
PRO
0
140
プロンプト_きのこカンファレンス2026_LT
yurufuwahealer
0
140
SRE歴2ヶ月でも開発6年の知見を活かして、チームで止まっていた環境改善を前に進めた話
a_ono
1
210
Keeping applications secure by evolving OAuth 2.0 and OpenID Connect
ahus1
PRO
1
150
Empower GenAI with Agile - あなたのアジャイルが生成AIのバフになる仕組み
hageyahhoo
0
130
脱金融のフューチャー・デザイン / Future Design Beyond Finance
ks91
PRO
0
130
4人目のSREはAgent
tanimuyk
0
400
はじめてのWDM
miyukichi_ospf
1
120
生成AIの活用/high_school2026
okana2ki
0
110
Featured
See All Featured
Making Projects Easy
brettharned
120
6.7k
Leo the Paperboy
mayatellez
8
1.9k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.7k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
330
Six Lessons from altMBA
skipperchong
29
4.3k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
How to make the Groovebox
asonas
2
2.3k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1k
Side Projects
sachag
455
43k
Typedesign – Prime Four
hannesfritz
42
3.1k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Bash Introduction
62gerente
615
220k
Transcript
Apache CouchDB Myles Braithwaite
[email protected]
| http://mylesb.ca | @mylesb
What is CouchDB?
Apache CouchDB is a database that uses JSON for documents,
JavaScript for MapReduce indexes, and regular HTTP for its API.
Django may be built for the Web, but CouchDB is
built of the Web. — Jacob Kaplan-Moss, Django Developer
Document Based Key/Value Store Unlike a relational database (i.e. Postgres
& MySQL), CouchDB doesn’t store it’s data and relationships in tables. Instead, each database is a collection of independent JSON documents.
Data Types — "string": "abcdefghijklmnopqrstuvwxyz" — "number": 123 — "float":
123.45 — "dict": {} — "list": [] — "bool": true
{ "_id": "30b0ed91384411e4af34c42c03094720", "_rev": "1-3573aeb5384411e4b121c42c03094720", "name": { "given_name": "Myles", "family_name":
"Braithwaite" }, "emails": [ { "type": "personal", "email": "
[email protected]
" }, { "type": "work", "email": "
[email protected]
" } ] }
HTTP Based API for Interacting with your Data — Create
= INSERT = PUT — Retrieve = SELECT = GET — Update = UPDATE = POST — Delete = DELETE = DELETE
Examples — Written in Python using the Kenneth Reitz's requests
library. from myles_custom_urllib_parse import urljoin from requests import get, post, put, delete, request COUCHDB_URL = "http://127.0.0.1:5984/" DB_NAME = "contacts"
r = requests.get(COUCHDB_URL) print r.json() { "couchdb": "Welcome", "uuid": "f9d2966e384711e499cfc42c03094720",
"vendor": { "name": "The Apache Software Foundation", "version": "1.4.0" }, "version": "1.4.0" }
Create a Database r = put(urljoin(COUCHDB_URL, DB_NAME)) if not r.status_code
== 201: print ERROR_RESPONSE[r.status_code] print r.json() {"ok": true}
Create data = {"name": {"first_name": "Myles", "last_name": "Braithwaite"}} r =
post(urljoin(COUCHDB_URL, DB_NAME), data) if not r.status_code == 201: print ERROR_RESPONSE[r.status_code] print r.json() {"ok": true, "id": "30b0ed91384411e4af34c42c03094720", "rev": "1-3573aeb5384411e4b121c42c03094720"}
Create (with a non-automatic ID) data = {"name": {"first_name": "Myles",
"last_name": "Braithwaite"}} DOC_ID = "9999-myles-braithwaite" r = put(urljoin(COUCHDB_URL, DB_NAME, DOC_ID), data) if not r.status_code == 201: print ERROR_RESPONSE[r.status_code] print r.json() {"ok": true, "id": "30b0ed91384411e4af34c42c03094720", "rev": "1-3573aeb5384411e4b121c42c03094720"}
Retrieve DOC_ID = "30b0ed91384411e4af34c42c03094720" r = get(urljoin(COUCHDB_URL, DB_NAME, DOC_ID)) if
not r.ok: print ERROR_RESPONSE[r.status_code] r.json()
Update DOC_ID = "30b0ed91384411e4af34c42c03094720" r = get(urljoin(COUCHDB_URL, DB_NAME, DOC_ID)) data
= r.json() data['emails']: [ { "type": "Personal", "email": "
[email protected]
", "type": "Work", "email": "
[email protected]
" } ] r = post(urljoin(COUCHDB_URL, DB_NAME, DOC_ID), data) if r.ok: print ERROR_RESPONSE[r.status_code] r.json() {"ok": true, "id": "30b0ed91384411e4af34c42c03094720", "rev": "2-f57cf4d1384a11e4a3edc42c03094720"}
Delete DOC_ID = "myles-braithwaite" r = delete( urljoin(COUCHDB_URL, DB_NAME, DOC_ID)
+ "?rev=%s" % DOC_REV) )
Attachment curl -vX \ PUT $COUCHDB_URL/$DB_NAME/$DOC_ID/headshot.jpg?rev=$REV \ --data-binary @avatar.jpg -H
"Content-Type: image/jpg"
Copy r = request( 'COPY', urljoin(COUCHDB_URL, DB_NAME, DOC_ID), {'destination': 'new-document'}
)
Other Features — Replication — Document Revisions — Futon (similar
to PHPMyAdmin) — Auth (Basic, Cookie, Database) — JavaScript based Map/Reduce
PouchDB
JavaScript clone of CouchDB that can run well within a
web browser.
var db = new PouchDB('contacts'); db.put({ _id: 'myles-braithwaite', first_name: 'Myles',
last_name: 'Braithwaite' }) db.replicate.to('http://127.0.0.1:5984/contacts/)
Questions