*Grafomania z Neo4j Praktyczne wprowadzenie do grafowej bazy danych. Jak zamodelować relacyjną bazę danych reprezentującą następujący fragment rzeczywistości: Serwis WWW opisuje pracowników różnych firm poprzez nazwisko, płacę podstawową i płacę dodatkową. Każdy pracownik pracuje na co najmniej jednym stanowisku i posiada swoją historię zatrudnienia. Stanowiska opisane są poprzez nazwę oraz widełki płacowe. Pracownicy zorganizowani są w zespoły. Zespoły zorganizowane są w taki sposób, że każdy zespół może mieć jeden „nadzespół” i wiele podzespołów. Każdy zespół może mieć jednego leadera. *zadanie *Co z efektywnością połączeń jeśli ilość pracowników, stanowisk i zespołów zacznie rosnąć? *Co jeśli będziemy chcieli zmienić schemat, np. zezwolić na to, aby zespoły miały więcej niż jeden nadzespół? *Co jeśli będziemy chcieli dodać kolejny atrybut do jednej z encji? *Na ile prosty jest proces projektowania i normalizacji? *Co ze skalowalnością horyzontalną? *problemy? Problemy związane ze skalowalnością horyzontalną próbuje się rozwiązać poprzez: *denormalizację relacji, *usuwanie i/lub rozluźnianie ograniczeń, *rozluźnianie polityki transakcyjności. *rozwiązania??? *Bazy odchodzące od paradygmatów relacyjnych. *Projektowane pod odzwierciedlanie struktury danych oraz, nierzadko, pod skalowalność horyzontalną. *Brak założeń dotyczących normalizacji/denormalizacji. *Specjalizowane pod konkretne zastosowania. *NoSQL ?= alternatywa *bazy kolumnowe (Columnar Stores, Wide Column Stores, Sorted Ordered ColumnOriented Stores) *bazy klucz/wartość (key/value stores) *bazy dokumentowe (Document stores/databases) *bazy grafowe (Graph databases) *bazy obiektowe (Object databases) *bazy NoSQL Grafową bazą danych nazywamy taką bazę, która przechowuje dane i związki miedzy nimi w postaci grafu, najczęściej skierowanego. Zgodnie z definicja, graf skierowany (zorientowany) to para G = <V;E>, gdzie V to zbiór wierzchołków (węzłów) o liczności |V| = n, a E to zbiór krawędzi (łuków) o liczności |E| = m, przy czym E jest relacja dwuargumentowa w V taka, że E należy do zbioru V x V . Tak zdefiniowana struktura danych jest wysoce generyczna i pozwala na przechowywanie i odwzorowywanie szerokiej gamy informacji. Jakie zalety i wady ma graf w stosunku do RDBMS? *grafowa baza danych *pełne wsparcie dla transakcji ACID, *możliwość rozproszenia po wielu serwerach (w wersji komercyjnej), *do 34 mld węzłów, 34 mld krawędzi, 68 mld atrybutów, *unikanie operacji JOIN, zwiększenie efektywności poprzez trawersowanie sąsiedztwa, *dynamiczna struktura, możliwość dodawania i usuwania atrybutów z węzła, *dlaczego Neo4j? *generyczne węzły i krawędzie, brak ich typowania, *indeksowanie w oparciu o Apache Lucene, *łatwość projektowania (whiteboardfriendliness), *możliwość embeddowania bazy w aplikacji i używania API w języku Java, *możliwość postawienia samodzielnej instancji i obsługi przez API RESTowe, *dlaczego Neo4j? [2] *możliwość wydawania zapytań w językach Gremlin i Cypher, *graficzna, przeglądarkowa konsola serwera, *narzędzia wspierające programowanie (biblioteki implementujące API RESTowe oraz wspierające operowanie danymi, środowisko Neoclipse), *importer skryptów SQL, *wsparcie dla technologii semantycznych (RDF, SPARQL). *dlaczego Neo4j? [3] *dane w bazie danych przechowywane są w węzłach i w krawędziach *każdy węzeł oraz krawędź posiadają atrybuty opisane przez parę klucz-wartość *obowiązkowym atrybutem jest id nadawane przez bazę danych *krawędzie dodatkowo posiadają obowiązkowy atrybut type, określający typ relacji *dane w Neo4j *Neo4j intro Serwis WWW opisuje pracowników różnych firm poprzez nazwisko, płacę podstawową i płacę dodatkową. Każdy pracownik pracuje na co najmniej jednym stanowisku i posiada swoją historię zatrudnienia. Stanowiska opisane są poprzez nazwę oraz widełki płacowe. Pracownicy zorganizowani są w zespoły. Zespoły zorganizowane są w taki sposób, że każdy zespół może mieć jeden „nadzespół” i wiele podzespołów. Każdy zespół może mieć jednego leadera. *projekt bazy Jak zaprojektować bazę Neo4j? *wykorzystanie Jak zaimplementować i wykorzystać zaprojektowany model w praktyce? *konsola graficzna Mała rzecz a cieszy. *Spring Data Neo4j Tworzenie aplikacji na grafowych bazach danych w oparciu o adnotowane obiekty POJO. *dziękuję za uwagę (to jest ten moment, kiedy zadajecie pytania)