Celem ćwiczenia jest zapoznanie się z wybranymi technologiami NoSQL.
Do wynkonania ćwiczenia niezbędna jest znajomość:
curl
http://curl.haxx.se/Generowanie statystyk występowania liter.
Warunkiem zaliczenia jest wykonanie poniższych ćwiczeń i prezentacja wyników prowadzącemu zajęcia.
Eksperymenty z widokami dobrze jest przeprowadzać za pomocą futon: http://nosql.kis.agh.edu.pl:5984/_utils
Sporządź przynajmniej po 2 dokumenty w każdej z poniższych kategorii w formacie JSON:
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.
UWAGA ćwiczenia z Riak proszę wykonywać na maszynie deepthought.kis.agh.edu.pl
.
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 '<wartość>' \ http://nosql.kis.agh.edu.pl:8098/riak/<wiadro>/<klucz>
Umieszczenie danych w formacie JSON:
curl -v -XPUT \ -H "Content-Type: application/json" \ -d '<wartość>' \ http://nosql.kis.agh.edu.pl:8098/riak/<wiadro>/<klucz>
Umieszczenie rekordu w bazie Riaka z oczytem danych z pliku:
curl -v -XPUT \ -d @<nazwa_pliku> \ http://nosql.kis.agh.edu.pl:8098/riak/<wiadro>/<klucz>
Umieszczenie rekordu z określeniem tagów 2i (secondary indexes):
curl -XPUT \ -H 'x-riak-index-nazwa1_bin: wartosc_tagu' \ -H 'x-riak-index-nazwa2_int: 9999999' \ -d '<wartość>' \ http://nosql.kis.agh.edu.pl:8098/buckets/<wiadro>/keys/<klucz>
Definiowanie zadania MapReduce:
curl -X POST -H "content-type: application/json" \ http://nosql.kis.agh.edu.pl:8098/mapred --data @-<<\EOF {"inputs":[["<wiadro>","<klucz1>"],["<wiadro>","<klucz1>"],["<wiadro>","<klucz1>"]] ,"query":[{"map":{"language":"javascript","source":" // funkcja map w JavaScript "}},{"reduce":{"language":"javascript","source":" // funkcja reduce w JavaScript "}}]} EOF
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 (secondary indexes o nazwie lang_bin
, zawierający informację o języku tekstu (proponuję wartości pl
oraz en
).
Następnie proszę napisać skrypt 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.