NoSQL Not Only SQL, CouchDB. I.Wojnicki, NoSQL. Apache CouchDB has started. Time to relax. Igor Wojnicki



Podobne dokumenty
NoSQL Not Only SQL: CouchDB. I.Wojnicki, NoSQL. Apache CouchDB has started. Time to relax. Przetwarzanie dokumentów i widoków.

(Apache) CouchDB. Krzysztof Kulewski 2008

CouchDB. Michał Nowikowski

NoSQL & relax with CouchDB

NoSQL: Riak. dr inż. Sebastian Ernst Katedra Informatyki Stosowanej

I.Wojnicki, PHP. Smarty. Igor Wojnicki. Katedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie. 28 marca 2014

Intro. I.Wojnicki, ZTB:XML ZTB: XML. Igor Wojnicki. Katedra Informatyki Stosowanej, Akademia Górniczo-Hutnicza w Krakowie.

Projektowanie systemów baz danych

Relacyjne bazy danych. Podstawy SQL

BAZA DANYCH SIECI HOTELI

Dokumentacja interfejsu HTTPD. Platforma BSMS.PL Instrukcja podłączenia po przez http

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

Angular, cz. II. Tworzenie serwisów Web 2.0. dr inż. Robert Perliński

Scenariusz Web Design DHTML na 10 sesji. - Strony statyczne I dynamiczne. - Dodawanie kodu VBScript do strony HTML. Rysunek nie jest potrzebny

Terytorialna analiza danych

Wykład 5. SQL praca z tabelami 2

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

1. Połączenie z bazą danych. W wybranym edytorze tworzymy plik sqltest.py i umieszczamy w nim poniższy kod. #!/usr/bin/python3 import sqlite3

Kowalski Marcin Wrocław, dn Jaśkiewicz Kamil Bazy Danych 1 Podstawy Projekt Temat: Baza danych do zarządzania projektami

I.Wojnicki, PHP. PHP PHP Hypertext Preprocessor. Igor Wojnicki. Katedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie.

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Język SQL, zajęcia nr 1

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

OpenPoland.net API Documentation

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

Zaawansowane bazy danych i hurtownie danych studia zaoczne II stopnia, sem. I

Relacyjne bazy danych. Podstawy SQL

Specyfikacja techniczna. mprofi Interfejs API

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Podstawy wzorca MVC MODEL KON- TROLER WIDOK. Odpowiada za wyświetlenie danych użytkownikowi. Zawiera dane aplikacji oraz jej logikę.

Systemy GIS Tworzenie zapytań w bazach danych

Hurtownia Świętego Mikołaja projekt bazy danych

Instalacja MySQL.

- język zapytań służący do zapisywania wyrażeń relacji, modyfikacji relacji, tworzenia relacji

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

Część I Tworzenie baz danych SQL Server na potrzeby przechowywania danych

Ćwiczenie dotyczące platformy Java EE zostało przygotowane z myślą o środowisku NetBeans w wersji 7.3 (do pobrania z

Plan. Raport. Tworzenie raportu z kreatora (1/3)

Bazy Danych i Usługi Sieciowe

Zaawansowany kurs języka Python

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

Bazy danych. Polecenia SQL

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter

Przestrzenne bazy danych Podstawy języka SQL

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Wykład 5: PHP: praca z bazą danych MySQL

[1.9.0] Zlecenia odbioru

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

QualitySpy moduł persystencji

Programowanie w Ruby

I.Wojnicki, Tech.Inter.

ROZSZERZAJĄC FUNKCJONALNOŚCI MEMCACHED

Oracle11g: Wprowadzenie do SQL

QualitySpy moduł reports

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Plan. Formularz i jego typy. Tworzenie formularza. Co to jest formularz? Typy formularzy Tworzenie prostego formularza Budowa prostego formularza

API System Partnerski

Informatyka sem. III studia inżynierskie Transport 2018/19 LAB 2. Lab Backup bazy danych. Tworzenie kopii (backup) bazy danych

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

Bazy danych i usługi sieciowe

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Systemy baz danych Prowadzący: Adam Czyszczoń. Systemy baz danych. 1. Import bazy z MS Access do MS SQL Server 2012:

Klasy i obiekty cz II

Baza danych do przechowywania użytkowników

Bazy danych. Dr inż. Paweł Kasprowski

MeetingHelper. Aplikacja Android ułatwiająca przekazywanie materiałów pomiędzy uczestnikami spotkania. Instrukcja obsługi dla programisty

Bloki anonimowe w PL/SQL

Programowanie zorientowane obiektowo. Mateusz Kołecki

Przetwarzanie danych z wykorzystaniem technologii NoSQL na przykładzie serwisu Serp24

Wdrożenie modułu płatności eservice. dla systemu Zen Cart

I.Wojnicki, PHP. PHP PHP Hypertext Preprocessor. Igor Wojnicki. Ktedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie.

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , ,

Gatesms.eu Mobilne Rozwiązania dla biznesu

Aktualizacja SMSFall v Data publikacji:

Programowanie w Ruby

Encje w Drupalu. Tworzenie własnych encji i ich wpływ na poprawę wydajności

Wykład 12. Programowanie serwera MS SQL 2005 w C#

API transakcyjne BitMarket.pl

Podstawowe wykorzystanie Hibernate

Bazy danych. dr inż. Arkadiusz Mirakowski

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

KORPORACYJNE SYSTEMY ZARZĄDZANIA INFORMACJĄ

Wprowadzenie do NoSql. Maksymilian Wiesiołek

Protokół HTTP. 1. Protokół HTTP, usługi www, model request-response (żądanie-odpowiedź), przekazywanie argumentów, AJAX.

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław r.

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Specyfikacja interfejsów usług Jednolitego Pliku Kontrolnego

Plan. Wprowadzenie. Co to jest APEX? Wprowadzenie. Administracja obszarem roboczym

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

Wielojęzykowość w aplikacjach J2EE. Tomasz.Skutnik@e-point.pl

BAZY DANYCH wprowadzenie do języka SQL. Opracował: dr inż. Piotr Suchomski

Gerard Frankowski, Zespół Bezpieczeństwa PCSS. Nowoczesne technologie bliżej nas Poznań,

Microsoft SQL Server Podstawy T-SQL

Laboratorium nr 3 Podstawy Ruby on Rails

Jak okiełznać frontend w Django? Piotr Maliński

Wprowadzenie do języka SQL

Transkrypt:

29 października 2014 Igor Wojnicki (AGH, KIS) CouchDB 29 października 2014 1 / 53 NoSQL Not Only SQL, CouchDB Apache CouchDB has started. Time to relax. Igor Wojnicki Katedra Informatyki Stosowanej, Akademia Górniczo-Hutnicza w Krakowie

Igor Wojnicki (AGH, KIS) CouchDB 29 października 2014 2 / 53 CouchDB www.couchdb.org Apache Foundation Erlang

Igor Wojnicki (AGH, KIS) CouchDB 29 października 2014 3 / 53 WWW? Django may be built for the Web, but CouchDB is built of the Web. I ve never seen software that so completely embraces the philosophies behind HTTP. CouchDB makes Django look old-school in the same way that Django makes ASP look outdated. Kaplan-Moss, Django developer

Igor Wojnicki (AGH, KIS) CouchDB 29 października 2014 4 / 53 Charakterystyka HTTP Dokument Brak schematów JSON Replikacja Multi-Version Concurrency Control (MVCC) Bezstanowe połaczenia

Igor Wojnicki (AGH, KIS) CouchDB 29 października 2014 5 / 53 Komunikacja z baza Dokumentacja API znajduje się pod adresem: http://wiki.apache.org/couchdb/http_document_api Przykł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 29 października 2014 6 / 53 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 29 października 2014 7 / 53 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 29 października 2014 8 / 53 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 29 października 2014 9 / 53 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 29 października 2014 10 / 53 Wstawianie danych, zawartość 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 29 października 2014 11 / 53 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 29 października 2014 12 / 53 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 29 października 2014 13 / 53 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 29 października 2014 14 / 53 Dostęp 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 29 października 2014 15 / 53 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 29 października 2014 16 / 53 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 29 października 2014 17 / 53 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 29 października 2014 18 / 53 Alternatywne tworzenie dokumentów Użycie 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 29 października 2014 19 / 53 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 29 października 2014 20 / 53 Generacja UUID Universally Unique IDentifier $ curl -X GET http://awing.kis.agh.edu.pl:5984/_uuids {"uuids":["5474fe40a47e9e554f03bb2def75401d"]

Igor Wojnicki (AGH, KIS) CouchDB 29 października 2014 21 / 53 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 29 października 2014 22 / 53 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 Dostępne: http://awing.kis.agh.edu.pl: 5984/ogloszenia/moje1/zdjecie.jpg

Igor Wojnicki (AGH, KIS) CouchDB 29 października 2014 23 / 53 Usuwanie załacznika $ curl -X DELETE http://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 29 października 2014 24 / 53 Widoki (Views) Tymczasowe (temporary): zapytania ad hoc. Tylko dla testów. Stałe (permanent): przechowywane w bazie. Język: JavaScript. Rezultat działania buforowany w bazie danych. Sortowanie rosnaco w/g klucza () Malejaco z atrybutem descending= true Ograniczenie ilości rezultatów: limit=5 Pominięcie rezultatów: skip=30

Igor Wojnicki (AGH, KIS) CouchDB 29 października 2014 25 / 53 Widok, przykład Argument: dokument, wyjście: emit() function(doc) { if (doc.kierunek== PAW ) { emit(doc.data, { tresc: doc.tresc, kierunek: doc.kierunek );

Igor Wojnicki (AGH, KIS) CouchDB 29 października 2014 26 / 53 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 29 października 2014 27 / 53 Odpowiedź, 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 29 października 2014 28 / 53 Odpowiedź, 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 29 października 2014 29 / 53 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 29 października 2014 30 / 53 Reduce, przykład, wyjście "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 29 października 2014 31 / 53 Poprawiona funkcja function(key,value) { return sum(value); Wyjście: "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 29 października 2014 32 / 53 Map-Reduce map: uruchamiana na każdym dokumencie klucz, wartość reduce: klucz, lista wartości wartość

Igor Wojnicki (AGH, KIS) CouchDB 29 października 2014 33 / 53 Widoki Stałe http://wiki.apache.org/couchdb/http_view_api Design Documents.../baza_danych/_design/nazwa

Igor Wojnicki (AGH, KIS) CouchDB 29 października 2014 34 / 53 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 29 października 2014 35 / 53 Dokument definiujacy widoki II if (doc.kierunek == PAW ) emit(doc.data,1) ", "reduce": "function(keys, values) { return sum(values) "

Igor Wojnicki (AGH, KIS) CouchDB 29 października 2014 36 / 53 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 29 października 2014 37 / 53 Używanie 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 29 października 2014 38 / 53 Używanie widoków II "moje1","key":"2012-04-01", "value":"koniec semestru" ]

Igor Wojnicki (AGH, KIS) CouchDB 29 października 2014 39 / 53 Używanie 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 wejściu funkcji reduce

Igor Wojnicki (AGH, KIS) CouchDB 29 października 2014 40 / 53 Używanie 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 29 października 2014 41 / 53 Używanie 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 29 października 2014 42 / 53 Dostęp do dokumentów... raz jeszcze I Dodatkowe parametry określajace zakres wartości 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 29 października 2014 43 / 53 Dostęp 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 29 października 2014 44 / 53 Wiele dokumentow w jedym zapytaniu http: //wiki.apache.org/couchdb/http_bulk_document_api

Igor Wojnicki (AGH, KIS) CouchDB 29 października 2014 45 / 53 Reduce raz jeszcze Przykładowa funkcja typu reduce. function (key, values, rereduce) { return sum(values); rereduce może przyjmować wartości: false, wartości z funkcji map reduce([... ], [value1,value2,value3], false) true, wartości z funkcji reduce reduce(null, [value1,value2,value3], true)

Igor Wojnicki (AGH, KIS) CouchDB 29 października 2014 46 / 53 Reduce, PROBLEM! 1000 rezultatów z funkcji map: function(doc){ emit(null, doc.nr); Uwaga: może nie działać! klucz wartość null 2 null 8... null 5 function(key,value){ return count(value); klucz wartość null 1000

Igor Wojnicki (AGH, KIS) CouchDB 29 października 2014 47 / 53 Jak na prawdę działa reduce? I function(doc){ emit(null, doc.nr); klucz wartość null 2... klucz wartość... null 5 function(key,value){ return count(value); function(key,value){ return count(value);

Igor Wojnicki (AGH, KIS) CouchDB 29 października 2014 48 / 53 Jak na prawdę działa reduce? II klucz wartość null 500 klucz wartość null 500 function(key,value){ return count(value); klucz wartość null 2

Igor Wojnicki (AGH, KIS) CouchDB 29 października 2014 49 / 53 Rereduce, przykład Źle: function (keys,values){ return count(values); Dobrze: function (keys,values,rereduce){ if (rereduce==false) { return count(values); else { return sum(values);

Igor Wojnicki (AGH, KIS) CouchDB 29 października 2014 50 / 53 Jak na prawdę działa rereduce? I function(doc){ emit(null, doc.nr); klucz wartość null 2... klucz wartość... null 5 function (key,value, rereduce){ if... function (key,value, rereduce){ if...

Igor Wojnicki (AGH, KIS) CouchDB 29 października 2014 51 / 53 Jak na prawdę działa rereduce? II klucz wartość null 500 klucz wartość null 500 function (key,value, rereduce){ if... klucz wartość null 1000

Igor Wojnicki (AGH, KIS) CouchDB 29 października 2014 52 / 53 Wbudowane funkcje reduce _sum _count _stats

Igor Wojnicki (AGH, KIS) CouchDB 29 października 2014 53 / 53 Futon Interfejs WWW (?!) http://serwer.gdzies:5984/_utils Przy testowaniu map/reduce, należy zrobić reload dopiero wtedy można właczyć reduce.