Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Apache CouchDB
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Myles Braithwaite
September 09, 2014
Technology
47
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
84
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
170
Ansible: Orchestrate Your Infustrature Like Gustav Mahler
myles
0
220
PostgresDoc: Using Postgres as a Document Oriented Database
myles
0
220
Take a Stroll in the Bazaar
myles
0
150
LessCSS
myles
0
52
jrnl
myles
0
52
Other Decks in Technology
See All in Technology
OpenTelemetry eBPF Instrumentationの舞台裏 / Behind the Scenes of OpenTelemetry eBPF Instrumentation
ymotongpoo
3
720
Sigmaユーザーのための有用リソース一挙公開 & Sigmaで使えるMCP #sigma_ucj /useful-resources-for-sigma-computing-users-and-mcps-with-sigma
shinyaa31
0
170
Driving AI Adoption Using In-House GPUs to Serve Qwen
po3rin
2
470
『止めない』を設計する — 制約の中で、事業の根幹を支える判断
hiroyaterui
0
240
プロダクト思考 × 基盤思考を AIで実現する Compound Engineering
tkc66buzz
1
310
Sigmaで作る業務アプリ
kazushiro_honma
0
100
Microsoft 365 Copilot chat -tekoälypalvelun tietosuojaongelmat
hponka
0
580
こんなアーキテクチャ図は嫌だ BEYOND THE TIME: 半年後の自分へ贈る15のメッセージ / 15 of Anti-pattern in AWS Architecture Diagrams
naospon
3
300
Where Is JetBrains AI Heading- — Central CLI, Air Alpha, and the Agentic Development Stack
x5gtrn
PRO
0
150
Amazon Quick on DesktopがIAM Identity Centerで動かない理由
yukiogawa
0
140
#jawssonic2026 あの時代が悪かった ~動かなかったSageMakerと共に迎えたイベント当日~
ktkn1129
0
140
AI-DLCって実際どう? 〜聞きたいこと全部聞いてみる〜
news_it_enj
0
250
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
41
2.7k
GitHub's CSS Performance
jonrohan
1033
470k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
490
Ethics towards AI in product and experience design
skipperchong
2
370
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
Facilitating Awesome Meetings
lara
57
7.1k
New Earth Scene 8
popppiees
3
2.5k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
840
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
310
Color Theory Basics | Prateek | Gurzu
gurzu
0
460
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