Ściągnij kod
JSON (JavaScript Object Notation) jest prostym formatem wymiany danych.
Zapis i odczyt danych w tym formacie jest łatwy do opanowania przez ludzi gdyż JSON jest formatem tekstowym. W przypadku formatu JSON dane przybierają następujące formy:
Obiekt jest nieuporządkowanym zbiorem par nazwa/wartość. Opis obiektu rozpoczyna { (lewa klamra) a kończy } (prawa klamra). Po każdej nazwie następuje : (dwukropek) oraz pary nazwa/wartość, oddzielone , (przecinkiem).Tabela jest uporządkowanym zbiorem wartości. Opis tabeli rozpoczyna znak [ (lewy nawias kwadratowy) a kończy znak ] (prawy nawias kwadratowy). Poszczegóne wartości rozdialane są znakiem , (przecinek).Wartość to łańcuch znakowy, którego początek i koniec oznacza podwójny cudzysłów, lub liczba, lub wartość true (prawda) lub false (fałsz) lub null, lub obiekt lub tabela. Struktury te można zagnieżdżać.
Przykład:
{"dane": {"user": [ {"imie":"Jan","nazwisko":"Kowalski"},{"imie":"Piotr","nazwisko":"Nowak"}] }}
Ten sam zestaw danych w postaci XML wygląda następująco:
<dane><user><imie>jan</imie><nazwisko>Kowalski</nazwisko></user><user><imie>Piotr</imie><nazwisko>Nowak</nazwisko></user></dane>
Pod pojęciem bazy nierelacyjnej (NoSQL database) najczęściej rozumie się przechowywanie danych w formie listy par obiektów klucz-wartość, w których nie występują powiązania relacyjne między przechowywanymi obiektami. W bazie NoSQL najczęściej nie ma wymagania aby obiekty były jednorodne pod względem struktury. Niekiedy pojecie to używane jest szerzej, do określenia wszelkich struktur danych (niekoniecznie o postaci klucz-wartość) w których nie występują tabele i relacje. NoSQL to system baz danych nie posiadający relacji oraz zwykle nie mający zdefiniowanego języka zapytań SQL. Dane zawarte w NoSQL nie mają z góry określonej postaci (schema), jak to ma miejsce np. w bazach relacyjnych typu SQL.
Przykładem bazy NoSQL jest MongoDB.
MongoDB zapisuje dane w oparciu o kolekcje (collections), w których umieszczane są dokumenty w formacie przypominającym JSON (BSON).
MongoDB najlepiej nadaje się do pewnych zadań takich jak:
Źródło danych dla serwisu internetowego: dużych plików multimedialnych.Potrzebujących wydajnego keszowania danych.Przechowywanie dużych ilość mało wartościowych danych.Wymagających wysokiej skalowalności.
MapReduce - sposób przetwarzania równoległego dużych zbiorów danych w klastrach komputerów stworzona przez firmę Google. Nazwa była zainspirowana funkcjami map i reduce z programowania funkcyjnego.
Operacje realizowane są podczas dwóch kroków:
map - węzeł nadzorczy (master node) pobiera dane z wejścia i dzieli je na mniejsze podproblemy, po czym przesyła je do węzłów roboczych (worker nodes). Każdy z węzłów roboczych może albo dokonać kolejnego podziału na podproblemy, albo przetworzyć problem i zwrócić odpowiedź do głównego programu.reduce - główny program bierze odpowiedzi na wszystkie podproblemy i łączy je w jeden wynik - odpowiedź na główny problem.
Główną zaletą MapReduce jest umożliwienie łatwego rozproszenia operacji. Zakładając, że każda z operacji "map" jest niezależna od pozostałych, może być ona realizowana na osobnym serwerze.
Szczegóły Map-Reduce w MongoDB:
Zadanie Domowe
Zadanie:
Zapoznaj się z działaniem bazy danych Mongo z przykładów dodawania elementów z pliku MongoInsert.java i wyszukiwania elementów z pliku MongoQuery.java.
(MongoInsert) Dodaj do kolekcji "people" swoje dane (wg schematu):
{"_id": "nr_indeksu","name": "Twoje imie i nazwisko","address": {"street": "adres","city": "wydziału","state": "wlkp","zip": "kod_wydzialu"}}W razie problemów spójrz na przykład w MongoUpdate.java.
(MongoUpdate) MongoUpdate nadpisuje dane w bazie danych, co zrobić żeby w podanym przykładzie zmieniał tylko wartośći adresu, a nie zmieniał całego elementu (dokumentu) na nowy? Wklej kawałek kodu jako rozwiązanie
(MongoSafeImage) GridFS pozwala na zapisywanie dużych plików w MongoDB. Pliki są łączone w tzw. chunks i zapisywane w bazie, dostęp do nich następuje przez metadane.
Zmień kod tak, by dodawał trzy różne obrazki o takiej same nazwie i pobierz za pomocą nazwy jeden z nich. Odpowiedz który został pobrany i dlaczego? Jaki kod pozwoli nam pobrać trzeci obrazek o danej nazwie?
(MongoMapReduce) Zmień kod tak, aby wypisywał dla każdej litery kraj, który ma najwięcej lotnisk o kodach zaczynających się na tę literę.
Uwaga! Funkcje Map, Reduce i Finalize muszą być zapisane w Javascripcie stąd taka dziwna forma w kodzie.Do testowania jak działa JS można wykorzystać stronę http://www.w3schools.com/js/tryit.asp?filename=tryjs_arrayHint - użyj metody finalize w MapReduce w którym wyszukasz najliczniejszego elementu w tablicy. Przykładowe kody takiego wyszukiwania w Javascript ( http://stackoverflow.com/questions/1053843/get-the-element-with-the-highest-occurrence-in-an-array )
Termin wykonania zadania: Sobota 14.01.2017 do godziny 24.00.
Rozwiązania proszę przesłać przez stronę:
Logujemy się jak na komputery Wydziałowe, przesyłamy plik (jeden wspólny dla wszystkich) z rozwiązaniami.
UWAGA! Rozwiązania można przesłać tylko raz.
Wykorzystano materiały z
https://www.javacodegeeks.com/2015/09/mongodb-mapreduce-tutorial.html
https://www.mkyong.com/mongodb/java-mongodb-save-image-example/
http://www.json.org/json-pl.html
http://webmade.org/porady/json-js.php
http://www.mkyong.com/mongodb/java-mongodb-hello-world-example/
https://www.mongodb.com/blog/post/getting-started-with-mongodb-and-java-part-i
http://www.mkyong.com/mongodb/java-mongodb-update-document/