====== Bazy NoSQL ======
===== Wstęp i wymagania =====
Celem ćwiczenia jest zapoznanie się z wybranymi technologiami NoSQL.
Do wynkonania ćwiczenia niezbędna jest znajomość:
* ''curl'' http://curl.haxx.se/
* JSON
* JavaScript
===== Problem do rozwiązania =====
Generowanie statystyk występowania liter.
===== Zaliczenie =====
Warunkiem zaliczenia jest wykonanie poniższych ćwiczeń i prezentacja wyników prowadzącemu zajęcia.
===== CouchDB =====
==== Przydatne polecenia ====
Eksperymenty z widokami dobrze jest przeprowadzać za pomocą futon:
http://nosql.kis.agh.edu.pl:5984/_utils
==== Ćwiczenie 1 ====
Sporządź przynajmniej po 2 dokumenty w każdej z poniższych kategorii w formacie JSON:
- ogłoszenia: data, treść,
- asortyment: nazwa towaru, opis towaru, sugerowana cena,
- wiadomosc: tresc, od kogo, dla kogo, data sporządzenia.
Utworz bazę danych w instancji CouchDB dostępnej pod adresem: http://nosql.kis.agh.edu.pl:5984/
Nazwa bazy danych moze byc np. Twoim nazwiskiem.
Umieść wszystkie dokumenty w tej samej bazie.
Zaprogramuj widok, który policzy ile razy w dokumentach występowała każda z liter alfabetu (dużę i małe litery powinny być nierozróżnialne).
Podpowiedź: funckja ''emit()'' może być użyta więcej niż raz w funkcji //map//.
Podpowiedź: do testowania JavaScriptu przydaje się konsola w przeglądarce.
===== Riak =====
**UWAGA** :!: ćwiczenia z Riak proszę wykonywać na maszynie ''deepthought.kis.agh.edu.pl''.
==== Przydatne polecenia ====
Wylistowanie wszystkich wiader:
GET /buckets?buckets=true
Wylistowanie wszystkich kluczy w wiadrze:
GET /buckets/bucket/keys?keys=true
Umieszczenie rekordu w bazie Riaka:
curl -v -XPUT \
-d '' \
http://nosql.kis.agh.edu.pl:8098/riak//
Umieszczenie danych w formacie JSON:
curl -v -XPUT \
-H "Content-Type: application/json" \
-d '' \
http://nosql.kis.agh.edu.pl:8098/riak//
Umieszczenie rekordu w bazie Riaka z oczytem danych z pliku:
curl -v -XPUT \
-d @ \
http://nosql.kis.agh.edu.pl:8098/riak//
Umieszczenie rekordu z określeniem tagów 2i ([[http://docs.basho.com/riak/latest/dev/using/2i/|secondary indexes]]):
curl -XPUT \
-H 'x-riak-index-nazwa1_bin: wartosc_tagu' \
-H 'x-riak-index-nazwa2_int: 9999999' \
-d '' \
http://nosql.kis.agh.edu.pl:8098/buckets//keys/
Definiowanie zadania MapReduce:
curl -X POST -H "content-type: application/json" \
http://nosql.kis.agh.edu.pl:8098/mapred --data @-<<\EOF
{"inputs":[["",""],["",""],["",""]]
,"query":[{"map":{"language":"javascript","source":"
// funkcja map w JavaScript
"}},{"reduce":{"language":"javascript","source":"
// funkcja reduce w JavaScript
"}}]}
EOF
==== Ćwiczenie 2 ====
Proszę utworzyć kilka plików tekstowych zawierających teksty (np. skopiowane z Wikipedii) w różnych językach - wystarczy po 1-2 akapity na plik.
Serwer Riak znajduje się pod adresem [[http://nosql.kis.agh.edu.pl:8098/]].
Proszę umieścić te pliki jako obiekty w wiadrze o nazwie ''imie_nazwisko'', z wybranymi kluczami. Proszę do każdego elementu (obiektu) dodać tag 2i ([[http://docs.basho.com/riak/latest/dev/using/2i/|secondary indexes]] o nazwie ''lang_bin'', zawierający informację o języku tekstu (proponuję wartości ''pl'' oraz ''en'').
Następnie proszę napisać skrypt [[http://docs.basho.com/riak/latest/dev/using/mapreduce/|MapReduce]], który zliczy liczbę wystąpień poszczególnych znaków we wszystkich plikach w określonym języku. Klucze obiektów do przetworzenia powinny zostać wybrane na podstawie ich wartości tagu ''lang_bin'', a więc poprzez umieszczenie odpowiednich wartości pól ''index'' oraz ''key'' w sekcji ''input'' zapytania MR.
Wynikiem powinna być tablica JSON, zawierająca litery jako klucze, oraz liczby całkowite jako wartości.