29
I.Wojnicki, NoSQL NoSQL – Not Only SQL: CouchDB Apache CouchDB has started. Time to relax. Przetwarzanie dokumentów i widoków. Igor Wojnicki NoSQL – Not Only SQL, CouchDB Apache CouchDB has started. Time to relax. Igor Wojnicki Katedra Informatyki Stosowanej, Akademia Górniczo-Hutnicza w Krakowie 24 pa´ zdziernika 2020 Igor Wojnicki (AGH, KIS) CouchDB 24 pa´ zdziernika 2020 1/66 Katedra Informatyki Stosowanej, Akademia Górniczo-Hutnicza w Krakowie 24 pa´ zdziernika 2020 Igor Wojnicki (AGH, KIS) PHP 24 pa´ zdziernika 2020 1 / 29

NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

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

Przetwarzanie dokumentów i widoków.

Igor Wojnicki

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

Igor Wojnicki

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

24 pazdziernika 2020

$Id$Igor Wojnicki (AGH, KIS) CouchDB 24 pazdziernika 2020 1 / 66

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

24 pazdziernika 2020

$Id$

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 1 / 29

Page 2: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Spis Tresci I

1 Motywacja

2 Przetwarzanie dokumentów

3 Przetwarzanie widoków

4 Co dalej?

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 2 / 29

Page 3: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Motywacja

CouchDB

www.couchdb.org

Apache FoundationHTTPJSONErlang

Dokumentacjahttp://guide.couchdb.org/editions/1/en/index.html

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

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 3 / 29

Page 4: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Motywacja

A jezeli JSON nie jest odpowiedni?

Domyslnie dokumenty i widoki udostepniaja dane w formacie JSON.Kazdy dokument moze byc udostepniony w dowolnym formacie.Kazdy widok moze byc udostepniony w dowolnym formacie.

Trzeba zaprogramowac format.

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 4 / 29

Page 5: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Motywacja

Przykład: obsługa portalu internetowego

Dokumenty:tresckategoriadata

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 5 / 29

Page 6: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Motywacja

Dokumenty

curl -X POST http://awing.ia.agh.edu.pl:5984/portal-H "Content-Type: application/json"-d ’

{"kategoria":"wiadomosci" ,"tresc":"Powstaje portal z CouchDB","data":"2012-04-20"}’

...{"kategoria":"o mnie" ,"tresc":"Taka sobie firma...","data":"2012-04-21"}

...{"kategoria":"wiadomosci" ,"tresc":"Nie potrzeba PHP/Java... tylko kanapa!","data":"2012-04-21"}

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 6 / 29

Page 7: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Motywacja

Jak przetwarzac dokumenty i widoki?

Dodatkowe funkcje w Design Documentsshow – przetwarzanie pojedynczego dokumentubaza/_design/ddokumentu/_show/funkcja/dokument_id

list – przetwarzanie widokubaza/_design/ddokument/_list/funkcja/widok

Pomocne informacje: http://wiki.apache.org/couchdb/Formatting_with_Show_and_List

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 7 / 29

Page 8: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Przetwarzanie dokumentów

Przetwarzanie dokumentów, funkcja show

function(doc,req)

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 8 / 29

Page 9: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Przetwarzanie dokumentów

Obiekt req

{"info": {

"db_name": "mailbox",},"path": [

"mailbox","_design","request","_show","dump","foo"

],"peer": "127.0.0.1","query": {"parametr":"wartosc","inny":"cos"},"raw_path": "/mailbox/_design/request/_show/dump/foo",...

}

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 9 / 29

Page 10: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Przetwarzanie dokumentów

Przetwarzanie dokumentów

{"_id":"_design/gen","language": "javascript","shows":{

"pokazhtml": "function(doc,req) {return { headers: {’Content-Type’:’text/html’},

body : doc.tresc };}","pokaztxt": "function(doc,req) {

return { headers: {’Content-Type’:’text/plain’},body : doc.tresc };

}"}

}

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 10 / 29

Page 11: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Przetwarzanie dokumentów

Przykłady wywołania

http://awing.ia.agh.edu.pl:5984/portal/_design/gen/_show/pokazhtml/omnie

Taka sobie firma...

http://awing.ia.agh.edu.pl:5984/portal/_design/gen/_show/pokaztxt/omnie

Taka sobie firma...

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 11 / 29

Page 12: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Przetwarzanie dokumentów

Przetwarzanie dokumentów cd.

"pokazdoc": "function(doc,req) {wyjscie=JSON.stringify(doc);return { headers: {’Content-Type’:’text/plain’},

body : wyjscie };}","pokazreq": "function(doc,req) {wyjscie=JSON.stringify(req.query);return { headers: {’Content-Type’:’text/plain’},

body : wyjscie };}"

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 12 / 29

Page 13: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Przetwarzanie dokumentów

Przykłady

http://awing.ia.agh.edu.pl:5984/portal/_design/gen/_show/pokazdoc/omnie

{"_id":"7e9c3bc52bc9804aa3be5dc9c20399c6","_rev":"1-a488c76f2d8c92c5a7cfb46d044801b8","kategoria":"o mnie","tresc":"Taka sobie firma...","data":"2012-04-21","_revisions":{"start":1,"ids":["a488c76f2d8c92c5a7cfb46d044801b8"]}}

http://awing.ia.agh.edu.pl:5984/portal/_design/gen/_show/pokazreq/omnie?parametr=wartosc&inny=cos

{"parametr":"wartosc","inny":"cos"}

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 13 / 29

Page 14: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Przetwarzanie dokumentów

Parametry dla show

"pokaz": "function(doc,req) {if (req.query.co==’tresc’) wyjscie=doc.tresc;else if (req.query.co==’data’ ) wyjscie=doc.data;else wyjscie=’<b>’+doc.data+’</b> ’+doc.tresc;return { headers: {’Content-Type’:’text/html’},

body : wyjscie };}"

.../portal/_design/gen/_show/pokaz/omnie

2012-04-21 Taka sobie firma...

.../portal/_design/gen/_show/pokaz/omnie?co=data2012-04-21

.../portal/_design/gen/_show/pokaz/omnie?co=trescTaka sobie firma...

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 14 / 29

Page 15: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Przetwarzanie dokumentów

Załaczniki

"pokazzal": "function(doc,req) {wyjscie=doc.tresc;zal=doc._attachments;for (klucz in zal) {

wyjscie+=’<br><a href=\"/’+req.info.db_name+’/’+doc._id+’/’+klucz+’\">’+klucz+’</a>’;

}return { headers: {’Content-Type’:’text/html’},

body : wyjscie};}"

Taka sobie firma...zdjecie1.jpgzdjecia.jpg

zdjecie1.jpg i zdjecia.jpg sa hiperpołaczeniami do zawartoscizałaczników.

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 15 / 29

Page 16: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Przetwarzanie widoków

Przetwarzanie widoków, widok

{"_id":"_design/gen","language": "javascript","views":{

"wiadomosci": {"map": "function(doc) {

if (doc.kategoria==’wiadomosci’)emit(doc.data,doc);

}"},

},

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 16 / 29

Page 17: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Przetwarzanie widoków

Przetwarzanie widoków, lista

{"lists":{

"pokaz": "function(head,req) {start({headers: {’Content-Type’:’text/html’}});wyjscie=’<ol>’;while (wiersz=getRow()) {

wyjscie+=’<li><b>’+wiersz.value.data+’</b>’+’ ’+wiersz.value.tresc+’</li>’;

}wyjscie+=’</ol>’;send(wyjscie);

}"}

}

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 17 / 29

Page 18: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Przetwarzanie widoków

Obiekt head

{"total_rows": 42,"offset": 3

}

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 18 / 29

Page 19: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Przetwarzanie widoków

Przykład

http://awing.ia.agh.edu.pl:5984/portal/_design/gen/_list/pokaz/wiadomosci

1 2012-04-20 Powstaje portal z CouchDB2 2012-04-21 Nie potrzeba PHP/Java... tylko kanapa!

http://awing.ia.agh.edu.pl:5984/portal/_design/gen/_list/pokaz/wiadomosci?descending=true

1 2012-04-21 Nie potrzeba PHP/Java... tylko kanapa!2 2012-04-20 Powstaje portal z CouchDB

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 19 / 29

Page 20: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Przetwarzanie widoków

Jezeli duzo dokumentów

"lists":{

"pokaz": "function(head,req) {start({headers: {’Content-Type’:’text/html’}});send(’<ol>’);while (wiersz=getRow()) {

send(’<li><b>’+wiersz.value.data+’</b>’+’ ’+wiersz.value.tresc+’</li>’);

}send(’</ol>’);

}"}

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 20 / 29

Page 21: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Co dalej?

Co dalej?

Programowanie list oraz show korzystajac z Futon jest ....niewygodne.JavaScript + CouchDB = Aplikacja WWWCouchApp: couchapp.org

Szkielet do programowania: view, show, list i....Tworzenia kompletnych aplikacji internetowych z CouchDB.

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 21 / 29

Page 22: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Co dalej?

Aplikacja w JavaScript I

Przykład zaczerpniety z: http://www.speqmath.com/tutorials/couchdb_tasklist/index.html

<html><head><title>Tasks</title><script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>

<script type="text/javascript">// znajdz nazwe bazy danych na podstawie URIvar DATABASE = "/" + window.location.href.split("/")[3];

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 22 / 29

Page 23: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Co dalej?

Aplikacja w JavaScript II

function getTasks() {$.ajax({

url: DATABASE + "/_design/tasks/_view/tasks",success: function (data){

var view = JSON.parse(data);var tasks = [];$(view.rows).each( function (index, item) {

tasks.push (item.value);});displayTasks(tasks);

}});

}

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 23 / 29

Page 24: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Co dalej?

Aplikacja w JavaScript III

function displayTasks(tasks) {var html = "<table>";$(tasks).each( function (index, task) {

var edit = "<input type=’button’ value=’Edit’ " +"onclick=’editTask(" + JSON.stringify(task) + ")’ />";var del = "<input type=’button’ value=’Delete’ " +

"onclick=’deleteTask(" + JSON.stringify(task) + ")’ />";

html += "<tr>";html += "<td>" + task.task + "</td>";html += "<td>" + edit + "</td>";html += "<td>" + del + "</td>";html += "</tr>";

});html += "</table>";

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 24 / 29

Page 25: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Co dalej?

Aplikacja w JavaScript IV

$(’#tasks’).empty();$(’#tasks’).append(html);

}

function addTask() {var desc = prompt("Enter a task description");if (desc) {

var task = {"task": desc

};

$.ajax({type: "POST",url: DATABASE,contentType: "application/json",data: JSON.stringify(task),success: function () {

getTasks();

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 25 / 29

Page 26: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Co dalej?

Aplikacja w JavaScript V

}});

}}

function editTask(task) {var desc = prompt("New task description", task.task);if (desc) {

task.task = desc;

$.ajax({type: "PUT",url: DATABASE + "/" + task._id,contentType: "application/json",data: JSON.stringify(task),success: function () {

getTasks();}

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 26 / 29

Page 27: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Co dalej?

Aplikacja w JavaScript VI

});}

}

function deleteTask(task) {var doit = confirm("Do you really want to delete the task ’" +

task.task + "’?");if (doit) {

$.ajax({type: "DELETE",url: DATABASE + "/" + task._id + "?rev=" + task._rev,success: function () {

getTasks();}

});}

}

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 27 / 29

Page 28: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Co dalej?

Aplikacja w JavaScript VII

// utwórz widok (niepowodzenie jezeli widok istnieje)function createView() {

var view = {"language": "javascript","views": {"tasks": {

"map": "function(doc){if (doc.task) {emit(doc.task, doc);}}"

}}

}$.ajax({

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 28 / 29

Page 29: NoSQL Not Only SQL: CouchDB - Apache CouchDB has started ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dcouchdb-show.pdf · Co dalej? Co dalej? Programowanie listoraz showkorzystajac˛

I.Wojnick

i, NoSQL

Co dalej?

Aplikacja w JavaScript VIII

type: "PUT",url: DATABASE + "/_design/tasks",contentType: "application/json",data: JSON.stringify(view)

});}

</script></head>

<body onload="createView(); getTasks();"><h1>Tasks</h1><input type="button" id="add" value="Add" onclick="addTask();" /><div id="tasks"></div>

</body></html>

Igor Wojnicki (AGH, KIS) PHP 24 pazdziernika 2020 29 / 29