Top Banner
(Apache) CouchDB Krzysztof Kulewski 2008
53

(Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Feb 28, 2019

Download

Documents

buidiep
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

(Apache) CouchDBKrzysztof Kulewski 2008

Page 2: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Czym CouchDB nie jest?

Page 3: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Czym CouchDB nie jest?

• Relacyjną bazą danych

Page 4: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Czym CouchDB nie jest?

• Relacyjną bazą danych

• Zamiennikiem dla relacyjnej bazy danych

Page 5: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Czym CouchDB nie jest?

• Relacyjną bazą danych

• Zamiennikiem dla relacyjnej bazy danych

• Obiektową bazą danych

Page 6: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Czym CouchDB nie jest?

• Relacyjną bazą danych

• Zamiennikiem dla relacyjnej bazy danych

• Obiektową bazą danych

• Bazą danych z rozbudowanym językiem zapytań

Page 7: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Czym jest CouchDB?

Page 8: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Czym jest CouchDB?• Bazą danych

Page 9: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Czym jest CouchDB?• Bazą danych

• dokumentów

Page 10: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Czym jest CouchDB?• Bazą danych

• dokumentów

• dostępną przez RESTful HTTP API

Page 11: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Czym jest CouchDB?• Bazą danych

• dokumentów

• dostępną przez RESTful HTTP API

• bezschematową

Page 12: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Czym jest CouchDB?• Bazą danych

• dokumentów

• dostępną przez RESTful HTTP API

• bezschematową

• replikowalną

Page 13: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Czym jest CouchDB?• Bazą danych

• dokumentów

• dostępną przez RESTful HTTP API

• bezschematową

• replikowalną

• umożliwiającą pisanie ,,wszystkomogących” perspektyw

Page 14: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Erlang = Ericsson Language

Page 15: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Erlang = Ericsson Language

• Współbieżny język funkcyjny

Page 16: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Erlang = Ericsson Language

• Współbieżny język funkcyjny

• Open source (od 1998)

Page 17: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Erlang = Ericsson Language

• Współbieżny język funkcyjny

• Open source (od 1998)

• Aktywnie rozwijany

Page 18: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Erlang = Ericsson Language

• Współbieżny język funkcyjny

• Open source (od 1998)

• Aktywnie rozwijany

• Erlang + Mnesia + biblioteki = Open Telecom Platform (OTP)

Page 19: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Architektura CouchDB

Zaczerpnięte zhttp://incubator.apache.org/couchdb/

Page 20: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Zabawy z CouchDB

Page 21: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Dokument: format JSON

{ "_id": "discussion_tables", "_rev": "D1C946B7", "Subrise": true, "Sunset": false, "FullHours": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "Activities": [ {"Name": "Football", "Duration": 2, "DurationUnit": "Hours"}, {"Name": "Breakfast", "Duration": 40, "DurationUnit": "Minutes", "Attendees": ["Jan", "Damien", "Laura", "Gwendolyn", "Roseanna"]} ]}

Page 23: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Zapytanie Odpowiedź

GET /_all_dbs HTTP/1.01Date: Thu, 17 Aug 2006 05:39:28 +0000GMT

HTTP/1.1 200 OKDate: Thu, 17 Aug 2006 05:39:28 +0000GMTContent-Length: 37Content-Type: application/jsonConnection: close

["somedatabase", "anotherdatabase"]

PUT /somedatabase/ HTTP/1.0Content-Length: 0Date: Thu, 17 Aug 2006 05:39:28 +0000GMT

HTTP/1.1 201 OKDate: Thu, 17 Aug 2006 05:39:28 +0000GMTContent-Length: 13Content-Type: application/jsonConnection: close

{"ok": true}

DELETE /somedatabase/ HTTP/1.0Content-Length: 1Date: Thu, 17 Aug 2006 05:39:28 +0000GMT

HTTP/1.1 202 OKDate: Thu, 17 Aug 2006 05:39:28 +0000GMTContent-Length: 67Content-Type: application/jsonConnection: close

{"ok": true}

A dokładniej...

Page 24: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

• Powinny służyć klientom tylko do rozwiązywania konfliktów (próba nadpisania nieaktualnej wersji kończy się niepowodzeniem)

• Istnieje (uruchamiane na życzenie) oczyszczanie

Wersje dokumentów

PUT /somedatabase/some_doc_id HTTP/1.0Content-Length: 245Date: Thu, 17 Aug 2006 05:39:28 +0000GMTContent-Type: application/json

{ "_id":"some_doc_id", "_rev":"946B7D1C", "Subject":"I like Planktion", "Author":"Rusty", "PostedDate":"2006-08-15T17:30:12-04:00", "Tags":["plankton", "baseball", "decisions"], "Body":"I decided today that I don't like baseball. I like plankton."}

HTTP/1.1 409 CONFLICTDate: Thu, 17 Aug 2006 05:39:28 +0000GMTContent-Length: 33Connection: close

{"error":{"id":"conflict","reason":"3073715634"}}

Page 25: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Dodatki

Page 26: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Dodatki

• Interfejs WWWhttp://couchdb.sukces.biz:5984/_utils/index.html

Page 27: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Dodatki

• Interfejs WWWhttp://couchdb.sukces.biz:5984/_utils/index.html

• ETag

Page 28: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Dodatki

• Interfejs WWWhttp://couchdb.sukces.biz:5984/_utils/index.html

• ETag

• Załączniki

Page 29: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Dodatki

• Interfejs WWWhttp://couchdb.sukces.biz:5984/_utils/index.html

• ETag

• Załączniki

• Wyszukiwanie pełnotekstowe

Page 30: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Dodatki

• Interfejs WWWhttp://couchdb.sukces.biz:5984/_utils/index.html

• ETag

• Załączniki

• Wyszukiwanie pełnotekstowe

• Replikacja

Page 31: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Dostęp do CouchDB• C

• C++

• Erlang

• Java

• JavaScript

• Lisp

• Lotus Script

• Objective C

• Perl

• PHP

• Python

• Ruby

• i wiele innych...

Page 32: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Perspektywy

Page 33: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

(Google) MapReduce

Page 34: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

• Wczytaj dane i podziel je na kawałki (klucz, wartość)

(Google) MapReduce

Page 35: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

• Wczytaj dane i podziel je na kawałki (klucz, wartość)

• Wyślij każdy kawałek do przetworzenia

(Google) MapReduce

Page 36: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

• Wczytaj dane i podziel je na kawałki (klucz, wartość)

• Wyślij każdy kawałek do przetworzenia

• Map: wczytaj (klucz, wartość) i generuje z niej dowolną ilość (również zero) par (kluczi, wartośći)

(Google) MapReduce

Page 37: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

• Wczytaj dane i podziel je na kawałki (klucz, wartość)

• Wyślij każdy kawałek do przetworzenia

• Map: wczytaj (klucz, wartość) i generuje z niej dowolną ilość (również zero) par (kluczi, wartośći)

• Posortuj pary (kluczi, wartośći)

(Google) MapReduce

Page 38: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

• Wczytaj dane i podziel je na kawałki (klucz, wartość)

• Wyślij każdy kawałek do przetworzenia

• Map: wczytaj (klucz, wartość) i generuje z niej dowolną ilość (również zero) par (kluczi, wartośći)

• Posortuj pary (kluczi, wartośći)

• Reduce: Wczytaj pary (kluczi, wartośći) i wygeneruj wynik(i) w postaci dowolnej liczby (również zero) par (klucz, wartość)

(Google) MapReduce

Page 39: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

• Wczytaj dane i podziel je na kawałki (klucz, wartość)

• Wyślij każdy kawałek do przetworzenia

• Map: wczytaj (klucz, wartość) i generuje z niej dowolną ilość (również zero) par (kluczi, wartośći)

• Posortuj pary (kluczi, wartośći)

• Reduce: Wczytaj pary (kluczi, wartośći) i wygeneruj wynik(i) w postaci dowolnej liczby (również zero) par (klucz, wartość)

• Zapisz dane

(Google) MapReduce

Page 40: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Definiowanie perspektyw

{ "_id":"_design/company", "_rev":"12345", "language": "text/javascript", "views": { "all": "function(doc) { if (doc.Type == 'customer') map(null, doc) }" "by_lastname": "function(doc) { if (doc.Type == 'customer') map (doc.LastName, doc) }" }}

Page 41: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

View Server• JavaScript (Mozilla SpiderMonkey)

• PHP

• Ruby

• Python

• Każdy może napisać własny!

Page 42: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Sortowanie kluczy// special values sort before all other typesnullfalsetrue

// then numbers123.04

// then text, case sensitive"a""A""aa""b""B""ba""bb"

// then arrays. compared element by element until different.// Longer arrays sort after their prefixes["a"]["b"]["b","c"]["b","c", "a"]["b","d"]["b","d", "e"]

// then object, compares each key value in the list until different.// larger objects sort after their subset objects.{a:1}{a:2}{b:1}{b:2}{b:2, a:1} // Member order does matter for collation. // CouchDB preserves member order // but doesn't require that clients will. // this test might fail if used with a js engine // that doesn't preserve order{b:2, c:2}

Page 43: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Zagadka

Page 44: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Zagadka - pytanie

Page 45: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Zagadka - pytanie• Robimy blog

Page 46: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Zagadka - pytanie• Robimy blog

• Blog = wpisy + komentarze do wpisów(dokumenty z atrybutem typ = wpis lub komentarz)

Page 47: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Zagadka - pytanie• Robimy blog

• Blog = wpisy + komentarze do wpisów(dokumenty z atrybutem typ = wpis lub komentarz)

• Chcemy wyświetlić blog: wpisy, a pod nimi komentarze

Page 48: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Zagadka - pytanie• Robimy blog

• Blog = wpisy + komentarze do wpisów(dokumenty z atrybutem typ = wpis lub komentarz)

• Chcemy wyświetlić blog: wpisy, a pod nimi komentarze

Page 49: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Zagadka - pytanie• Robimy blog

• Blog = wpisy + komentarze do wpisów(dokumenty z atrybutem typ = wpis lub komentarz)

• Chcemy wyświetlić blog: wpisy, a pod nimi komentarze

• Jak to zrobić wydajnie?

Page 50: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Zagadka - rozwiązanie

function(doc) { if (doc.typ == "wpis") { map([doc._id, 0], doc); } else if (doc.Type == "komentarz") { map([doc.wpis_id, 1], doc); }}

Page 51: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Rozproszone perspektywy

Page 52: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

Idea

CouchDB

View Server

Proxy

Robotnik

Robotnik

Robotnik

RobotnikRobotnikRobotnik

Page 53: (Apache) CouchDB - stencel.mimuw.edu.plstencel.mimuw.edu.pl/sem/sbd1/couchdb.pdf · Czym CouchDB nie jest? • Relacyjną bazą danych • Zamiennikiem dla relacyjnej bazy danych

I wykonanie :)