NoSQL Not Only SQL, CouchDB - Apache CouchDB has started...

53
I.Wojnicki, NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started. Time to relax. Igor Wojnicki Katedra Informatyki Stosowanej, Akademia Górniczo-Hutnicza w Krakowie 23 pa´ zdziernika 2016 Igor Wojnicki (AGH, KIS) CouchDB 23 pa´ zdziernika 2016 1 / 53

Transcript of NoSQL Not Only SQL, CouchDB - Apache CouchDB has started...

Page 1: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQLNoSQL – Not Only SQL, CouchDBApache CouchDB has started. Time to relax.

Igor Wojnicki

Katedra Informatyki Stosowanej, Akademia Górniczo-Hutnicza w Krakowie

23 pazdziernika 2016

$Id$

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 1 / 53

Page 2: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

CouchDB

www.couchdb.org

Apache FoundationErlang

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 2 / 53

Page 3: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

WWW?

Django may be built for the Web, but CouchDB is built ofthe Web. I’ve never seen software that so completelyembraces the philosophies behind HTTP. CouchDB makesDjango look old-school in the same way that Django makesASP look outdated.

— Kaplan-Moss, Django developer

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 3 / 53

Page 4: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Charakterystyka

HTTPDokumentBrak schematówJSONReplikacjaMulti-Version Concurrency Control (MVCC)Bezstanowe połaczenia

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 4 / 53

Page 5: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Komunikacja z baza

Dokumentacja API znajduje sie pod adresem:http://wiki.apache.org/couchdb/HTTP_Document_APIPrzykładowa sesja z wykorzystaniem polecenia curl:

$ curl -X GET http://awing.kis.agh.edu.pl:5984/

{"couchdb":"Welcome","version":"1.0.1"}

$ curl -X GET http://awing.kis.agh.edu.pl:5984/_all_dbs

["_users"]

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 5 / 53

Page 6: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Tworzenie bazy danych

$ curl -X PUT http://awing.kis.agh.edu.pl:5984/ogloszenia

{"ok":true}

$ curl -X GET http://awing.kis.agh.edu.pl:5984/_all_dbs

["ogloszenia","_users"]

$ curl -X PUT http://awing.kis.agh.edu.pl:5984/ogloszenia

{"error":"file_exists","reason":"The database could not be created,the file already exists."}

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 6 / 53

Page 7: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Usuwanie bazy danych

$ curl -X PUT http://awing.kis.agh.edu.pl:5984/do_skasowania

{"ok":true}

$ curl -X DELETE http://awing.kis.agh.edu.pl:5984/do_skasowania

{"ok":true}

$ curl -X GET http://awing.kis.agh.edu.pl:5984/_all_dbs

["ogloszenia","_users"]

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 7 / 53

Page 8: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Pobieranie danych

$ curl -X GET http://awing.kis.agh.edu.pl:5984/ogloszenia/_all_docs

{"total_rows":0,"offset":0,"rows":[]}

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 8 / 53

Page 9: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Wstawianie danych, nowy dokument

$ curl -X POST http://awing.kis.agh.edu.pl:5984/ogloszenia

-H "Content-Type: application/json"-d’{"kierunek":"PAW" , "tresc":"zajecia odwolane"}’

{"ok":true,"id":"5474fe40a47e9e554f03bb2def74f425","rev":"1-952bd6fd9cf92592c0370f2c30713dd2"}

Revision: kolejny_numer-MD5(dokument)

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 9 / 53

Page 10: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Wstawianie danych, zawartosc bazy

$ curl -X GET http://awing.kis.agh.edu.pl:5984/ogloszenia/_all_docs

{"total_rows":1,"offset":0,"rows":[{"id":"5474fe40a47e9e554f03bb2def74f425","key":"5474fe40a47e9e554f03bb2def74f425","value":{"rev":"1-952bd6fd9cf92592c0370f2c30713dd2"}}

]}

$ curl -X GET http://awing.kis.agh.edu.pl:5984/ogloszenia/5474fe40a47e9e554f03bb2def74f425

{"_id":"5474fe40a47e9e554f03bb2def74f425","_rev":"1-952bd6fd9cf92592c0370f2c30713dd2","kierunek":"PAW","tresc":"zajecia odwolane"}

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 10 / 53

Page 11: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Modyfikacja dokumentu

Dodanie pola data.

$ curl -X PUT http://awing.kis.agh.edu.pl:5984/ogloszenia/5474fe40a47e9e554f03bb2def74f425

-H "Content-Type: application/json"-d ’{"_id":"5474fe40a47e9e554f03bb2def74f425",

"_rev":"1-952bd6fd9cf92592c0370f2c30713dd2","data":"2012-03-01"}’

{"ok":true,"id":"5474fe40a47e9e554f03bb2def74f425","rev":"2-acc9738539da4e04b0af5366131ba0b2"}

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 11 / 53

Page 12: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Modyfikacja dokumentu, wynik

Dodanie pola data.

$ curl -X GET http://awing.kis.agh.edu.pl:5984/ogloszenia/5474fe40a47e9e554f03bb2def74f425

{"_id":"5474fe40a47e9e554f03bb2def74f425","_rev":"2-acc9738539da4e04b0af5366131ba0b2","data":"2012-03-01"}

Oooops...

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 12 / 53

Page 13: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Wersje

$ curl -X GET http://awing.kis.agh.edu.pl:5984/ogloszenia/

5474fe40a47e9e554f03bb2def74f425?revs_info=true

{"_id":"5474fe40a47e9e554f03bb2def74f425","_rev":"2-acc9738539da4e04b0af5366131ba0b2","data":"2012-03-01","_revs_info":[{"rev":"2-acc9738539da4e04b0af5366131ba0b2","status":"available"},{"rev":"1-952bd6fd9cf92592c0370f2c30713dd2","status":"available"}

]}

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 13 / 53

Page 14: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Dostep do poprzednich wersji

curl -X GET http://awing.kis.agh.edu.pl:5984/ogloszenia/5474fe40a47e9e554f03bb2def74f425?rev=1-952bd6fd9cf92592c0370f2c30713dd2

{"_id":"5474fe40a47e9e554f03bb2def74f425","_rev":"1-952bd6fd9cf92592c0370f2c30713dd2","kierunek":"PAW","tresc":"zajecia odwolane"}

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 14 / 53

Page 15: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Edycja, cd.

$ curl -X PUT http://awing.kis.agh.edu.pl:5984/ogloszenia/5474fe40a47e9e554f03bb2def74f425

-H "Content-Type: application/json"-d ’{"_id":"5474fe40a47e9e554f03bb2def74f425",

"_rev":"2-acc9738539da4e04b0af5366131ba0b2","kierunek":"PAW","tresc":"zajecia odwolane","data":"2012-03-01"}’

{"ok":true,"id":"5474fe40a47e9e554f03bb2def74f425","rev":"3-a5d979e8767925bcf7de6c27b767ffd7"}

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 15 / 53

Page 16: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Edycja, cd.

$ curl -X GET http://awing.kis.agh.edu.pl:5984/ogloszenia/5474fe40a47e9e554f03bb2def74f425?

revs_info=true{"_id":"5474fe40a47e9e554f03bb2def74f425","_rev":"3-a5d979e8767925bcf7de6c27b767ffd7","kierunek":"PAW","tresc":"zajecia odwolane","data":"2012-03-01","_revs_info":[{"rev":"3-a5d979e8767925bcf7de6c27b767ffd7","status":"available"},{"rev":"2-acc9738539da4e04b0af5366131ba0b2","status":"available"},{"rev":"1-952bd6fd9cf92592c0370f2c30713dd2","status":"available"}]}

Wszystko OK.

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 16 / 53

Page 17: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Usuwanie dokumentu

$ curl -X DELETE http://awing.kis.agh.edu.pl:5984/ogloszenia/5474fe40a47e9e554f03bb2def74f425?rev=3-a5d979e8767925bcf7de6c27b767ffd7

{"ok":true,"id":"5474fe40a47e9e554f03bb2def74f425","rev":"4-a903837c8891e7d400a91e44d4291e2e"}

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 17 / 53

Page 18: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Alternatywne tworzenie dokumentów

Uzycie własnych identyfikatrów

$ curl -X PUT http://awing.kis.agh.edu.pl:5984/ogloszenia/moje1

-H "Content-Type: application/json"-d ’{"kierunek":"PAW",

"tresc":"koniec semestru","data":"2012-04-01"}’

{"ok":true,"id":"moje1","rev":"1-b1805cae2fbae27e6bc929a5b16672b1"}

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 18 / 53

Page 19: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Alternatywne tworzenie dokumentów, sprawdzenie

$ curl -X GET http://awing.kis.agh.edu.pl:5984/ogloszenia/_all_docs

{"total_rows":3,"offset":0,"rows":[{"id":"5474fe40a47e9e554f03bb2def74f42d","key":"5474fe40a47e9e554f03bb2def74f42d","value":{"rev":"2-8fafd9f0ee6bbcdf1753d5e310f02c75"}},

{"id":"5474fe40a47e9e554f03bb2def750eaa","key":"5474fe40a47e9e554f03bb2def750eaa","value":{"rev":"1-02adafaebe85d80139c3dde97e47b367"}},

{"id":"moje1","key":"moje1","value":{"rev":"1-b1805cae2fbae27e6bc929a5b16672b1"}}

]}

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 19 / 53

Page 20: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Generacja UUID

Universally Unique IDentifier

$ curl -X GET http://awing.kis.agh.edu.pl:5984/_uuids

{"uuids":["5474fe40a47e9e554f03bb2def75401d"]}

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 20 / 53

Page 21: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Załaczniki

$ curl -X PUT http://awing.kis.agh.edu.pl:5984/ogloszenia/moje1/

zdjecie.jpg?rev=1-b1805cae2fbae27e6bc929a5b16672b1--data-binary @zdjecie.jpg-H "Content-Type: image/jpg"

{"ok":true,"id":"moje1","rev":"2-29b17212e3635e445f1a009c4d04e384"}

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 21 / 53

Page 22: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Załaczniki, sprawdzenie

$ curl -X GET http://awing.kis.agh.edu.pl:5984/ogloszenia/moje1

{"_id":"moje1","_rev":"2-29b17212e3635e445f1a009c4d04e384","kierunek":"PAW","tresc":"koniec semestru","data":"2012-04-01","_attachments":{"zdjecie.jpg":{"content_type":"image/jpg",

"revpos":2,"length":5240,"stub":true}}}

Dostepne: http://awing.kis.agh.edu.pl:5984/ogloszenia/moje1/zdjecie.jpg

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 22 / 53

Page 23: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Usuwanie załacznika

$ curl -X DELETEhttp://awing.kis.agh.edu.pl:5984/

ogloszenia/moje1/cos.odt?rev=2-29b17212e3635e445f1a009c4d04e384

{"ok":true,"id":"moja1","rev":"3-a158c2c2a0ae7f31effb0402844515d1"}

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 23 / 53

Page 24: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Widoki (Views)

Tymczasowe (temporary): zapytania ad hoc.Tylko dla testów.

Stałe (permanent): przechowywane w bazie.

Jezyk: JavaScript.Rezultat działania buforowany w bazie danych.Sortowanie rosnaco w/g klucza ()Malejaco z atrybutem descending=”true”

Ograniczenie ilosci rezultatów: limit=5Pominiecie rezultatów: skip=30

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 24 / 53

Page 25: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Widok, przykład

Argument: dokument, wyjscie: emit()

function(doc) {if (doc.kierunek==’PAW’) {emit(doc.data, { tresc: doc.tresc,

kierunek: doc.kierunek });}

}

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 25 / 53

Page 26: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Widok, przykład, JSON

W pliku: paw.json

{"map" : "function(doc) {if (doc.kierunek==’PAW’) {emit(doc.data, { tresc: doc.tresc,

kierunek: doc.kierunek });}

}"}

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 26 / 53

Page 27: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Odpowiedz, widok tymczasowy I

$ curl -X POST http://awing.kis.agh.edu.pl:5984/ogloszenia/_temp_view

-H "Content-Type: application/json"-d @paw.json

{"total_rows":6,"offset":0,"rows":[{"id":"5474fe40a47e9e554f03bb2def755ef5","key":"2011-10-01","value":{"tresc":"rozpocz\u0119cie semestru",

"kierunek":"PAW"}},{"id":"5474fe40a47e9e554f03bb2def75508f","key":"2011-11-01","value":{"tresc":"rozpocz\u0119cie kursu",

"kierunek":"PAW"}},{"id":"5474fe40a47e9e554f03bb2def74f42d","key":"2012-03-20","value":{"tresc":"zajecia odwolane",

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 27 / 53

Page 28: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Odpowiedz, widok tymczasowy II

"kierunek":"PAW"}},{"id":"5474fe40a47e9e554f03bb2def750eaa","key":"2012-03-22","value":{"tresc":"kolowkum zaliczeniowe",

"kierunek":"PAW"}},{"id":"5474fe40a47e9e554f03bb2def7545cc","key":"2012-03-22","value":{"tresc":"wystawianie ocen","kierunek":"PAW"}},

{"id":"moje1","key":"2012-04-01","value":{"tresc":"koniec semestru",

"kierunek":"PAW"}}]}

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 28 / 53

Page 29: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Reduce, przykład

map:function(doc) {if (doc.kierunek=’PAW’) {emit(doc.data, 1);

}}

reduce:function(key,value) {return value;

}

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 29 / 53

Page 30: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Reduce, przykład, wyjscie

"2012-04-01" [1]"2012-03-22" [1, 1]"2012-03-20" [1]"2011-11-01" [1]"2011-10-01" [1]

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 30 / 53

Page 31: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Poprawiona funkcja

function(key,value) {return sum(value);

}

Wyjscie:"2012-04-01" 1"2012-03-22" 2"2012-03-20" 1"2011-11-01" 1"2011-10-01" 1

Alternatywnie:function(key,value) {n=0;for (var i=0; i<value.length; i++) {n+=value[i];

}return n;

}

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 31 / 53

Page 32: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Map-Reduce

map: uruchamiana na kazdym dokumencie → klucz, wartoscreduce: klucz, lista wartosci → wartosc

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 32 / 53

Page 33: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Widoki Stałe

http://wiki.apache.org/couchdb/HTTP_view_API

Design Documents.../baza_danych/_design/nazwa

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 33 / 53

Page 34: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Dokument definiujacy widoki I

{"_id":"_design/paw","language": "javascript","views":{"wszystkie": {"map": "function(doc) {

if (doc.kierunek == ’PAW’)emit(null, doc) }"

},"data": {

"map": "function(doc) {if (doc.kierunek == ’PAW’)

emit(doc.data,doc.tresc) }"},"ile": {

"map": "function(doc) {

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 34 / 53

Page 35: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Dokument definiujacy widoki II

if (doc.kierunek == ’PAW’)emit(doc.data,1) }",

"reduce": "function(keys, values) {return sum(values) }"

}}

}

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 35 / 53

Page 36: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Umieszczenie w bazie

curl -X PUT http://awing.kis.agh.edu.pl:5984/ogloszenia/_design/paw

-H "Content-Type: application/json"-d @views.json

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 36 / 53

Page 37: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Uzywanie widoków I

$ curl -X GET http://awing.kis.agh.edu.pl:5984/ogloszenia/_design/paw/_view/data

{"total_rows":5,"offset":0,"rows":[{"id":"5474fe40a47e9e554f03bb2def75508f","key":"2011-11-01","value":"rozpocz\u0119cie kursu"},

{"id":"5474fe40a47e9e554f03bb2def74f42d","key":"2012-03-20","value":"zajecia odwolane"},

{"id":"5474fe40a47e9e554f03bb2def750eaa","key":"2012-03-22","value":"kolowkum zaliczeniowe"},

{"id":"5474fe40a47e9e554f03bb2def7545cc","key":"2012-03-22","value":"wystawianie ocen"},

{"id":

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 37 / 53

Page 38: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Uzywanie widoków II

"moje1","key":"2012-04-01","value":"koniec semestru"}

]}

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 38 / 53

Page 39: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Uzywanie widoków, cd.

$ curl -X GET http://awing.kis.agh.edu.pl:5984/ogloszenia/_design/paw/_view/ile

{"rows":[{"key":null,"value":5}]}

Oooops, wszystkie dane na wejsciu funkcji reduce

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 39 / 53

Page 40: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Uzywanie widoków, cd.

$ curl -X GET http://awing.kis.agh.edu.pl:5984/ogloszenia/_design/paw/_view/ile?group="true"

{"rows":[{"key":"2011-11-01","value":1},{"key":"2012-03-20","value":1},{"key":"2012-03-22","value":2},{"key":"2012-04-01","value":1}]}

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 40 / 53

Page 41: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Uzywanie widoków, cd.

$ curl -X GET http://awing.kis.agh.edu.pl:5984/ogloszenia/_design/paw/_view/wszystkie

{"total_rows":5,"offset":0,"rows":[{"id":"5474fe40a47e9e554f03bb2def74f42d","key":null,"value":{"_id":"5474fe40a47e9e554f03bb2def74f42d",

"_rev":"2-8fafd9f0ee6bbcdf1753d5e310f02c75","kierunek":"PAW","tresc":"zajecia odwolane","data":"2012-03-20"}},

{"id":"5474fe40a47e9e554f03bb2def750eaa","key":null,"value":{"_id":"5474fe40a47e9e554f03bb2def750eaa",

...

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 41 / 53

Page 42: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Dostep do dokumentów... raz jeszcze I

Dodatkowe parametry okreslajace zakres wartosci klucza:key, startkey, endkey, keys, skip, limit.http://wiki.apache.org/couchdb/HTTP_view_API

curl -X GET ’http://awing.kis.agh.edu.pl:5984/ogloszenia/_design/ogolny/_view/kierunek?key=null’

curl -X GET ’http://awing.kis.agh.edu.pl:5984/ogloszenia/_all_docs?key="5474fe40a47e9e554f03bb2def75508f"’

curl -X GET ’http://awing.kis.agh.edu.pl:5984/ogloszenia/_all_docs?startkey="5474fe40a47e9e554f03bb2def75508f"’

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 42 / 53

Page 43: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Dostep do dokumentów... raz jeszcze II

curl -X GET ’http://awing.kis.agh.edu.pl:5984/ogloszenia/_all_docs?startkey="5474fe40a47e9e554f03bb2def75508f"&endkey="5474fe40a47e9e554f03bb2def755ef5"’

curl -X GET ’http://awing.kis.agh.edu.pl:5984/ogloszenia/_all_docs?limit=2’

curl -X GET ’http://awing.kis.agh.edu.pl:5984/ogloszenia/_all_docs?key="_design/paw"’

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 43 / 53

Page 44: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Wiele dokumentow w jedym zapytaniu

http://wiki.apache.org/couchdb/HTTP_Bulk_Document_API

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 44 / 53

Page 45: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Reduce raz jeszcze

Przykładowa funkcja typu reduce.

function (key, values, rereduce) {return sum(values);

}

rereduce moze przyjmowac wartosci:false, wartosci z funkcji map

reduce([ ... ],[value1,value2,value3],false)

true, wartosci z funkcji reduce

reduce(null,[value1,value2,value3],true)

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 45 / 53

Page 46: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Reduce, PROBLEM!

1000 rezultatów z funkcji map:

function(doc){emit(null,

doc.nr);}

klucz wartoscnull 2null 8...

null 5

function(key,value){return value.length;

}

klucz wartoscnull 1000

Uwaga: moze nie działac!

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 46 / 53

Page 47: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Jak na prawde działa reduce? I

function(doc){emit(null,

doc.nr);}

klucz wartoscnull 2...

klucz wartosc...

null 5

function(key,value){return value.length;

}

function(key,value){return value.length;

}

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 47 / 53

Page 48: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Jak na prawde działa reduce? II

klucz wartoscnull 500

klucz wartoscnull 500

function(key,value){return value.length;

}

klucz wartoscnull 2

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 48 / 53

Page 49: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Rereduce, przykład

Zle:

function (keys,values){return values.length;

}

Dobrze:

function (keys,values,rereduce){if (rereduce==false) {return values.length;

} else {return sum(values);

}}

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 49 / 53

Page 50: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Jak na prawde działa rereduce? I

function(doc){emit(null,

doc.nr);}

klucz wartoscnull 2...

klucz wartosc...

null 5

function (key,value,rereduce){

if ...}

function (key,value,rereduce){

if ...}

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 50 / 53

Page 51: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Jak na prawde działa rereduce? II

klucz wartoscnull 500

klucz wartoscnull 500

function (key,value,rereduce){

if ...}

klucz wartoscnull 1000

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 51 / 53

Page 52: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Wbudowane funkcje reduce

_sum

_count

_stats

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 52 / 53

Page 53: NoSQL Not Only SQL, CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb.pdf · NoSQL NoSQL – Not Only SQL, CouchDB Apache CouchDB has started.

I.Wojnick

i, NoSQL

Futon

Interfejs WWW (?!)http://serwer.gdzies:5984/_utils

Przy testowaniu map/reduce, nalezy zrobic reload – dopierowtedy mozna właczyc reduce.

Igor Wojnicki (AGH, KIS) CouchDB 23 pazdziernika 2016 53 / 53