Nils
Adermann   naderman@naderman.de
CouchDB
ist
...
keine relationale Datenbank
eine dokument-orientierte Datenbank
für das Web gemacht
skalierbar
Was
ist
ein
Dokument?
Rechnung, Brief, Visitenkarte, …
Struktur folgt nicht aus Typ:
  Visitenkarte A enthält Name, Adress...
Dokument-orientiert?
Keine Tabellen mit Zeilen und Spalten
Kein festes Schema für Daten
Daten werden in semi-strukturierte...
CouchDB
Dokumente
In frühen Versionen: XML
Jetzt: JSON
  kompakt
  portabel
  leicht aus nativen Objekten erzeugbar
Beispiel
Dokument

{
    "_id": ”098F6BCD4621D373CADE4E832627B4F6”,
    "_rev": 4134847,
    "type": "Rechnung",
    "Bedi...
Arbeiten
mit
Dokumenten
via
REST
        Erstellen HTTP POST /db/
            Lesen HTTP GET /db/D0C1DFF
        Ersetzen ...
PHPillow
<?php
$doc = new myBlogDocument();
$doc->title = 'New blog post';
$doc->text = 'Hello world.';
$doc->save();
$id ...
Views
Filtern, sortieren und aggregieren
Map/Reduce
Default Engine: Javascript
Aktualisierung bei Abfrage
Ad-hoc views: PO...
Example
Design
Document
{ _id: "_design/rechnungen",
    "language": "text/javascript",
    "views":
    {
        "all": ...
Example
view
result
(all)
GET /db/_view/rechnungen/all
                   Key             Value
  [2008, 12, 10, 19, 17, 2...
View
Function
all
function(doc) {
    if (doc.type == "rechnung")
      emit(doc.date, doc);
}
Example
reduce
result
GET /db/_view/rechnungen/gesamt_umsatz


                Key            Value
      null            ...
Example
reduce
result
GET
 /db/_view/rechnungen/gesamt_umsatz?group_
 level=1
                Key           Value
      [2...
View
Functions:
Gesamtumsatz
map: function(doc) {
    if (doc.type == "rechnung")
      for (var posten in doc.Posten)
   ...
Replikation
Pull und Push (bi-direktional)
Inkrementell
POST /_replicate
{
    "source":"URI/lokaler Name",
    "target":"...
Offline
arbeiten
Partielle Replikation von großen Datenbeständen
Applikation kann offline weiter genutzt werden
Änderungen ...
Load
Balancing
Master-Slave Replikation
Regelmäßige Synchronisation
HTTP Load Balancer (z.B. nginx)
Konflikte
Konflikt-Flag
Alle Revisionen werden gespeichert
Eine „winning“ Revision – identisch auf allen
  Instanzen bei me...
Zukunftssicher
Cluster Of Unreliable Commodity Hardware DB
In Erlang geschrieben
Lock-freie Architektur
MVCC (Multiversion...
Projektgeschichte
Ideen aus Lotus Notes
Damien Katz hat CouchDB zunächst in C++
 begonnen
Jetzt Open Source Apache Projekt...
Futon
...
Vielen
Dank!

                         Fragen?



Links:
 CouchDB: http://couchdb.org
 PHPillow: http://kore-nordmann.de/p...
Nächste SlideShare
Wird geladen in …5
×

Apache CouchDB at PHPUG Karlsruhe, Germany (Jan 27th 2009)

1.170 Aufrufe

Veröffentlicht am

These are the slides for the Apache CouchDB talk I held at the PHP Usergroup Karlsruhe's meeting on January 27th, 2009.

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
1.170
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
4
Aktionen
Geteilt
0
Downloads
5
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Apache CouchDB at PHPUG Karlsruhe, Germany (Jan 27th 2009)

  1. 1. Nils
Adermann naderman@naderman.de
  2. 2. CouchDB
ist
... keine relationale Datenbank eine dokument-orientierte Datenbank für das Web gemacht skalierbar
  3. 3. Was
ist
ein
Dokument? Rechnung, Brief, Visitenkarte, … Struktur folgt nicht aus Typ: Visitenkarte A enthält Name, Adresse und Webseite Visitenkarte B enthält Name, E-Mail und Mobilnr. natürliche und semi-strukturierte Daten
  4. 4. Dokument-orientiert? Keine Tabellen mit Zeilen und Spalten Kein festes Schema für Daten Daten werden in semi-strukturierten Dokumenten gespeichert
  5. 5. CouchDB
Dokumente In frühen Versionen: XML Jetzt: JSON kompakt portabel leicht aus nativen Objekten erzeugbar
  6. 6. Beispiel
Dokument { "_id": ”098F6BCD4621D373CADE4E832627B4F6”, "_rev": 4134847, "type": "Rechnung", "Bedienung": "Max Mustermann", "Posten": [ {"Name": "Tagesgericht", "Preis": 5.95}, {"Name": "Getränk", "Preis": 2.50} ], "verminderte MwSt": false }
  7. 7. Arbeiten
mit
Dokumenten
via
REST Erstellen HTTP POST /db/ Lesen HTTP GET /db/D0C1DFF Ersetzen HTTP PUT /db/D0C1DFF Löschen HTTP DELETE /db/D0C1DFF HTTP Proxies/Caches können verwendet werden Varnish squid ...
  8. 8. PHPillow <?php $doc = new myBlogDocument(); $doc->title = 'New blog post'; $doc->text = 'Hello world.'; $doc->save(); $id = $doc->_id; $doc = myBlogDocument::fetchById($id);
  9. 9. Views Filtern, sortieren und aggregieren Map/Reduce Default Engine: Javascript Aktualisierung bei Abfrage Ad-hoc views: POST /db/_slow_view
  10. 10. Example
Design
Document { _id: "_design/rechnungen", "language": "text/javascript", "views": { "all": {"map": "<map function all>"} "gesamt_umsatz": { "map": "<map function umsatz>", "reduce": "<reduce function>" } } }
  11. 11. Example
view
result
(all) GET /db/_view/rechnungen/all Key Value [2008, 12, 10, 19, 17, 23] {_id:...} [2008, 12, 22, 21, 43, 40] {_id:...} [2009, 1, 3, 22, 10, 45] {_id:...} [2009, 1, 5, 20, 56, 19] {_id:...}
  12. 12. View
Function
all function(doc) { if (doc.type == "rechnung") emit(doc.date, doc); }
  13. 13. Example
reduce
result GET /db/_view/rechnungen/gesamt_umsatz Key Value null 12345
  14. 14. Example
reduce
result GET /db/_view/rechnungen/gesamt_umsatz?group_ level=1 Key Value [2008] 10000 [2009] 2345
  15. 15. View
Functions:
Gesamtumsatz map: function(doc) { if (doc.type == "rechnung") for (var posten in doc.Posten) emit(doc.date, posten.Preis); } reduce: function (keys, values, rereduce) { return sum(values); }
  16. 16. Replikation Pull und Push (bi-direktional) Inkrementell POST /_replicate { "source":"URI/lokaler Name", "target":"URI/lokaler Name" } Einschließlich Applikationslogik - Views
  17. 17. Offline
arbeiten Partielle Replikation von großen Datenbeständen Applikation kann offline weiter genutzt werden Änderungen werden später zurück gespielt Konfliktlösung manuell oder automatisch durch Applikation
  18. 18. Load
Balancing Master-Slave Replikation Regelmäßige Synchronisation HTTP Load Balancer (z.B. nginx)
  19. 19. Konflikte Konflikt-Flag Alle Revisionen werden gespeichert Eine „winning“ Revision – identisch auf allen Instanzen bei mehreren Konflikten Konfliktdokumente werden mit repliziert Compaction
  20. 20. Zukunftssicher Cluster Of Unreliable Commodity Hardware DB In Erlang geschrieben Lock-freie Architektur MVCC (Multiversion Concurrency Control) ACID (Atomicity, Consistency, Isolation, Durability) Als verteiltes System geplant – anders als RDBMS
  21. 21. Projektgeschichte Ideen aus Lotus Notes Damien Katz hat CouchDB zunächst in C++ begonnen Jetzt Open Source Apache Projekt Von IBM unterstützt
  22. 22. Futon
...
  23. 23. Vielen
Dank! Fragen? Links: CouchDB: http://couchdb.org PHPillow: http://kore-nordmann.de/projects/phpillow/ Vielen Dank an Jan Lehnardt http://jan.prima.de/

×