AgendaAgenda
• Litt om CouchDB
• Demo
• CouchDB på android devicer
• Hvorfor?
• Hvordan? Et par alternativer
• (Demo)
CouchDB …?*CouchDB …?*
Godt sted å starteGodt sted å starte
• http://www.infoq.com/presentations/katz-couchdb-and-me
• http://blog.stackoverflow.com/2009/06/podcast-59/
Lotus Notes askSam Apstrata Datawasp CRX MUMPSDatabase UniVerse
UniData Jackrabbit CouchDB FleetDB MongoDB GemFire
Enterprise OrientDB RavenDB Redis StrokeDB Terrastore
ThruDB Persevere DBSlayer
DokumentorientertDokumentorientert
JSON basert og «Skjemaløst»JSON basert og «Skjemaløst»
{ "_id": "BCCD12CBB", "type": "person", "name": "Darth Vader", "age": 63, "headware": ["Helmet", "Sombrero"], "dark_side": true}
{ "_id": "BCCD12CBC", "type": "person", "name": "Luke", "age": 35, "powers": ["Pull", "Jedi Mind Trick"], "dark_side": false}
HTTP REST BasertHTTP REST Basert
SQL REST
Insert into… HTTP PUT /db/id
Select * from HTTP GET /db/id
Update HTTP PUT /db/id
Delete HTTP DELETE /db/id
DBA HTTP GET /mydb/, HTTP GET/_all_dbs,HTTP PUT /_replicate, HTTP POST /mydb/_bulk_docs
«World class replication»«World class replication»
• Multi master replikering som oppdager konflikter
• «Eventual Consistency»
SpørringerSpørringer
SQL
> Select id, name from Person
CouchDB
Function (doc) {
emit(doc._id, doc.name)
}
SpørringerSpørringer
«Views» Reduce«Views» Reduce
SQL
> Select darkside, count(*) from Person group by darkside
«Views» Reduce«Views» Reduce
Liten Demo?Liten Demo?
• Starte server
• http://46.137.75.167:5984/_all_dbs
• http://46.137.75.167:5984/_utils
• curl -X PUT http://46.137.75.167:5984/anewdb• curl -X DELETE http://46.137.75.167:5984/anewdb
Android + couch Match made in heaven?Android + couch Match made in heaven?
• Android har god rammeverstøtte for JSON & HTTP
Couch DB på Android?Couch DB på Android?
Scenario #1Scenario #1
• Full funksjonalitet i områder uten nettdekning/variabel dekning
• Økonomiske hensyn (Roaming? Synkronisere data over WIFI)
Scenario #1Scenario #1
Replication
OFFLINE
[ONLINE]
Scenario 2Scenario 2
• Skrivehastighet viktig, Nettverk ingen opsjon• «Runkeeper»• Telemetri
Scenario #2Scenario #2
POST http://127.0.0.1:5984/db/_bulk_docs
Scenario #3 «continous»Scenario #3 «continous»
GET /db/_changes?feed=continous&since=4
Delta (n1,n2,n3,n4)
How to #1 «Quick & Dirty»How to #1 «Quick & Dirty»
How to #1How to #1
•Adb forward tcp:80 tcp:5984
How to #1How to #1
How to #2 (Mye kulere)How to #2 (Mye kulere)
• Couchbase for Android
• Basert på Apache CouchDB
• Støtte for å pakke databasen sammen med Applikasjonen på under 5mb
How to #2 Mye kulereHow to #2 Mye kulere
• Beta. Kun master på Github
• <9 timer siden sist modifikasjon ved min «git clone»
• Måtte laste ned Android Native Development KIT (NDK)
• Fikk ikke utviklingsmiljø på Windows 7 i gang (måtte bruke Ubuntu)
• Replikering via. Curl fungerer fint
• Jobber nå med Replikering initiert fra Android kode
• Ta gjerne en prat på Oslo mekaniske om dere er nysgjerrige
KlientbibliotekKlientbibliotek
Noen forslag
• Jackson JSON (~200k) POJO Mapper mm.http://jackson.codehaus.org/
• Couch Droid. «Lightweight» (< 39k)http://nosql.mypopescu.com/post/371951782/droidcouch-android-library-for-couchdb
• AndCouch (Super lettvekt, en klasse, del av Couchbase)https://github.com/couchbaselabs/Android-Couchbase.git
ReferanserReferanser
• http://horicky.blogspot.com/2008/10/couchdb-implementation.html
• http://wiki.apache.org/couchdb/Installing_on_Ubuntu
• http://guide.couchdb.org/
• http://www.youtube.com/watch?v=3RdcKWYGqig
• https://github.com/couchbaselabs/Android-Couchbase
• https://cloudant.com/