NoSQL Datenbanken am Beispiel von CouchDB OIO - Hauskonferenz 2011 Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim Version: 1.0 www.oio.de [email protected] Ihr Sprecher Thomas Bayer Programmierer Schwerpunkte Funktionale Programmierung REST SOA, XML NoSQL Mobile Apps Membrane © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 2 © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 3 !SQL © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 4 http://www.google.de/trends?q=nosql © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 5 map.put(“ort“, “Mannheim“) value = map.get(“ort“) © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 6 © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 7 FlockDB © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 8 © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 9 © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 10 NoSQL im Einsatz Dynamo BigTable © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 11 Cluster of unreliable commodity Hardware DataBase © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 12 -module(ping_pong). -export([ping/0, pong/0]). ping() -> Pong = spawn(ping_pong, pong, []), Pong ! {self(), ping}, receive pong -> pong end. pong() -> receive {Ping, ping} -> Ping ! pong end. Quelle: http://de.wikipedia.org/wiki/Erlang_(Programmiersprache) © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 13 { "firstname": "Thomas", "lastname": "Bayer", "city": "Bonn", "email": [email protected] } © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 14 { "firstname": "Thomas", "lastname": "Bayer", "city": "Bonn", "email": [ "[email protected]", "[email protected]" ] } © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 15 © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 16 © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 17 © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 18 Abfragen einzelner Daten curl -X GET http://192.168.56.101:5984/my_friends/3 { "_id":“3", "_rev":"1", "firstname":"Mandy", "lastname":"Mcdonnell", "city":"Salem", "email":[email protected] } © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 19 Anlegen neuer Daten curl -X POST -d "{'firstname':'Mandy', 'lastname': 'Mcdonnell', 'city': 'Salem', 'email': '[email protected]'}" -H "Content-Type: application/json" http://192.168.56.101:5984/my_friends/ {"ok":true,"id":”5","rev":“1"} © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 20 Aktualisieren der Daten curl -X PUT -d "{'_rev':'152a806e1eead7d337ab0319197400fd5', 'firstname':'Mandy', 'lastname': 'Mcdonnell', 'city': 'Salem', 'email': '[email protected]'}" -H "Content-Type: application/json" http://192.168.56.101:5984/my_friends/3 {"ok":true,"id":“3","rev":“2"} © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 21 Löschen der Daten curl -X DELETE http://192.168.56.101:5984/my_friends/3 {"ok":true,"id":“3","rev":“3"} © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 22 Updates • • • • GET, Modify, POST POST => neue Revision Keine Manipulation von bestehenden Daten POST kann sich mit GET überschneiden © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 23 function(doc) { var c = doc.name.split("."); return emit(c[c.length -1] , doc.size); } © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 24 POST /offer/786 © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 25 kill -9 423 © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 26 Replication • • • • N-Master Offline arbeiten und dann synchronisieren Konflikt Erkennung und Behebung Merge © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 27 Replication • Nur in eine Richtung • Überträgt Dokumente, die sich unterscheiden • Jede Änderung wird mit DB Sequenznummer versehen – Effiziente Replication • Manuel oder Continuous © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 28 Multi Version Concurrency Control • Optimistic Locking • Keine Versionskontrolle © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 29 Konflikte • Konflikte werden erkannt • Alle Knoten lösen Konflikte gleich – Wining/Losing Revision • Merge analog zu Subversion © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 30 Fazit • • • • Einfache Entwicklung Robust Replication Built of/for the Web © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 31 Referenzen • John Quinn, Presentation: NoSQL: Dealing with the Data Deluge http://nosql.mypopescu.com/post/535275826/presentation-nosqldealing-with-the-data-deluge • http://damienkatz.net/ • CouchDB: The definite Guide – http://guide.couchdb.org/ • NoSQL Tutorial: CouchDB mit Java – http://predic8.de/couchdb-tutorial.htm © 2011 Orientation in Objects GmbH NoSQL Datenbanken am Beispiel von CouchDB 32 ? ? ? ? ? Fragen ? Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim www.oio.de [email protected] Vielen Dank für ihre Aufmerksamkeit ! Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim www.oio.de [email protected]