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

ZTB: NoSQL Not Only SQL, CouchDB - Apache CouchDB has ...home.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dcouchdb-show.pdf · NoSQL ZTB: NoSQL – Not Only SQL, CouchDB Apache CouchDB

  • Upload
    others

  • View
    14

  • Download
    0

Embed Size (px)

Citation preview

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

I.Wojnick

i, NoSQLZTB: NoSQL – Not Only SQL, CouchDB

Apache CouchDB has started. Time to relax.Przetwarzanie dokumentów i widoków.

Igor Wojnicki

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

16 pazdziernika 2013

$Id$

Igor Wojnicki (AGH, KIS) PHP 16 pazdziernika 2013 1 / 26

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

I.Wojnick

i, NoSQL

Spis Tresci

1 Motywacja

2 Przetwarzanie dokumentów

3 Przetwarzanie widoków

4 Co dalej?

Igor Wojnicki (AGH, KIS) PHP 16 pazdziernika 2013 2 / 26

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

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 16 pazdziernika 2013 3 / 26

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

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 16 pazdziernika 2013 4 / 26

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

I.Wojnick

i, NoSQL

Motywacja

Przykład: obsługa portalu internetowego

Dokumenty:tresckategoriadata

Igor Wojnicki (AGH, KIS) PHP 16 pazdziernika 2013 5 / 26

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

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 16 pazdziernika 2013 6 / 26

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

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 16 pazdziernika 2013 7 / 26

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

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 16 pazdziernika 2013 8 / 26

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

I.Wojnick

i, NoSQL

Przetwarzanie dokumentów

Przykłady

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 16 pazdziernika 2013 9 / 26

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

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 16 pazdziernika 2013 10 / 26

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

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 16 pazdziernika 2013 11 / 26

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

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 16 pazdziernika 2013 12 / 26

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

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 16 pazdziernika 2013 13 / 26

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

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 16 pazdziernika 2013 14 / 26

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

I.Wojnick

i, NoSQL

Przetwarzanie widoków

Przetwarzanie widoków, lista

{"lists":{

"pokaz": "function(doc,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 16 pazdziernika 2013 15 / 26

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

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 16 pazdziernika 2013 16 / 26

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

I.Wojnick

i, NoSQL

Przetwarzanie widoków

Jezeli duzo dokumentów

"lists":{

"pokaz": "function(doc,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 16 pazdziernika 2013 17 / 26

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

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.

BigCouch: Cloudant, rozszerzenie umozliwiajace łatwaklasteryzacje, modyfikacje integrowane z Apache CouchDB(2013).Couchbase .

Igor Wojnicki (AGH, KIS) PHP 16 pazdziernika 2013 18 / 26

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

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 16 pazdziernika 2013 19 / 26

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

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 16 pazdziernika 2013 20 / 26

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

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>";

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

}

Igor Wojnicki (AGH, KIS) PHP 16 pazdziernika 2013 21 / 26

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

I.Wojnick

i, NoSQL

Co dalej?

Aplikacja w JavaScript IV

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 16 pazdziernika 2013 22 / 26

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

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 16 pazdziernika 2013 23 / 26

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

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 16 pazdziernika 2013 24 / 26

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

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({

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

});}

</script>

Igor Wojnicki (AGH, KIS) PHP 16 pazdziernika 2013 25 / 26

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

I.Wojnick

i, NoSQL

Co dalej?

Aplikacja w JavaScript VIII

</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 16 pazdziernika 2013 26 / 26