SlideShare a Scribd company logo
1 of 23
Download to read offline
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, Adresse und Webseite
  Visitenkarte B enthält Name, E-Mail und Mobilnr.
natürliche und semi-strukturierte Daten
Dokument-orientiert?
Keine Tabellen mit Zeilen und Spalten
Kein festes Schema für Daten
Daten werden in semi-strukturierten Dokumenten
 gespeichert
CouchDB
Dokumente
In frühen Versionen: XML
Jetzt: JSON
  kompakt
  portabel
  leicht aus nativen Objekten erzeugbar
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
}
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
  ...
PHPillow
<?php
$doc = new myBlogDocument();
$doc->title = 'New blog post';
$doc->text = 'Hello world.';
$doc->save();
$id = $doc->_id;


$doc = myBlogDocument::fetchById($id);
Views
Filtern, sortieren und aggregieren
Map/Reduce
Default Engine: Javascript
Aktualisierung bei Abfrage
Ad-hoc views: POST /db/_slow_view
Example
Design
Document
{ _id: "_design/rechnungen",
    "language": "text/javascript",
    "views":
    {
        "all": {"map": "<map function all>"}
        "gesamt_umsatz": {
            "map": "<map function umsatz>",
            "reduce": "<reduce function>"
          }
    }
}
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:...}
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                      12345
Example
reduce
result
GET
 /db/_view/rechnungen/gesamt_umsatz?group_
 level=1
                Key           Value
      [2008]                 10000
      [2009]                 2345
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);
}
Replikation
Pull und Push (bi-direktional)
Inkrementell
POST /_replicate
{
    "source":"URI/lokaler Name",
    "target":"URI/lokaler Name"
}

Einschließlich Applikationslogik - Views
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
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 mehreren Konflikten
Konfliktdokumente werden mit repliziert
Compaction
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
Projektgeschichte
Ideen aus Lotus Notes
Damien Katz hat CouchDB zunächst in C++
 begonnen
Jetzt Open Source Apache Projekt
Von IBM unterstützt
Futon
...
Vielen
Dank!

                         Fragen?



Links:
 CouchDB: http://couchdb.org
 PHPillow: http://kore-nordmann.de/projects/phpillow/
  Vielen Dank an Jan Lehnardt http://jan.prima.de/

More Related Content

Viewers also liked

An Introduction to Big Data, NoSQL and MongoDB
An Introduction to Big Data, NoSQL and MongoDBAn Introduction to Big Data, NoSQL and MongoDB
An Introduction to Big Data, NoSQL and MongoDBWilliam LaForest
 
MongoDB for Beginners
MongoDB for BeginnersMongoDB for Beginners
MongoDB for BeginnersEnoch Joshua
 
SQL, NoSQL, BigData in Data Architecture
SQL, NoSQL, BigData in Data ArchitectureSQL, NoSQL, BigData in Data Architecture
SQL, NoSQL, BigData in Data ArchitectureVenu Anuganti
 
Cloudera Customer Success Story
Cloudera Customer Success StoryCloudera Customer Success Story
Cloudera Customer Success StoryXpand IT
 
The Big Data Challenge
The Big Data ChallengeThe Big Data Challenge
The Big Data ChallengeXpand IT
 
Mongo DB: Operational Big Data Database
Mongo DB: Operational Big Data DatabaseMongo DB: Operational Big Data Database
Mongo DB: Operational Big Data DatabaseXpand IT
 
Customer Success Story: Brisa
Customer Success Story: Brisa Customer Success Story: Brisa
Customer Success Story: Brisa Xpand IT
 
MapReduce & Apache Hadoop
MapReduce & Apache HadoopMapReduce & Apache Hadoop
MapReduce & Apache HadoopOliver Fischer
 
NoSQL Now! NoSQL Architecture Patterns
NoSQL Now! NoSQL Architecture PatternsNoSQL Now! NoSQL Architecture Patterns
NoSQL Now! NoSQL Architecture PatternsDATAVERSITY
 
MongoDB für Java-Programmierer
MongoDB für Java-ProgrammiererMongoDB für Java-Programmierer
MongoDB für Java-ProgrammiererUwe Printz
 
MongoDB - Riesige Datenmengen schemafrei verwalten
MongoDB - Riesige Datenmengen schemafrei verwaltenMongoDB - Riesige Datenmengen schemafrei verwalten
MongoDB - Riesige Datenmengen schemafrei verwaltenTobias Trelle
 

Viewers also liked (15)

An Introduction to Big Data, NoSQL and MongoDB
An Introduction to Big Data, NoSQL and MongoDBAn Introduction to Big Data, NoSQL and MongoDB
An Introduction to Big Data, NoSQL and MongoDB
 
MongoDB and hadoop
MongoDB and hadoopMongoDB and hadoop
MongoDB and hadoop
 
MongoDB for Beginners
MongoDB for BeginnersMongoDB for Beginners
MongoDB for Beginners
 
Mongo db
Mongo dbMongo db
Mongo db
 
SQL, NoSQL, BigData in Data Architecture
SQL, NoSQL, BigData in Data ArchitectureSQL, NoSQL, BigData in Data Architecture
SQL, NoSQL, BigData in Data Architecture
 
Cloudera Customer Success Story
Cloudera Customer Success StoryCloudera Customer Success Story
Cloudera Customer Success Story
 
The Big Data Challenge
The Big Data ChallengeThe Big Data Challenge
The Big Data Challenge
 
Mongo DB: Operational Big Data Database
Mongo DB: Operational Big Data DatabaseMongo DB: Operational Big Data Database
Mongo DB: Operational Big Data Database
 
Customer Success Story: Brisa
Customer Success Story: Brisa Customer Success Story: Brisa
Customer Success Story: Brisa
 
Einführung Big Data
Einführung Big DataEinführung Big Data
Einführung Big Data
 
MapReduce & Apache Hadoop
MapReduce & Apache HadoopMapReduce & Apache Hadoop
MapReduce & Apache Hadoop
 
NoSQL Now! NoSQL Architecture Patterns
NoSQL Now! NoSQL Architecture PatternsNoSQL Now! NoSQL Architecture Patterns
NoSQL Now! NoSQL Architecture Patterns
 
MongoDB für Java-Programmierer
MongoDB für Java-ProgrammiererMongoDB für Java-Programmierer
MongoDB für Java-Programmierer
 
MongoDB - Riesige Datenmengen schemafrei verwalten
MongoDB - Riesige Datenmengen schemafrei verwaltenMongoDB - Riesige Datenmengen schemafrei verwalten
MongoDB - Riesige Datenmengen schemafrei verwalten
 
MongoDB Einführung
MongoDB EinführungMongoDB Einführung
MongoDB Einführung
 

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

Praesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit ExtbasePraesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit ExtbaseStefan Frömken
 
Python builds mit ant
Python builds mit antPython builds mit ant
Python builds mit antroskakori
 
Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit RustJens Siebert
 
Ist Gradle auch für die APEX-Projekte?
Ist Gradle auch für die APEX-Projekte?Ist Gradle auch für die APEX-Projekte?
Ist Gradle auch für die APEX-Projekte?MT AG
 
Agiles Modellieren mit Domain Specific Languages
Agiles Modellieren mit Domain Specific LanguagesAgiles Modellieren mit Domain Specific Languages
Agiles Modellieren mit Domain Specific LanguagesDominik Hirt
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...GFU Cyrus AG
 
Prototype 1.7
Prototype 1.7Prototype 1.7
Prototype 1.7msebel
 
MongoDB für Java Programmierer (JUGKA, 11.12.13)
MongoDB für Java Programmierer (JUGKA, 11.12.13)MongoDB für Java Programmierer (JUGKA, 11.12.13)
MongoDB für Java Programmierer (JUGKA, 11.12.13)Uwe Printz
 
Java und Go im Vergleich
Java und Go im VergleichJava und Go im Vergleich
Java und Go im VergleichQAware GmbH
 
XML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit FlashXML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit FlashStephan Schmidt
 
Angular von 0 auf 100
Angular von 0 auf 100Angular von 0 auf 100
Angular von 0 auf 100Yvette Teiken
 
.NET Summit 2016 in München: ASP.NET Core 1
.NET Summit 2016 in München: ASP.NET Core 1.NET Summit 2016 in München: ASP.NET Core 1
.NET Summit 2016 in München: ASP.NET Core 1Manfred Steyer
 
OOP 2013: Praktische Einführung in MongoDB
OOP 2013: Praktische Einführung in MongoDBOOP 2013: Praktische Einführung in MongoDB
OOP 2013: Praktische Einführung in MongoDBTobias Trelle
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeFrank Müller
 
JavaServer Faces - Ein schneller Schnelleinstieg
JavaServer Faces - Ein schneller SchnelleinstiegJavaServer Faces - Ein schneller Schnelleinstieg
JavaServer Faces - Ein schneller Schnelleinstiegtimbrueckner
 
Data model mal anders
Data model mal andersData model mal anders
Data model mal andersMaxim Zaks
 
The Hadoop Connection
The Hadoop ConnectionThe Hadoop Connection
The Hadoop Connectioninovex GmbH
 

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

Praesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit ExtbasePraesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit Extbase
 
jQuery & CouchDB - Die zukünftige Webentwicklung?
jQuery & CouchDB - Die zukünftige Webentwicklung?jQuery & CouchDB - Die zukünftige Webentwicklung?
jQuery & CouchDB - Die zukünftige Webentwicklung?
 
Spark vs. PL/SQL
Spark vs. PL/SQLSpark vs. PL/SQL
Spark vs. PL/SQL
 
Backbase Intro
Backbase IntroBackbase Intro
Backbase Intro
 
Python builds mit ant
Python builds mit antPython builds mit ant
Python builds mit ant
 
Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit Rust
 
Ist Gradle auch für die APEX-Projekte?
Ist Gradle auch für die APEX-Projekte?Ist Gradle auch für die APEX-Projekte?
Ist Gradle auch für die APEX-Projekte?
 
Agiles Modellieren mit Domain Specific Languages
Agiles Modellieren mit Domain Specific LanguagesAgiles Modellieren mit Domain Specific Languages
Agiles Modellieren mit Domain Specific Languages
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
 
Prototype 1.7
Prototype 1.7Prototype 1.7
Prototype 1.7
 
MongoDB für Java Programmierer (JUGKA, 11.12.13)
MongoDB für Java Programmierer (JUGKA, 11.12.13)MongoDB für Java Programmierer (JUGKA, 11.12.13)
MongoDB für Java Programmierer (JUGKA, 11.12.13)
 
Java und Go im Vergleich
Java und Go im VergleichJava und Go im Vergleich
Java und Go im Vergleich
 
XML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit FlashXML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit Flash
 
Angular von 0 auf 100
Angular von 0 auf 100Angular von 0 auf 100
Angular von 0 auf 100
 
.NET Summit 2016 in München: ASP.NET Core 1
.NET Summit 2016 in München: ASP.NET Core 1.NET Summit 2016 in München: ASP.NET Core 1
.NET Summit 2016 in München: ASP.NET Core 1
 
OOP 2013: Praktische Einführung in MongoDB
OOP 2013: Praktische Einführung in MongoDBOOP 2013: Praktische Einführung in MongoDB
OOP 2013: Praktische Einführung in MongoDB
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare Systeme
 
JavaServer Faces - Ein schneller Schnelleinstieg
JavaServer Faces - Ein schneller SchnelleinstiegJavaServer Faces - Ein schneller Schnelleinstieg
JavaServer Faces - Ein schneller Schnelleinstieg
 
Data model mal anders
Data model mal andersData model mal anders
Data model mal anders
 
The Hadoop Connection
The Hadoop ConnectionThe Hadoop Connection
The Hadoop Connection
 

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