====== 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.