Grafowa baza danych. Joanna Kącka, Paweł Barszcz, Marcin Lewandowski Krystian Lieber, Jakub Pawłot Michał Staroń, Maciej Szawłowski



Podobne dokumenty
Instalacja SQL Server Express. Logowanie na stronie Microsoftu

*Grafomania z. Neo4j. Praktyczne wprowadzenie do grafowej bazy danych.

Hurtownie danych wykład 5

Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i

ActiveXperts SMS Messaging Server

PHP: bazy danych, SQL, AJAX i JSON

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

Programowanie Komponentowe WebAPI

Instrukcja instalacji i obsługi programu Szpieg 3

dziennik Instrukcja obsługi

Wybrane działy Informatyki Stosowanej

Kopie bezpieczeństwa NAPRAWA BAZ DANYCH

Typy przetwarzania. Przetwarzanie zcentralizowane. Przetwarzanie rozproszone

Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych

Dotacje na innowacje. Inwestujemy w waszą przyszłość.

Wykonać Ćwiczenie: Active Directory, konfiguracja Podstawowa

Załącznik 1 instrukcje instalacji

MongoDB. wprowadzenie. dr inż. Paweł Boiński, Politechnika Poznańska

2014 Electronics For Imaging. Informacje zawarte w niniejszej publikacji podlegają postanowieniom opisanym w dokumencie Uwagi prawne dotyczącym tego

Pojęcie bazy danych. Funkcje i możliwości.

Aplikacja serwerowa Platformy Prezentacyjnej Opis produktu

Instalacja SQL Server Konfiguracja SQL Server Logowanie - opcje SQL Server Management Studio. Microsoft Access Oracle Sybase DB2 MySQL

Szpieg 2.0 Instrukcja użytkownika

Referat pracy dyplomowej

System. Instalacja bazy danych MySQL. Autor : Piotr Zielonka tel Piotrków Tryb., sierpień 2018r.

Administracja bazami danych

WINDOWS Instalacja serwera WWW na systemie Windows XP, 7, 8.

Wykład I. Wprowadzenie do baz danych

Dokumentacja fillup - MS SQL

AUREA BPM Oracle. TECNA Sp. z o.o. Strona 1 z 7

SPOSOBY DYSTRYBUCJI OPROGRAMOWANIA PANDA

Ełk, dn r. DOMSET Marcin Brochacki. ul. Wojska Polskiego 43 lok. 3, Ełk. Nip ZAPYTANIE OFERTOWE

Instrukcja instalacji i konfiguracji bazy danych SQL SERVER 2008 EXPRESS R2. Instrukcja tworzenia bazy danych dla programu AUTOSAT 3. wersja 0.0.

DHL CAS ORACLE Wymagania oraz instalacja

Jarosław Kuchta Administrowanie Systemami Komputerowymi. Internetowe Usługi Informacyjne

Szczegółowa specyfikacja funkcjonalności zamawianego oprogramowania.

Leonard G. Lobel Eric D. Boyd. Azure SQL Database Krok po kroku. Microsoft. Przekład: Marek Włodarz. APN Promise, Warszawa 2014

WEBCON BPS Instalacja Standalone

MAMP: Można to pobrać i zainstalować z XAMPP: Można go pobrać i zainstalować z

Firebird Alternatywa dla popularnych darmowych systemów bazodanowych MySQL i Postgres

IBM SPSS Statistics Wersja 22. Linux - Instrukcja instalacji (licencja autoryzowanego użytkownika)

IBM SPSS Statistics Wersja 22. Linux - Instrukcja instalacji (licencja wielokrotna)

R o g e r A c c e s s C o n t r o l S y s t e m 5

Podstawowe pojęcia dotyczące relacyjnych baz danych. mgr inż. Krzysztof Szałajko

Instalacja aplikacji

SZKOLENIE: Administrator baz danych. Cel szkolenia

VinCent Administrator

Od czego zacząć przy budowaniu środowisk wysokiej dostępności?

egroupware czy phpgroupware jest też mniej stabilny.

Krótka Historia. Co to jest NetBeans? Historia. NetBeans Platform NetBeans IDE NetBeans Mobility Pack Zintegrowane moduły. Paczki do NetBeans.

REFERAT O PRACY DYPLOMOWEJ

DESlock+ szybki start

Autorytatywne serwery DNS w technologii Anycast + IPv6 DNS NOVA. Dlaczego DNS jest tak ważny?

SysLoger. Instrukcja obsługi. maj 2018 dla wersji aplikacji (wersja dokumentu 2.5)

Technologia informacyjna

Koncepcja wirtualnej pracowni GIS w oparciu o oprogramowanie open source

W dalszej części dokumentu przedstawiamy skrócony opis kluczowych funkcji systemu. Niniejszy dokument nie zawiera opisu technicznego systemu.

Załącznik nr 2. Przewodnik instalacyjny systemu e-broker Technologiczny v.1.0. Część 4 - Narzędzia informatyczne przeznaczone dla ośrodków innowacji

Sposoby klastrowania aplikacji webowych w oparciu o rozwiązania OpenSource. Piotr Klimek. piko@piko.homelinux.net

Bazy danych. Plan wykładu. Rozproszona baza danych. Fragmetaryzacja. Cechy bazy rozproszonej. Replikacje (zalety) Wykład 15: Rozproszone bazy danych

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Warstwa integracji. wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe.

Windows Serwer 2008 R2. Moduł 8. Mechanizmy kopii zapasowych

SZKOLENIE TWORZENIE SYSTEMÓW

Grzegorz Ruciński. Warszawska Wyższa Szkoła Informatyki Promotor dr inż. Paweł Figat

Problemy techniczne SQL Server

Najczęściej stosowanym systemem obiegu dokumentów elektronicznych jest poczta elektroniczna. Dokumenty przesyłamy sobie jako załączniki do listów.

REFERAT PRACY DYPLOMOWEJ

Instrukcja do panelu administracyjnego. do zarządzania kontem FTP WebAs.

REFERAT PRACY DYPLOMOWEJ

Bazy danych 2. Wykład 1

Zespól Szkół Ponadgimnazjalnych Nr 17 im. Jana Nowaka - Jeziorańskiego Al. Politechniki 37 Windows Serwer 2003 Instalacja

Wprowadzenie do projektu QualitySpy

Win Admin Replikator Instrukcja Obsługi

Bazy danych - ciągłość działania, spójność danych i disaster recovery. Daniel Polek-Pawlak Jarosław Zdebik

oprogramowania F-Secure

Tekla Structures 20 Instalacja

Co to jest NODE.JS? Nowoczesne środowisko programistyczne

BACKUP BAZ DANYCH MS SQL

Część I Tworzenie baz danych SQL Server na potrzeby przechowywania danych

Dysk 20GB przestrzeni Ajax Ajax 1.0 Baza danych MS SQL 2005 lub 2008 Express Java Java 6 run time Microsoft Silverlight 3.

Tworzenie i obsługa wirtualnego laboratorium komputerowego

Aplikacje webowe z wykorzystaniem Node.js oraz Express

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Projekt Fstorage. Łukasz Podkalicki Bartosz Kropiewnicki

Plan. Wprowadzenie. Co to jest APEX? Wprowadzenie. Administracja obszarem roboczym

Kadry Optivum, Płace Optivum. Jak przenieść dane na nowy komputer?

Programowanie obiektowe

Fiery Remote Scan. Uruchamianie programu Fiery Remote Scan. Skrzynki pocztowe

Migracja do PostgreSQL za pomocą narzędzi Enterprise DB

AE/ZP-27-16/14. Oprogramowanie do wykonywania kopii zapasowych oraz zarządzania maszynami wirtualnymi

Co to jest GASTRONOMIA?

Generatory pomocy multimedialnych

System kontroli wersji - wprowadzenie. Rzeszów,2 XII 2010

Program szkolenia KURS SPD i PD Administrator szkolnej pracowni internetowej Kurs MD1 Kurs MD2 Kurs MD3 (dla szkół ponadgimnazjalnych)

REFERAT O PRACY DYPLOMOWEJ

Zasady współpracy programu Doradca Handlowy z Symfonią

R o g e r A c c e s s C o n t r o l S y s t e m 5

Ko n f i gura cja p ra cy V ISO z bazą SQL S e rve r

Transkrypt:

Grafowa baza danych Joanna Kącka, Paweł Barszcz, Marcin Lewandowski Krystian Lieber, Jakub Pawłot Michał Staroń, Maciej Szawłowski 27 marca 2012

ii

Spis treści Wstęp 1 1 Grafowe bazy danych 3 1.1 Dlaczego grafowe bazy danych są interesujące?.................. 3 1.2 Co wyróżnia GBD?.................................... 3 1.3 Struktura danych..................................... 4 1.4 Szukanie informacji w GBD............................... 4 1.5 Wydajność......................................... 5 1.6 Kiedy użyć GBD?..................................... 5 2 Neo4j 7 2.1 Wymagania i wdrożenie................................. 7 2.2 Metody operowania na bazie.............................. 8 2.3 Wsparcie dla języków oraz szkieletów aplikacji................... 9 2.4 Licencjonowanie i ceny.................................. 10 2.5 Dodatkowe funkcjonalności............................... 10 3 Instalacja i konfiguracja Neo4j 13 3.1 Instalacja i konfiguracja Neo4j............................. 13 3.2 Przykładowy kod programu............................... 16 4 Wady i zalety Neo4j 21 4.1 Zalety Neo4j........................................ 21 4.2 Wady Neo4j........................................ 22 4.3 Aspekt wydajności Neo4j................................ 23 5 Przykłady innych grafowych baz danych 25 5.1 Cechy charakterystyczne wybranych rozwiązań................... 25 5.2 Porównanie rozwiązań.................................. 27 Bibliografia 29 A Dokumentacja z zarządzania projektem 31 A.1 Przebieg prac........................................ 31 A.2 Odbyte spotkania projektowe.............................. 31 A.3 Przydzielone role..................................... 32 B Wykorzystane narzędzia 33 B.1 Repozytorium plików................................... 33 B.2 Edycja dokumentacji................................... 35 iii

iv

Wstęp Niniejszy dokument został utworzony w ramach pierwszego etapu projektu grafowej bazy danych na przedmiot Rozproszone Systemy Operacyjne (RSO), prowadzonym w semestrze letnim 2012 na Wydziale Elektroniki i Technik Informacyjnych Politechniki Warszawskiej (WEiTI PW) przez dra inż. Tomasza Jordana Kruka. Dokument ten ma na celu przybliżenie tematu rozproszonych baz danych. Największy nacisk położony został na zagadnienia związane z Neo4J jako najpopularniejszym i najlepiej przygotowanym rozwiązaniem. Przedstawiono tutaj zarówno jego zasadę działania, jak i wynikające z tego wady i zalety. Dla porównania opisano także kilka innych przykładów rozproszonych baz danych. 1

2

Rozdział 1 Grafowe bazy danych Krystian Lieber 1.1 Dlaczego grafowe bazy danych są interesujące? Grafowe bazy danych są jednym z przedstawicieli dynamicznie rozwijającej się grupy określanej jako NoSQL (ang. Not Only SQL nie tylko SQL). Określenie NoSQL powstało w odpowiedzi na dynamiczny rozwój nierelacyjnych, rozproszonych baz danych, często niezapewniających ACID 1. Głównym powodem rosnącego zainteresowania bazami nierelacyjnymi jest rosnąca ilość danych i wątpliwość czy tradycyjne bazy relacyjne będą wstanie ją wydajnie przetwarzać. Kluczową zaletą grafowych baz danych jest przechowywanie danych w przyjaznej formie, dobrze odwzorowującej rzeczywistość. Umieszczanie wielu danych, takich jak powiązania w społeczności czy sieci dróg można umieścić w bazie relacyjnej, jednak nie jest to rozwiązanie naturalne i powoduje problemy na późniejszych etapach. 1.2 Co wyróżnia GBD? Dane tworzące graf można zapisać na wiele różnych sposobów. W szczególności w RBD można zapisać krawędzie jako tabelę łączącą obiekty w relacji wiele-do-wielu. Czy jest to grafowa baza danych? Oczywiście nie. Co zatem sprawia, że bazę danych nazywamy grafową? W grafowej bazie danych graf jest natywną metodą przechowywania informacji. Często określa się, iż GBD to taka, która zapewnia sąsiedztwo wolne od indeksów. Intuicyjnie chodzi o to, iż w GBD informacja o sąsiadach wierzchołka jest przechowywana lokalnie, natomiast w RBD następowałoby odwołanie do indeksu, który wskazywałby sąsiedztwo. 1 ACID zbiór właściwości gwarantujących poprawne przetwarzanie transakcji w bazach danych, atomicity atomowość, consistency spójność, isolation izolacja, durability trwałość 3

4 ROZDZIAŁ 1. GRAFOWE BAZY DANYCH Zatem w przypadku GBD czas przeszukiwania sąsiedztwa zależy jedynie od ilości sąsiadów wierzchołka, tak w RBD od ilości wszystkich krawędzi. 1.3 Struktura danych W teorii graf G(V,E) składa się ze zbioru wierzchołków V i zbioru krawędzi E. Wyróżniamy grafy niezorientowane, zorientowane. Przykładem struktury rzeczywistej reprezentowanej przy pomocy grafu nieorientowanego może być znajomości na portalu społecznościowym, a zorientowanej np. subskrypcje w portalu społecznościowym. Graf mieszany składa się z trzech zbiorów: zbioru wierzchołków V, zbioru krawędzi nieskierowanych E i zbioru krawędzi skierowanych A, pozwala zatem na reprezentacje dwóch poprzednich przykładów w jednej strukturze, pod warunkiem, że między dwoma wierzchołkami występuje jedna krawędź. Graf, w którym może wystąpić więcej niż jedna krawędź między wierzchołkami nazywamy multigrafem. Zatem dobrze będzie jeśli do reprezentacji danych użyty zostanie multigraf mieszany, wtedy obie informacje będzie można przechowywać obok siebie. Dla ułatwienia każdą krawędź niezorientowaną przedstawimy jako 2 krawędzie zorientowane. Każdy węzeł może reprezentować obiekt innego typu. Każda krawędź może reprezentować inny związek. Jeśli dodamy do tego możliwość przechowywania właściwości w krawędziach otrzymamy graf właściwości, który intuicyjnie jest rozszerzeniem grafu ważonego o możliwość definiowania wielu wag o różnych nazwach. Właściwości grafu: krawędzie skierowane, krawędzie związki (różne), wierzchołki obiekty (różne), krawędzie i wierzchołki mają właściwości, właściwości pary klucz/wartość. Większość grafowych baz danych korzysta z grafów właściwości, niektóre korzystają z nadgrafów. Główną różnicą jest możliwość by krawędź wskazywała na więcej niż jeden wierzchołek. 1.4 Szukanie informacji w GBD Zapytanie do GBD jest związane z przeszukaniem grafu. Bardzo istotne, szczególnie w odniesieniu do skalowalności, jest lokalność przesukiwania. W przeciwieństwie do RBD nie wyszukiwanie nie jest globalne, jest jedynie przejściem grafu od wskazanego wierzchołka. Zatem kosztowne złaczenie tabel jest realizowane w postaci prostego przejścia między wierzchołkami.

1.5. WYDAJNOŚĆ 5 Dzięki odpowiednim technologią takim jak interfejs Blueprints możliwe jest pisanie zapytań w jeden prosty sposób dla wielu rodzajów GBD. Inne technologie wspierające zapytania do GBD to GraphQL, SPARQL, GQL. Blueprints są dla GDB odpowiednikiem JDBC. Na Blueprints operują Gremlin, Pipes i Rexster. 1.5 Wydajność W celu pokazania wydajności grafowych baz danych często przytacza się przykład testu dla sieci społecznościowej. Test 2 przeprowadzono przy użyciu neo4j w 2009 roku. Stworzono strukturę sieci społecznościowej w której każda osoba miała 50 znajomych. Dla 1000 osób wygenerowanie listy znajomych dla każdej osoby zajęło: RBD 2000ms, GBD 2 ms. By pokazać skalowalność zwiększono ilość osób do ponad miliona, czas zapytania do GBD nadal wynosił 2ms. Kolejny test 3 dla dużych grafów przeprowadzono przy użyciu miliona wierzchołków i 4 milionów krawędzi. Przewaga neo4j nad MySQL rośnie wraz ze wzrostem głębokości przeszukiwania. Co szczególnie ciekawe dla głębokości 5 MySQL nie był wstanie ukończyć testu w trakcie 2h, podczas gdy neo4j uporał się z zadaniem w 14 minut. 1.6 Kiedy użyć GBD? 1. Kiedy nie jest potrzebna analiza globalna danych. 2. Kiedy graf jest naturalną metodą przedstawienia danych. 3. Kiedy problem jest lokalny w większej strukturze danych. Przykłady: 1. Lokalne wyszukiwanie kto jest znajomym Jana? 2. Lokalne rekomendacje co kupowały osoby które kupowały daną pralkę? 3. Brakujący znajomi kto ze znajomych znajomych Jana nie jest jego znajomym? 4. Szukanie eksperta dla tagów pytania znajdź, kto stworzył odpowiedzi na pytania o tych samych tagach. 2 http://techcrunch.com/2009/10/27/neo-technology-commercializes-next-generation-graph-baseddatabase/ 3 http://markorodriguez.com/2011/02/18/mysql-vs-neo4j-on-a-large-scale-graph-traversal/

6 ROZDZIAŁ 1. GRAFOWE BAZY DANYCH

Rozdział 2 Neo4j Maciej Szawłowski Neo4j jest jedną z najpopularniejszych grafowych baz danych. Stworzona przez firmę Neo Technology ze Szwecji jest jedynym tak zaawansowanym projektem Open Source o tej tematyce. Rozwiązanie zalicza się do metod NOSQL czyli różni się od relacyjnych baz danych (RBD) w kilku aspektach: nie używa SQL jako języka wykonywania zapytań, nie wymagają ustalonego schematu danych (dane mogą być bardzo zróżnicowane), mogą nie wspierać całkowicie zasad ACID 1, dobrze skaluje się horyzontalnie 2. Neo4j została zaimplementowana w Javie, co czyni ten język naturalnym kandydatem do implementacji całej aplikacji. Poniżej przedstawione zostaną możliwości współpracy z innymi językami programowania. 2.1 Wymagania i wdrożenie Bazy Neo4j można użyć na dwa sposoby jako nieodłączna część aplikacji 3 korzystająca z bibliotek umożliwiających manipulację na danych, lub jako oddzielny proces komunikujący się przez protokół HTTP. Twórcy zapewniają, że biblioteki bazy wbudowanej w aplikację zajmuje ok. 750kB. Biblioteki te istnieją tylko dla języków Java i Python inne języki muszą zadowolić się samodzielną bazą oraz REST API i związanymi z nim językami przechodzenia grafu np. Gremlin czy Cypher. Wymagania Neo4j przedstawiono w tablicy 2.1. 1 A atomicity atomowość, C consistency spójność, I isolation izolacja, D durability trwałość 2 Skalowanie horyzontalne oznacza łatwe zwiększanie możliwości poprzez dodawanie do infrastruktury kolejnych maszyn 3 ang. embedded 7

8 ROZDZIAŁ 2. NEO4J Minimum Rekomendowane CPU Intel 486 Intel Core i7 Pamięć RAM 1GB 4-8GB Dysk SCSI, EIDE SSD + SATA System plików ext3 ext4, ZFS Oprogramowanie Java 1.6+, Linux, Windows XP, Mac OS X Tablica 2.1: Przykładowe wymagania Neo4j podane na stronie producenta. 2.2 Metody operowania na bazie Neo4j jest bazą typu NOSQL czyli nie udostępnia metod języka SQL do pobierania, edycji, tworzenia czy usuwania 4. Użytkownik (czy też programista, administrator) ma do dyspozycji kilka różnych narzędzi do operacji na zgromadzonych danych. 2.2.1 Traversal API Neo4j udostępnia natywne API zawierające klasy oraz metody umożliwiające programistyczne poruszanie się po grafie [12]. Za jego pomocą można zdefiniować metodę szukania, np. w głąb lub wszerz. Oprócz tego można wyspecyfikować warunek stopu, np. poprzez zdefiniowane wcześniej enumaracje lub podać funkcję która oceni czy warunek został już spełniony. W podobny sposób można opisać warunki dotyczące poszukiwanej struktury, czy też jakie węzły ze znalezionej puli zwrócić. 2.2.2 REST REST 5 jest bazą dla wszelkich integracji z innymi językami. Udostępnia on pewien wzorzec adresów URL oraz ich argumentów które pozwalają na poruszanie się po przestrzeni węzłów i zależności. Warto zwrócić uwagę na pewną interesującą właściwość tego API. Operacje CRUD są trywialne: polegają na wysłaniu żądania HTTP POST pod odpowiedni adres. Ciekawiej (z punktu widzenia potencjalnego napastnika) rozwiązany jest problem przechodzenia grafu. Twórcy ostrzegają, że używanie tego API wymaga dodatkowego zabezpieczenia serwera przed niepowołanym dostępem, ponieważ zapytania wywołują dynamicznie tworzony kod Groovy [10]. Nie zmienia to faktu, że dostęp poprzez HTTP czyni z Neo4j bardzo uniwersalne rozwiązanie - język aplikacji działającej na bazie jest w tym wypadku właściwie dowolny. 2.2.3 Cypher Cypher [7] jest językiem stworzonym przez Neo Technologies jako zastępstwo SQL w ich bazie danych. W przeciwieństwie do Traversal API czy Gremlina jest językiem deklaratywnym czyli skupia się na opisie problemu, a nie na sposobie jego rozwiązania. Twórcy starali 4 tzw. operacje CRUD create, read, update, delete 5 ang. Representational State Transfer

2.3. WSPARCIE DLA JĘZYKÓW ORAZ SZKIELETÓW APLIKACJI 9 się stworzyć język który będzie maksymalnie czytelny, to znaczy, żeby stworzony kod nie wymagał dodatkowych komentarzy dotyczących swojego działania. Wyrażenie może składać się z czterech części: START, MATCH, WHERE, RETURN inspirowanych strukturą języka SQL. START opisuje węzeł z którego będziemy startować podczas szukania. MATCH przedstawia wzorzec wg. którego szukane będą pasujące węzły. WHERE jest warunkiem który musi być spełniony, aby wyszukane wzorce mogły stać się częścią wyniku. RETURN opisuje które węzły z zakwalifikowanych struktur powinny zostać zwrócone w wyniku. Warto zauważyć, że Cypher został stworzony niedawno, więc możliwe jest, że w najbliższym czasie nastąpią zmiany w składni. Z tego powodu istnieje również polecenie CY- PHER które wskazuje którą wersję parsera języka należy użyć. Oprócz tego, język został stworzony do przeszukiwania grafu, nie udostępnia on metod do dodawania, modyfikacji ani usuwania węzłów ani krawędzi. Wspomniana wcześniej deklaratywność rozwiązuje problem dotyczący bezpieczeństwa podczas przechodzenia grafu, dlatego jest to polecana przez twórców metoda. 2.2.4 Gremlin Gremlin [8] jest językiem przechodzenia grafu 6 opartym na Groovy. Pozwala na tworzenie skryptów opisujących metodę wg. której należy przejść strukturę aby uzyskać wynik. Możliwości Gremlina można uzyskać używając wtyczki Neo4j Gremlin. Typowe użycie polega na przesłaniu pod odpowiedni adres żądania HTTP POST z parametrem script oraz skryptem w formie zakodowanej procentowo 7 lub jako JSON 8. 2.3 Wsparcie dla języków oraz szkieletów aplikacji 9 Neo4j udostępnia REST API. Z tego powodu wybór języka czy frameworku jest właściwie dowolny. Wyżej (sekcja 2.1) opisane zostały dwa podejścia wykorzystania bazy w aplikacji. Z tego powodu wymienione zostanie wsparcie poprzez biblioteki, wtyczki umożliwiające na użycie wbudowanej bazy danych. 6 ang. Graph Traversal Language 7 ang. percent encoded metoda kodowania znaków specjalnych w parametrach żądań HTTP. Więcej na http://en.wikipedia.org/wiki/percent-encoding 8 ang. Javascript Object Notation 9 ang. framework

10 ROZDZIAŁ 2. NEO4J Java Jednym z najpopularniejszych szkieletów aplikacji w Javie jest Spring. Zapewnia on programiście łatwy dostęp do szeregu funkcjonalności takich jak: wsparcie aplikacji internetowych, dostęp do różnorodnych baz danych, moduły zarządzania prawami dostępu czy kompatybilność z rozwiązaniami chmurowymi. Istnieje projekt open-source Spring Data mający na celu integrację technologii bazodanowych. Niedawno dodane zostały również rozwiązania typu NOSQL jak MongoDB czy Blob 10 oraz Neo4j. Rozwiązanie stworzone dzięki współpracy twórców Neo4j oraz Spring pozwala na wykorzystanie wszystkich możliwości bazy. Oczywiści istnieje wiele innych frameworków napisanych w Javie, więc użycie Neo4j (chociaż pewnie nie tak wygodne jak w Springu) powinno być możliwe. Python Zastosowanie Pythona jako głównego języka aplikacji sprowadza się do użycia JPype. Jest to projekt mający na celu stworzenie dostępu aplikacjom Pythona do bibliotek klas napisanych w Javie. Aby ułatwić cały proces, stworzone zostało specjalne API przeznaczone do tego celu. Można je zobaczyć pod adresem: http://docs.neo4j.org/chunked/ milestone/python-embedded.html. Ruby Użycie Ruby w projektach z wbudowaną bazą Neo4j polega na wykorzystaniu wersji języka używającej wirtualną maszynę Javy - JRuby. Dzięki temu - podobnie jak w Pythone - uzyskujemy dostęp do wszystkich klas Javy. Groovy Groovy jest językiem rozszerzającym w pewnym stopniu i w całości kompatybilnym z Javą. Z tego powodu, wykorzystanie Neo4j w obydwu technologiach jest identyczne. Warto zwrócić uwagę na framework Grails, który posiada wtyczkę ułatwiającą pracę z bazą. Oprócz tego oparty jest na Springu, więc jakość rozwiązania jest stale podwyższana. 2.4 Licencjonowanie i ceny Licencjonowanie, funkcjonalności oraz ceny przedstawione są w tablicy 2.2. 2.5 Dodatkowe funkcjonalności Wersja Enterprise posiada kilka dodatkowych funkcjonalności, które zostały przedstawione poniżej. 10 Przykładem może być Simple Storage Services (S3) Amazona.

2.5. DODATKOWE FUNKCJONALNOŚCI 11 Neo4j Community Advanced Enterprise Licensing License Open source Commercial Commercial (GPLv3) and AGPL and AGPL Can be used with closed source software Yes, except Yes, with Yes, with OEM commercial license commercial license Functionality Neo4j high performance graph database Yes Yes Yes Batch inserter for bulk uploads Yes Yes Yes Shell for console access Yes Yes Yes Graph algorithm package Yes Yes Yes Native language bindings (Ruby, Yes Yes Yes Python, Scala, Clojure, Groovy) Web frameworks integration Yes Yes Yes (Spring Framework, Grails, Rails, Django, PHP and more) Neo4j Server Yes Yes Yes Operations and Monitoring SNMP & JMX monitoring Yes Yes Neo4j Web Management console Basic Full Enterprise High load & high availability Online backup of running instance Yes Online failover to warm spare Yes Read slave replication Yes Read/write slave replication Yes High availability with master failover Yes Support & Services Support hours 5x10 7x24 Response time 24h 1h Communication channel Email Phone Technical alerts Yes Yes Quarterly service packs Yes Yes Annual Subscription Free USD 6000 or USD 24,000 EUR 6000 or EUR 24,000 Tablica 2.2: Licencje, funkcje oraz ceny Neo4j. Źródło: http://neotechnology.com/ products/price-list/.

12 ROZDZIAŁ 2. NEO4J 2.5.1 High Availability Opcja High Availability [9] jest trybem pracy rozproszonej. Funkcjonalność ta przynosi dwie główne korzyści: zapewnia replikację danych, dzięki czemu odporność bazy na awarię sprzętu wzrasta, zwiększa możliwości skalowalności - więcej instancji bazy pozwala na większą ilość odczytów w tym samym momencie. Neo4j HA działa w układzie master-slave. Na początku pracy przy pomocy serwisu ZooKeeper wybierany jest master. Podczas każdej operacji zapisu, blokowany jest master oraz instancja bazy na której wykonano operację. Zmiany stanu nie są propagowane od razu, dlatego efekt zapisu może być widoczny na innych maszynach dopiero po jakimś czasie. W przypadku gdyby master miał awarię, ZooKeeper przeprowadzi wybór kolejnego. Odświeżanie danych na węzłach podrzędnych zachodzi cyklicznie co określony czas. Można jednak skonfigurować węzły tak, aby synchronizacja następowała tylko podczas zapisu na tym węźle 11. 2.5.2 Backup Podobnie jak w przypadku High Availability funkcja kopii zapasowej [5] jest dostępna jedynie w najwyższej wersji Neo4j. Istnieją dwa rodzaje kopii: 1. Pełna pełna kopia polega na sklonowaniu całej bazy w trakcie jej działania. Nie są wykorzystywane żadne blokady - w trakcie procesu baza jest w pełni funkcjonalna. Oznacza to, że jej stan może zmienić się podczas tworzenia kopii. Dlatego zaraz po zakończeniu procesu, odtwarzane zostają z dziennika wszystkie operacje które zostały przeoczone w trakcie klonowania. 2. Przyrostowa kopia przyrostowa polega na odtworzeniu wszystkich operacji, które nastąpiły między dwoma punktami w czasie. Dzięki temu proces ten trwa dużo krócej niż tworzenie pełnej kopii. Należy pamiętać, że aby zrobić kopię przyrostową, wymagany jest pełny obraz bazy. Przywracanie bazy danych jest trywialnie proste: wystarczy zastąpić folder z bazą, folderem powstałym w procesie tworzenia kopii. 11 Co dzieje się zawsze, ponieważ jest wymuszone protokołem komunikacyjnym.

Rozdział 3 Instalacja i konfiguracja Neo4j Michał Staroń 3.1 Instalacja i konfiguracja Neo4j Neo4j może być uruchomione jako integralna część tworzonej aplikacji, oddzielny serwer danych lub też rozmieszczone na wielu maszynach fizycznych lub wirtualnych w trybie High Availability. 3.1.1 Instalacja serwera Neo4j Neo4j może zostać zainstalowane jako usługa systemowa lub jako program użytkowy. Aby zainstalować Neo4j ściągamy odpowiednią wersję ze strony http://neo4j.org/download. Następnie rozpakowujemy zawartość archiwum do wybranego katalogu. Aby uruchomić serwer bazy danych uruchamiamy: na Linux/MacOS:./bin/neo4j start na Windows:.\bin\Neo4j.bat start Aby uruchomić serwer Neo4j jako usługę systemową w systemie Windows: 1. Otwieramy Wiersz Poleceń jako Administrator. 2. Uruchamiamy w katalogu, gdzie są wypakowane pliki:.\bin\neo4j.bat install 3.1.2 Neo4j jako integralna część aplikacji Neo4j może zostać załączone do kodu aplikacji poprzez dołączenie odpowiednich bibliotek Java. W czasie pisania programu odwołujemy się do API GraphDatabaseService 1. Aby 1 http://components.neo4j.org/neo4j/1.6.1/apidocs/org/neo4j/graphdb/graphdatabaseservice.html 13

14 ROZDZIAŁ 3. INSTALACJA I KONFIGURACJA NEO4J wykorzystać tryb wysokiej dostępności zamiast EmbeddedGraphDatabase 2 używamy HighlyAvailableGraphDatabase 3. 3.1.3 Tryb pracy rozproszonej Tylko wersja Neo4j Enterprise wspiera tryp pracy rozproszonej. W poniższej tabeli zostały przedstawione parametry konfiguracji trybu pracy rozproszonej: Nazwa Parametru Wartość Przykładowa wartość Wymagany? ha.server_id integer >= 0 1 tak ha.server (wykrywany automatycznie) my-domain.com:6001 nie domena i port, gdy działa jako master ha.coordinators oddzielone przecinkiem localhost:2181, tak połączenia z localhost:2182, coordinator localhost:2183 ha.pull_interval czas (w sekundach) 30 nie pomiędzy kolejnymi odpytywaiami pomiędzy master i slave ha.slave_coordinator_ tworzy element slave, brak nie update_mode który nigdy nie stanie się master ha.read_timeout jak długo slave będzie 20 nie czekał na odpowiedź master (domyślnie 20) ha.lock_read_timeout jak długo blokada 40 nie przejęcia slave a będzie aktywna (domyślnie wartość ha.read_timeout) ha.zk_session_timeout czas trwania sesji instancji w ZooKeeper 30 nie Przykładowa konfiguracja Neo4j High Availability Po ściągnięciu i rozpakowaniu wersji enterprise edytujemy plik./conf/coord.cfg przypisując odpowiedni clientport i wpisując kolejno zakresy portów oraz adresy IP maszyn na których działa Coordinator. Plik ten bedzie identyczny dla trzech maszyn. 2 http://components.neo4j.org/neo4j/1.6.1/apidocs/org/neo4j/kernel/embeddedgraphdatabase.html 3 http://components.neo4j.org/neo4j-enterprise/1.6.1/apidocs/org/neo4j/kernel/highlyavailablegraphdatabase.html

3.1. INSTALACJA I KONFIGURACJA NEO4J 15 #./ conf / coord. cfg... server.1=192.168.1.201:2888:3888 server.2=192.168.1.201:2889:3889 server.3=192.168.1.201:2890:3890... clientport =2181 Następnie tworzymy plik myid zawierający unikalny numer <id> zgdony z numerami użytymi wcześniej w server.<id>. Umieszczamy go w folderze./data/coordinator/. echo '1' >./ data / coordinator / myid Możemy uruchomić usługi Coordinator na każdej z maszyn:./ bin / neo4j - coordinator start W pliku./conf/neo4j.properties wpisujemy adresy i porty usług Coordinator oraz przypisujemy odpowiednie numery id serwerom: #./ conf / neo4j. properties # unique server id for this graph d ata ba se # can not be neg ati ve id and must be unique ha. server_id = 1 # ip and port for this i nst anc e to bind to ha. server = localhost :6001 # connection information to the coordinator cluster client ports ha. coordinators = 192.168.1.201:2181,192.168.1.202:2181,192.168.1.203:2181 W pliku./conf/neo4j-server.properties aktywujemy tryb HA i jeśli uruchamiamy kilka usług Coordinator na tej samej maszynie odpowiednio modyfikujemy port: #./ conf / neo4j - server. properties... # http port ( for all data, administrative, and UI access ) org. neo4j. server. webserver. port =7474... # Allowed values : # HA - High Availability # SINGLE - Single mode, default. # To run in High Availability mode, configure the coord. cfg file, and the # neo4j. properties config file, then uncomment this line : org. neo4j. server. database. mode = HA Uruchamiamy wszystkie instancje serwera Neo4j:./ bin / neo4j start

16 ROZDZIAŁ 3. INSTALACJA I KONFIGURACJA NEO4J Po uruchomieniu powinniśmy móc dostać się do wszystkich serwerów i sprawdzić status poprzez interfejs http://[adres_ip]:[port (domyślny:7474)]/webadmin/. 3.2 Przykładowy kod programu Pierwszym elementem jest dołączenie bibliotek jar Neo4j do projektu z folderu./lib/. Aby stworzyć lub otworzyć bazę danych tworzymy instancję EmbeddedGraphDatabase 4. graphdb = new EmbeddedGraphDatabase ( DB_PATH ); Aby zatrzymać działanie bazy Neo4j wywołujemy: graphdb. shutdown () ; 3.2.1 Hello World Typy relacji tworzone są z wykorzystaniem struktury enum. W tym przykładzie potrzebujemy tylko jednej wartości. private static enum RelTypes implements RelationshipType { KNOWS } Deklarujemy niezbędne zmienne: GraphDatabaseService graphdb ; Node firstnode ; Node secondnode ; Relationship relationship ; Kolejny krok to uruchomienie serwera bazy danych. DB_PATH to ścieżka do bazy danych - jeśli nie istnieje plik zostanie on utworzony. graphdb = new EmbeddedGraphDatabase ( DB_PATH ); Tworzymy graf składający się z dwóch węzłów połączonych jedną relacją oraz przypisanych im właściwości. firstnode = graphdb. createnode () ; firstnode. setproperty ( " message ", " Hello, " ); secondnode = graphdb. createnode () ; secondnode. setproperty ( " message ", " World!" ); relationship = firstnode. createrelationshipto ( secondnode, RelTypes. KNOWS ); relationship. setproperty ( " message ", " brave Neo4j " ); Nasz graf wygląda tak, jak przedstawiono na rysunku 3.2. Usuwamy dane z bazy: 4 http://components.neo4j.org/neo4j/1.6.1/apidocs/org/neo4j/kernel/ EmbeddedGraphDatabase.html

3.2. PRZYKŁADOWY KOD PROGRAMU 17 Rysunek 3.1: Interfejs zarządzania i monitorowania Neo4j.

18 ROZDZIAŁ 3. INSTALACJA I KONFIGURACJA NEO4J firstnode. getsinglerelationship ( RelTypes. KNOWS, Direction. OUTGOING ). delete () ; firstnode. delete () ; secondnode. delete () ; Zamykamy bazę danych: graphdb. shutdown () ;

3.2. PRZYKŁADOWY KOD PROGRAMU 19 Rysunek 3.2: Schemat grafu "Hello World"

20 ROZDZIAŁ 3. INSTALACJA I KONFIGURACJA NEO4J

Rozdział 4 Wady i zalety Neo4j Marcin Lewandowski Neo4j, jako grafowa baza danych typu NoSQL, jest przeznaczona pod pewną klasę zastosowań. Implikuje to posiadanie pewnych zalet w przypadku zastosowań zgodnych z przeznaczeniem Neo4j oraz wad, gdy narzędzie używane jest jako konwencjonalna baza danych. Neo4j jest zaprojektowane do przechowywania i manipulowania danych grafowych i pół-strukturalnych (ang. semi-structured) i sprawdza się znacznie lepiej w takich rozwiązaniach od relacyjnych baz danych. Analogicznie, w sytuacjach przeciwnych prym wiodą rozwiązania relacyjne. 4.1 Zalety Neo4j Do wyraźnych, charakterystycznych atutów rozwiązania Neo4j należą: 1. Wydajność Neo4j zostało stworzone z myślą o wydajności. Rzeczywiście, opisywane rozwiązanie pozwala uzyskać nawet kilkudziesięciokrotny wzrost wydajności w porównaniu z analogicznymi problemami rozwiązywanymi za pomocą relacyjnych baz danych. Ponieważ wydajność można mierzyć na wiele sposobów, szczegółowy opis wydajności znajduje się w podrozdziale 4.3. 2. Skalowalność to drugi paradygmat wykorzystany przy tworzeniu Neo4j. Rozwiązanie pozwala na przechowywanie ponad 100 milionów elementów (węzłów, atrybutów oraz związków) na jednej maszynie i wciąż sprawne nimi zarządzanie [13]. 3. Transakcje ACID pełna tranzakcyjność, wspiera JTA/JTS, XA, 2PC, wykrywa zakleszczenia [6]. 4. Łatwa i wydajna reprezentacja pół-strukturalnych danych, sieci i grafów Neo4j jest stworzony do przechowywania danych pół-strukturalnych (odpowiadających tabeli z wieloma kolumnami atrybutowymi, które nie są wypełniane w większości krotek) [13]. 21

22 ROZDZIAŁ 4. WADY I ZALETY NEO4J 5. Łatwe modyfikowanie struktury ponieważ Neo4j nie używa statycznych tabel z krotkami, lecz cała struktura danych jest w formie łatwo modyfikowalnego grafu [13]. 6. Rozwiązanie dyskowe (ang. disk-base) przeznaczone do przechowywania struktur na dyskach twardych. Zoptymalizowane pod względem wydajności i skalowalności na tychże dyskach. Wsparcie SSD [4]. 7. Brak potrzeby obiektowo-relacyjnego mapowania (ang. Object-relational mapping) w przeciwieństwie do relacyjnych baz danych, nie są konieczne odpowiednie mechanizmy do konwersji niekompatybilnych danych zawartych w tabelach do obiektów. 8. Lekkość (ang. light-weight) rozwiązania Neo4j jest rozwiązaniem małym i lekkim. Jako komponent Java (pojedynczy plik nieprzekraczający 1MB [4]), nie potrzebuje dodatkowych platform uruchomieniowych, a mimo to zapewnia wydajność na skalę serwerową [1]. 9. Solidność (ang. robust) - Neo4j jest obecnie dojrzałą technologią. Było używane przez lata w wymagających środowiskach działających bez przerwy [13]. 10. Wolne oprogramowanie (ang. open source) Neo4j w wersji Community jest dostępne na licencji GPLv3, natomiast wersje Advanced oraz Enterprise są dostępne na licencji AGPLv3 lub komercyjnej [11]. 4.2 Wady Neo4j Neo4j ma również swoje wady z których część jest związana z przyjętymi założeniami rozwiązania: 1. Bezpieczeństwo [1] Neo4j nie posiada wbudowanych rozwiązań zabezpieczających. Zakłada, że jest uruchomione w zaufanym środowisku. 2. Brak wsparcia dla wielu użytkowników [1] obsługa wielu użytkowników musi być realizowana na poziomie aplikacyjnym. 3. Gorsza wydajność dla strukturalnych danych - Neo4j, jako rozwiązanie grafowe, źle się spisuje dla danych, które dobrze są opisywane w relacyjnych bazach danych[13]. Szczegóły opisane są w podrozdziale 4.3. 4. Gorsza wydajność dla danych liczbowych i dat Neo4j używa Lucene, które jest zoptymalizowane do indeksowania danych tekstowych [1]. 5. Niepopularność grafowego podejścia ze względu na wielką popularność relacyjnych baz danych, każde rozwiązanie grafowej bazy danych (w tym Neo4j) wymaga od użytkowników nauki nie tylko nowych narzędzi, ale i odmiennego podejścia do przechowywania i zarządzania danymi. Jednocześnie, w porównaniu ze społecznością

4.3. ASPEKT WYDAJNOŚCI NEO4J 23 związaną z relacyjnymi bazami danych, użytkownicy Neo4j mają mniejsze wsparcie od użytkowników tejże bazy danych [13]. 6. Brak alternatywnych implementacji [13, 2] wprawdzie to nie wada sama w sobie, lecz brak innych implementacji wystawia Neo4j na ryzyko zastoju i braku rozwijania. 7. Brak wyzwalaczy (ang. trigger) Planowane jest ich wprowadzenie w przyszłości [4]. 8. Niedoskonałe narzędzia do zarządzania danymi zwłaszcza w porównaniu z relacyjnymi bazami danych, narzędzia do zarządzania Neo4j mają mniejsze możliwości [13, 2]. 4.3 Aspekt wydajności Neo4j Nie powinno być zaskoczeniem, iż każde dedykowane rozwiązanie jest dobre w tym, do czego zostało przewidziane. Nie inaczej jest i w tym przypadku. Zarówno relacyjne jak i graficzne bazy danych spełniają dobrze swoją funkcję. W szczególności Neo4j, jako dedykowane narzędzie do tworzenia i zarządzania grafowymi bazami danych, pozwala uzyskać wydajność większą o rzędy wielkości w porównaniu do relacyjnych baz danych. Materiały wprowadzające do Neo4j [2] zachwalają to rozwiązanie pokazując niezwykle optymistyczne wybrane wyniki ukazane w tablicy 4.1. Testy na danych grafowych [3] pokazują wyższą wydajność rozwiązania Neo4j. Podsumowując zawartość opisywanych testów, przejrzenie struktury grafu oraz zwrócenie około 350 milionów wierzchołków zajęło rozwiązaniu Neo4j niecałe 15 minut. Baza danych My- SQL nie ukończyła analogicznego zadania nawet po upływie dwóch godzin. W innym teście [13] na komputerze z procesorem Core 2 Duo 2.4GHz oraz 8GB pamięci RAM (z czego 2GB przypisane maszynie JVM dla Neo4j) przejście po ponad 100 000 relacjach zajmuje mniej niż 10 sekund. Trzeba jednak mieć na uwadze, że powyższe testy były wykonywane na danych trzymanych w postaci grafów. Można podejrzewać, że same wyniki były dobrane tak, aby pokazywać zalety Neo4j, ale nie ujawniać wad. Bazy relacyjne nie są przystosowane do tego typu reprezentacji, gdyż wymagają kosztownych złączeń swoich tabel. Nieco bardziej ogólne testy (jednak również na danych w postaci grafu) są ukazane w innym dokumencie [1] porównującym rozwiązanie MySQL z Neo4j. Po pierwsze, w przypadku przechowywania w bazie danych elementów o typach liczbowych (integer) oraz Baza danych Liczba węzłów Czas zapytania Relacyjna 1 000 2 000 ms Neo4j 1 000 2 ms Neo4j 1 000 000 2 ms Tablica 4.1: Porównanie czasów zapytań w bazach danych.