Grafowe bazy danych - przegl d technologii

Wielkość: px
Rozpocząć pokaz od strony:

Download "Grafowe bazy danych - przegl d technologii"

Transkrypt

1 Grafowe bazy danych - przegl d technologii Daniel Sªotwi«ski Spis tre±ci 1 Koncepcja grafowych baz danych Graf jako struktura danych Geneza grafowych baz danych Relacyjne bazy danych (RBD) a grafowe bazy danych (GDB) Grafowy model danych Struktury danych Wi zy integralno±ci Spójno± schemat-instancja (ang. schema-instance consistency) To»samo± obiektu oraz integralno± referencyjna (ang. object identity and referential integrity ) Zale»no±ci funkcyjne J zyki zapyta«i modykacji danych Zastosowania Obszary i przyczyny u»ycia modelu grafowego Zastosowania klasyczne (ang. classical applications) Sieci zªo»one (ang. complex networks) Rzeczywiste zastosowania Przegl d dost pnych technologii Opis wybranych systemów Porównanie wybranych cech GBD Przykªadowa implementacja bazy danych neo4j Instalacja bazy Utworzenie grafu Wyszukiwanie w grae Peªny kod przykªadu Podsumowanie. 19 1

2 1 Koncepcja grafowych baz danych 1.1 Graf jako struktura danych Graf jest jedn z podstawowych abstrakcji w informatyce i posiada wiele zastosowa«. Praktycznie ka»da aplikacja, która operuje na grafach, musi te struktury przechowywa w pami ci oraz tworzy do nich zapytania. W ostatnim czasie wzrosªo zainteresowanie grafami jako reprezentacj sieci spoªeczno±ciowych (ang. social networks), struktur tworz cych sie stron internetowych i innych. W biologii grafy u»ywa si do modelowania sieci metabolicznych, sieci oddziaªywa«mi dzybiaªkowych, grafów struktur chemicznych, klastrów genów, map genetycznych. Grafy to jedne z najbardziej u»ytecznych struktur do modelowania obiektów i oddziaªywa«. 1.2 Geneza grafowych baz danych Zainteresowanie naukowców grafowymi bazami danych rozwin ªo we wczesnych latach 90', lecz pó¹niej niemal wygasªo. Zainteresowanie przeniosªo si na technologie modelowania danych póªstrukturalnych, m. in. hipertekst oraz XML. Struktury drzewiaste byªy wystarczaj ce do wi kszo±ci zastosowa«. Wraz z upowszechnieniem Internetu jako narz dzia dost pu do danych, ilo± danych zacz ªa rosn zarówno pod wzgl dem ilo±ci zasobów, jak i poª cze«mi dzy tymi zasobami. Zacz to coraz cz ±ciej u»ywa modelu grafowego do reprezentacji ogromnych ilo±ci danych. Tradycyjne magazyny danych (relacyjne bazy danych) s zdolne do przechowywania reprezentacji struktur grafowych, jednak nie czyni tego w prosty i naturalny sposób, reprezentacja taka nie jest te» wydajna. Dlatego znacznie potrzeba stosowania baz danych wyspecjalizowanych do przechowywania danych grafowych. 1.3 Relacyjne bazy danych (RBD) a grafowe bazy danych (GDB) Relacyjne bazy danych. Jedn z przyczyn sukcesu relacyjnych baz danych jest ich zdolno± do modelowania praktycznie dowolnej struktury danych bez wprowadzania redundancji lub utraty precyzji. Osi gni ciu tego pomaga na etapie projektowania bazy danych proces normalizacji. Po stworzeniu struktury bazy dane mog by dodawane, modykowane oraz pobierane z u»yciem j zyka SQL (Structured Query Language). Model relacyjny posiada jednak wady: Problemy z wydajno±ci zapyta«sql, które obejmuj wiele tabel (zª cze«). Niska skalowalno±, trudno±ci w zmianie struktury bazy po pewnym czasie, trudno±ci w modelowaniu struktur drzewiastych, danych póªstrukturalnych danych hierarchicznych, sieci i innych. Model relacyjny jest sªabo dopasowany do popularnych obecnie paradygmatów rozwoju oprogramowania, w szczególno±ci technologii i j zyków zorientowanych obiektowo oraz j zyków dynamicznych. Problem w literaturze angielskiej nosi nazw object-relational impedance mismatch. Konieczne jest tworzenie tzw. warstw ORM (Object-Relational Mapping), 2

3 mapuj cych relacje (tabele) na obiekty i odwrotnie. Systemy te (np. Hibernate) dziaªaj z ró»nym skutkiem, cz sto maj problemy z wydajno±ci. Dane typu semi-structured s cz sto modelowane jako du»e tabele z wieloma kolumnami, które s puste dla wi kszo±ci wierszy (macierze rzadkie), co prowadzi do niskiej wydajno±ci. Alternatywne modelowanie tych struktur za pomoc wielu poª czonych tabel tak»e nie jest wydajne, ze wzgl du na du»y koszt wykonywania zª cze«tabel w zapytaniach (joins). Wg teorii struktury grafowe zapisane w RBD mo»na podda normalizacji, ma to jednak powa»ne konsekwencje wydajno±ciowe przy zapytaniach. Konsekwencje s zwi zane z charakterem rekursywnym struktur takich jak np. drzewa plików, struktury sieciowe, sieci spoªeczne oraz charakterem zapisu danych w postaci relacji. Ka»da operacja na relacji pomi dzy w zªami sieci (czyli kraw dzi grafu) skutkuje wykonaniem zª czenia mi dzy tabelami RBD operacji powolnej i nieskalowalnej przy rosn cej liczbie krotek (ang. tuples) w tabelach. Grafowe bazy danych. Zapisanie u»ywanych w programach struktur grafowych w grafowej bazie danych likwiduje powy»sze problemy. Grafowa baza danych jest bardziej naturaln ni» RBD metod reprezentacji, przechowywania i pobierania danych, których charakter nie przystaje do typowego schematu bazy relacyjnej. Dobrym przykªadem s modele sieci spoªeczno±ciowych lub inne modele zawieraj ce zwi zki, których nie mo»na ªatwo reprezentowa w postaci tabeli lub których nie mo»na skalowa. W pozycji bibliogracznej [3] opisano prób, podczas której zostaªa utworzona struktura sieci spoªeczno±ciowej skªadaj cej si z 1000 u»ytkowników, gdzie ka»dy z nich posiadaª 50 znajomych. Tradycyjna RBD potrzebowaªa 2000 ms na wykonanie zapytania o dane ka»dego przyjaciela ka»dego u»ytkownika. Analogiczna grafowa baza danych zaimplementowana w neo4j potrzebowaªa na t operacj tylko 2 ms. W celu zaprezentowania wydajno±ci i skalowalno±ci bazy neo4j zwi kszono liczb u»ytkowników do Okazaªo si,»e caªkowity czas zapyta«tak»e wyniósª 2 ms! Jak wida, wa»n cech modelu grafowego jest zdolno± do ªatwego skalowania przy zªo»onych relacjach mi dzy encjami w bazie oraz du»a elastyczno±. 2 Grafowy model danych 2.1 Struktury danych Reprezentacja grafowa opiera si na dwóch poj ciach: encji (inaczej obiektu, w zªa) oraz relacji (powi zania, kraw dzi). Encja reprezentuje pojedynczy byt. Relacja jest pewn wªasno±ci wyst puj c (lub nie) pomi dzy encjami. Encje oraz relacje mog by opisane przez atrybuty (wªasno±ci). Mówi c j zykiem teorii grafów, model jest etykietowanym i skierowanym multigrafem z atrybutami. Graf etykietowany posiada etykiet dla ka»dej kraw dzi, b d c jej typem. Graf skierowany zawiera kraw dzie z okre±lonym kierunkiem, od w zªa ¹ródªowego do w zªa ko«cowego. Graf z atrybutami umo»liwia przypisanie zmiennej listy atrybutów ka»demu w zªowi i ka»dej kraw dzi. Atrybut jest warto±ci zwi zan z nazw. Multigraf mo»e zawiera wielokrotne 3

4 kraw dzie pomi dzy dwoma w zªami. Oznacza to,»e dwa w zªy mog by ª czone wiele razy przez ró»ne kraw dzie, nawet je±li te kraw dzie maj ten sam w zeª ¹ródªowy, docelowy oraz etykiet. Teoria grafów jest bardzo u»yteczna i odpowiednia do rozwi zywania wielu problemów z wielu ró»nych dziedzin, w których dane modelowane s z przy pomocy struktur grafowych. Przykªadem algorytmu pochodz cym z teorii grafów jest znajdowanie najkrótszej ±cie»ki. 2.2 Wi zy integralno±ci Wi zy integralno±ci s ogólnymi instrukcjami i reguªami, które deniuj zbiór spójnych stanów bazy danych i/lub zmian stanów. W przypadku grafowych baz danych wyró»niamy nast puj ce wi zy integralno±ci: Spójno± schemat-instancja (ang. schema-instance consistency ) Grafowe bazy danych cz sto (ale nie zawsze) deniuj schemat bazy (ang. schema), który konkretna instancja bazy danych musi speªnia. Spójno± schemat-instancja w ogólno±ci podporz dkowuje si poni»szym wytycznym: 1. instancja powinna zawiera tylko encje i relacje o typach zdeniowanych w schemacie 2. encja w instancji mo»e mie wyª cznie te relacje lub wªa±ciwo±ci ( properties), które s zdeniowane dla typu tej encji (lub w przypadku dziedziczenia nadtypu encji). Tak»e wszystkie etykiety w zªów i kraw dzi musz wyst pi w schemacie. Oddzielenie schematu i instancji (ang. schema-instance separation ) Okre±la stopie«, w jakim schemat i instancja s rozró»niane w bazie danych. Model danych mo»e by zaklasykowany jako strukturalny (structured) lub niestrukturalny (unstructured) w zale»no±ci od tego, czy pozwala lub nie pozwala na denicj schematu w celu ograniczenia instancji bazy danych do dobrze okre±lonych typów danych. W wi kszo±ci baz danych wyst puje rozró»nienie schematu i instancji To»samo± obiektu oraz integralno± referencyjna (ang. object identity and referential integrity ) W zorientowanych obiektowo bazach danych (jakimi s grafowe bazy danych) to»samo± obiektu jest niezale»na od warto±ci atrybutów i jest osi gni ta przez zapisanie w ka»dym obiekcie w bazie unikalnego identykatora, np. etykiety. Integralno± encji (entity integrity) zapewnia,»e ka»dy w zeª grafu jest unikaln encj identykowan przez jej kontekst. Integralno± referencyjna ( referential integrity) wymaga istnienie odniesienia tylko do istniej cych encji. Te ograniczenia odpowiadaj wi zom integralno±ci klucza podstawowego oraz klucza obcego (referencyjnego) w relacyjnych bazach danych. 4

5 2.2.3 Zale»no±ci funkcyjne Zale»no±ci funkcyjne s zale»no±ciami semantycznymi. Zale»no± funkcyjna A B, gdzie A i B s zbiorami atrybutów wyra»a,»e A okre±la warto± B we wszystkich w zªach bazy danych. Semantyczne wi zy integralno±ci na poziomie schematu bazy mog by reprezentowane przez skierowane kraw dzie. 2.3 J zyki zapyta«i modykacji danych J zyk zapyta«jest zbiorem operatorów lub reguª wnioskowania, które mog by zastosowane do dowolnych instancji typów struktur danych modelu, w celu akwizycji i manipulowaniu danymi zawartymi w tych strukturach. Wiele j zyków obsªuguje przechodzenie grafów (graph traversal ). Przechodzenie to wyszukanie pewnych obiektów (w zªów) startuj c z innych w zªów. Na przykªad, je±li pewien obiekt w grae jest niepoprawny, to ta informacja musi zosta rozpropagowana do wszystkich potomków tego w zªa - konieczno± przej±cia grafu. Innym przykªadem jest wyszukiwanie pewnych informacji w grae. Zapytania dzilimy na dwa typy: zapytania strukturalne (structural queries) i zapytania o dane (data queries). Przykªadowe zapytania strukturalne: znajd¹ w zªy-sieroty: znajd¹ wszystkie w zªy w grae, które s singletonami - nie maj we±ciowych i wyj±ciowych kraw dzi przejd¹ graf do gª boko±ci 4 i zlicz liczb dost pnych w zªów Przykªadowe zapytania o dane: zlicz liczb w zªów, których dane s równe podanej warto±ci zlicz liczb w zªów, których dane s mniejsze od podanej warto±ci zlicz liczb w zªów, których dane zawieraj podany ªa«cuch tekstowy Przykªadowe j zyki zapyta«: Gremlin - jest to grafowy j zyk programowania. Posiada wbudowane mechanizmy zapyta«grafowych, analizy i manipulacji grafami. Jego obsªug posiada m.in. Neo4j. SPARQL - umo»liwia wyra»anie zapyta«dotycz cych ró»norodnych ¹ródeª danych, gdzie dane s przechowywane w RDF. Wynikiem zapyta«sparql jest zbiór grafów RDF. Obsªuga np. w AllegroGraph. G, G+, GraphLog - J zyki te umo»liwiaj tworzenie tzw. grafów zapyta«(query graph). Zapytanie grafowe w przypadku j zyka G wyra»one w jest zbiorem etykietowanych skierowanych multigrafów, których w zªy mog by zmiennymi lub staªymi. Wynikiem zapytania jest suma ( union) wszystkich grafów zapyta«, które dopasowano do podgrafów z instancji grafu (bazy). G-Log - zawiera j zyk deklaratywny do zªo»onych obiektów. U»ywa logiczn notacj speªnienia reguª (rule satisfaction) do wyznaczenia odpowiedzi na zapytanie. 5

6 Glide - zapytania s wyra»one z u»yciem liniowej notacji skªadaj cej si z wyra»e«regularnych (etykiet i wild-cards). 3 Zastosowania 3.1 Obszary i przyczyny u»ycia modelu grafowego W artykule [4] podzielono zastosowania grafowych baz danych na dwie ogólne kategorie: zastosowania klasyczne (ang. classical applications) i sieci zªo»one (ang. complex networks). Sieci zªo»one wyst puj w dziedzinach charakteryzuj cych si ogromn ilo±ci danych oraz struktur sieci. Zastosowania klasyczne to wszystkie systemy, w których dotychczas stosowano rozwi zana klasyczne (RBD), w których jednak wyst puj problemy, z którymi mo»na sobie poradzi poprzez u»ycie grafowego modelu danych Zastosowania klasyczne (ang. classical applications) Jako uogólnienia klasycznego modelu bazodanowego Model klasyczny jest cz sto krytykowany za brak semantyki, pªask struktur danych, trudno±ci w odkryciu przez u»ytkownika relacji mi dzy danymi oraz trudno±ci w modelowaniu zªo»onych obiektów. Gdy zªo»ono± danych przekracza mo»liwo±ci modelu relacyjnego Taka sytuacja mo»e wyst pi w: zarz dzaniu sieciami transportowymi (kolejowymi, lotniczymi, wodnymi, telekomunikacyjnymi), modelowaniu systemu drogowego, komunikacji zbiorowej. Wiele zastosowa«grafowe bazy danych znajduj w systemach GIS (Systemy Informacji Geogracznej) oraz przestrzennych bazach danych. W sytuacjach, gdy siªa ekspresji j zyków zapyta«modelu relacyjnego (SQL) jest zbyt ograniczona Operacje, które s naturalne w modelu grafowym i s implementowane w wi kszo±ci grafowych baz danych, posiadaj szerokie zastosowanie. Przykªady takich operacji, to ró»ne rodzaje przechodzenia grafów oraz wyszukiwania. W systemach reprezentacji wiedzy U»ycie grafowych baz danych pozwala na zwi kszenie elastyczno±ci bazy wiedzy oraz technik wnioskowania. W wielu procesach modelowania semantycznych i zorientowanych obiektowo baz danych u»ywa si abstrakcji w postaci grafu. W takich sytuacjach warto rozwa»y u»ycie grafowej bazy danych, gdzie zarówno operacje CRUD (Create, Read, Update, Delete), jak i reprezentacja danych b dzie bardziej odpowiednia. Jako rozszerzenie funkcjonalno±ci oferowanej przez obiektowe bazy danych, np. w systemach CASE, CAD, przetwarzania obrazów, analizy danych naukowych Interfejsy graczne i wizualne, systemy geograczne, obrazkowe i multimedialne. Sie Semantyczna (Semantic Web) 6

7 3.1.2 Sieci zªo»one (ang. complex networks) Sieci spoªeczno±ciowe W tych sieciach w zªy reprezentuj ludzi lub grupy ludzi, a kraw dzie pokazuj zwi zki lub przepªywy pomi dzy w zªami. Przykªady relacji i grafów: sie przyjacióª/znajomych, zale»no±ci biznesowych, towarzyskich, sie osób wspóªpracuj cych naukowo, sieci komputerowe. Sieci informacji (information networks) W modelu tym relacje reprezentuj przepªywy informacji, np. cytaty pomi dzy artykuªami akademickimi, sie WWW (hiperª cza), sieci peerto-peer, relacje pomi dzy klasami sªów w tezaurusie, sieci preferencji. Sieci technologiczne W tych sieciach dominuj aspekty przestrzenne i geograczne struktury. Przykªady: Internet (jako sie komputerowa), sieci energetyczne, drogi lotnicze, sieci telefoniczne, sieci kurierskie (pocztowe), GIS. Sieci biologiczne Model grafowy u»ywany jest do reprezentowania informacji biologicznej, której du»a obj to±, zarz dzanie i analiza staªy si trudno±ci, której przyczyna le»y w zautomatyzowaniu procesu akwizycji danych. 3.2 Rzeczywiste zastosowania W tym rozdziale przedstawiono kilka rzeczywistych projektów, przy których wykorzystano grafowe bazy danych. Amanzi Wireless Explorer Neo4j Amanzi Wireless Explorer (AWE) jest platform open source sªu» c do wizualizacji, zarz dzania danymi, optymalizacji i analizy danych, a tak»e raportowania w dziedzinie wspomagania decyzji in»ynierskich. Š czy koncepcje arkusza kalkulacyjnego, systemu GIS oraz bazy danych. Dane dziedziny s przechowywane w bazie Neo4J, która pozwala na korzystanie przez u»ytkowników z przekazanych struktur danych, a tak»e umo»liwia interaktywn analiz i raportowanie na poziomie niedost pnym w przypadku relacyjnych baz danych. Twitter FlockDB Tweeter jest serwisem spoªeczno±ciowym, umo»liwiaj cym wysyªanie i odczytywanie krótkich wiadomo±ci (tweetów). Twitter u»ywa bazy danych FlockDB do przechowywania grafu spoªeczno±ci (zawieraj cego informacje kto ±ledzi kogo, kto blokuje kogo) i drugorz dne indeksy (secondary indices). W kwietniu 2010 w bazie FlockDB Twittera byªo ponad 13 bilionów kraw dzi, a ilo± operacji osi gaªa 20 tysi ci zapisów/sekund i 100 tysi cy odczytów/sekund. 7

8 Smewt (Smart Media Manager) Neo4j Smewt jest inteligentnym programem zarz dzaj cym zasobami multimedialnymi. Przeszukuje pliki u»ytkownika, automatycznie rozpoznaje je i zbiera informacje na ich temat z sieci. Przedstawia multimedialn kolekcj nie w postaci listy plików, ale jako semantycznie powi zane informacje. Smewt przechowuje wszystkie informacje w postaci grafu. Dzi ki temu istnieje mo»liwo± ªatwego powi zania przechowywanej informacji oraz tworzenia trudnych zapyta«, co byªoby w przypadku u»ycia innych struktur danych utrudnione. U»ytkownik mo»e zamiast prostego przeszukiwania tekstu utworzy zapytanie semantyczne w rodzaju: Podaj list wszystkich moich lmów stworzonych przez hiszpa«skiego re»ysera w ci gu ostatnich 10 lat. Na stronie jest obszerna lista projektów, w których wykorzystano baz Neo4J. 4 Przegl d dost pnych technologii Rozdziaª zawiera informacje o wybranych implementacjach grafowych baz danych. 4.1 Opis wybranych systemów Neo4j - Neo4j jest rozwi zaniem open source dla wszystkich niekomercyjnych zastosowa«i szybko staje si czoªowym systemem grafowych baz danych. Neo4j jest wbudowanym, dyskowym (disk-based), w peªni transakcyjnym silnikiem grafowych baz danych. Wg deweloperów jest on wyj dkowo skalowalny - umo»liwia obsªug kilkunastu bilionów w zªów na jednej maszynie, posiada ªatwe w u»yciu API oraz wydajne procedury przechodzenia grafu ( graph traversal). Neo4j u»ywa systemu Apache Lucene do indeksowania i przeszukiwania. Lucene jest silnikiem przeszukiwania tekstów, napisanym w Javie i posiadaj cym du» wydajno±. Neo4j posiada API (bindingi) do wielu j zyków programowania, w tym Python, Ruby, Erlang, Clojure, PHP. Przykªad implementacji prostej sieci spoªeczno±ciowej w Neo4J znajduje si w rozdziale 5. Sones GraphDB - Sones GraphDB posiada cechy magazynu plikowego oraz systemu zarz dzania baz danych. Nadaje sie do przechowywania du»ych ilo±ci danych póªstrukturalnych o du»ym stopniu powi zania. Umo»liwia prac w ±rodowisku rozproszonym. Baza danych jest komercyjna, udost pniona jest jednak tak»e wersja Open Source. Sones GraphDB pracuje wyª cznie na platformie.net/mono. 8

9 InfoGrid - InfoGrid ª czy cechy grafowych i relacyjnych (SQL) baz danych. Aplikacje zbudowane na platformie InfoGrid mog korzysta z ró»nych silników relacyjnych baz danych lub baz danych NoSQL bez zmiany kodu aplikacji. W przypadku u»ycia relacyjnej bazy danych InfoGrid zapewnia automatyczne mapowanie obiektowo-relacyjne (ORM). InfoGrid implementuje wzorzec REST. InfoGrid wymusza stosowanie strategii kontroli dost pu w warstwie danych. Odbywa si to w sposób podobny do systemu uprawnie«do plików w systemach operacyjnych. Implementacja protokoªu XPRISO umo»liwia komunikacj pomi dzy instacjami systemu InfoGrid, co umo»liwia rozszerzanie funkcjonalno±ci systemu i zapewnia skalowalno±. InfoGrid uªatwia dost p do zewn trznych (rozproszonych) danych, w tym zmiennych danych. Probe Framework umo»liwia dost p do danych z dowolnego ¹ródªa i w dowolnym formacie tak, jakby zasoby te byªy danymi natywnymi InfoGrid. HyperGraphDB - Baza danych zaprojektowana do u»ycia w projektach wykorzystuj cych sztuczn inteligencj oraz sieci semantyczne. Umo»liwia przechowywanie danych zarówno w modelu obiektowym, jak i relacyjnym. Jako grafowa baza danych Hyper- GraphDB nie narzuca ogranicze«(wi zów), zapewnia wi ksz ogólno± ni» inne GBD. AllegroGraph - AllegroGraph jest baz danych opart o RDF (Resource Description Framework). U»ywa dyskowego magazynu danych, umo»liwia uzyskanie du»ej wydajno±ci przy przechowywaniu bilionów trójek RDF. System wspiera SPARQL, RDFS++, a tak»e wnioskowanie Prolog. Od wersji 4.0 AllegroGraph posiada transakcje, automatyczne indeksowanie, 100% wspóªbie»no±ci operacji odczytu. DEX - Ten system zarz dzania grafow baz danych posiada nast puj ce cechy: grafowa reprezentacja danych, operacji i wyników zapyta«wi zy integralno±ci obejmuj : typy w zªów i kraw dzi, relacje, atrybuty dziedzinowe darmowa wersja spoªeczno±ciowa umo»liwia utworzenie bazy maksymalnie do 1 miliona w zªów vertexdb - VertexDB jest serwerem grafowych baz danych du»ej wydajno±ci, obsªuguj cy automatyczny garbage collection. U»ywa protokoªu HTTP do zapyta«i JSON jako formatu odpowiedzi. API jest wzorowane na systemie FUSE ( Filesystem in USErspace) oraz kilku dodatkowych metodach zapyta«i kolejek. 9

10 FlockDB - FlockDB jest rozproszon baz danych przechowuj c informacje grafowe w postaci list s siedztwa. Gªówne cechy FlockDB: du»a wydajno± operacji CRUD wyniki zapyta«mog zawiera miliony warto±ci mo»liwo± archiwizacji i odtwarzania zarchiwizowanych kraw dzi skalowanie horyzontalne, w tym replikacja migracja danych online FlockDB nie obsªuguje przechodzenia grafu. FlockDB jest prostsza od baz danych takich jak Neo4j, poniewa» skupia si na rozwi zywaniu mniejszej ilo±ci problemów. 10

11 4.2 Porównanie wybranych cech GBD Baza danych Neo4J Sones GraphDB InfoGrid Transakcyjno± tak nie tak ACID tak nie cz ±ciowo Rozproszona cz ±ciowo (RMI) tak tak Silnik bazy wªasny wªasny ró»ne Mapowanie obiektowe Wspóªbie»no± Zapytania J zyk zapyta«nie tak tak Gremlin wªasny (Graph Query Language) Przechodzenie grafu tak nie tak Licencja Open Source tak tak tak Komercyjny tak tak tak Licencja AGPLv3 SaaS AGPLv3 API J zyki programowania Java embedded / REST.NET embedded, REST, WebServices brak jako API + XPRISO, OpenID, RSS, Atom, JSON, Java embedded Java tak nie tak C++ nie nie nie C# nie tak nie Python tak nie nie Ruby tak nie nie Erlang tak nie nie Clojure tak nie nie Lisp nie nie nie Perl nie nie nie PHP tak nie nie REST Platforma systemowa tak JVM.NET JVM 11

12 Baza danych AllegroGraph DEX VertexDB HyperGraphDB Transakcyjno± tak nie tak tak ACID tak -? cz ±ciowo (ACI) Rozproszona nie nie tak Silnik bazy Mapowanie obiektowe wªasny Wspóªbie»no± tak tak Zapytania Tokyo Cabinet Berkeley DB nie nie tak J zyk zapyta«sparql brak JSON brak Przechodzenie grafu tak nie tak Licencja Open Source nie nie tak tak Komercyjny tak tak nie nie Licencja komercyjna komercyjna Revised BSD LGPL API REST Java HTTP / JSON - J zyki programowania Java tak tak - tak C++ nie tak - nie C# tak nie - nie Python tak nie - nie Ruby tak nie - nie Erlang nie nie - nie Clojure nie nie - nie Lisp tak nie - nie Perl tsk nie - nie PHP nie nie - nie REST tak nie - Platforma Linux / Linux Linux, Linux / Unix systemowa Virtual Machine Windows Szczegóªowe porównanie systemów grafowych baz danych mo»na znale¹ w pozycji [6] w bibliograi. JVM 5 Przykªadowa implementacja bazy danych neo4j Celem przykªadu b dzie utworzenie instancji bazy danych zawieraj cej graf przedstawiony na poni»szym rysunku. Graf reprezentuje niewielk sie spoªeczno±ciow. Przykªad jest wzorowany na prezentacji [5]. 12

13 Rysunek 1: Przykªadowa sie znajomych. Przykªad pochodzi z prezentacji [5]. 5.1 Instalacja bazy Przykªadowa implementacja zostanie wykonana w Javie. Baza danych b dzie osadzona (ang. embedded), co oznacza,»e b dzie istniaªa lokalnie w uruchomionej Maszynie Wirtualnej Javy (JVM). Aby u»y neo4j, wystarczy w aplikacji doda do classpath pliki JAR pobrane ze strony Utworzenie grafu Graf z rysunku 1 przedstawia pewnien zbiór w zªów, zbiór relacji pomi dzy w zªami (ró»nych typów), zbiór wªa±ciwo±ci (properties) dla ka»dego w zªa, oraz zbiór wªa±ciwo±ci tych relacji. W celu okre±lenia typów relacji tworzymy enumeracj, która deniuje te typy: 1 private enum RelTypes implements RelationshipType { 2 KNOWS, 3 CODED_BY, 4 LOVES 5 } Metoda createdatabaseinstance tworzy instacj bazy neo4j oraz wypeªnia j danymi: 1 private GraphDatabaseService graphdb ; 2 private Node mranderson ; 3 4 public void c r e a t e D a t a b a s e I n s t a n c e ( ) { 5 // Utworzenie i n s t a n c j i bazy danych. Baza j e s t typu "embedded ", c z y l i 6 // z n a j d u j e s i na maszynie w i r t u a l n e j, na k t ó r e j program j e s t 7 // uruchamiany 8 graphdb = new EmbeddedGraphDatabase ( " neo4j s t o r e " ) ; 9 10 // Rozpocz cie t r a n s a k c j i 13

14 11 Transaction tx = graphdb. begintx ( ) ; // Utworzenie w zªa g r a f u. Dodanie do w zªów k i l k u wªasno±ci 14 // (" p r o p e r t i e s " ). 15 mranderson = graphdb. createnode ( ) ; 16 mranderson. s etproperty ( "name", "Thomas Anderson" ) ; 17 mranderson. s etproperty ( " age ", 2 9 ) ; Node morpheus = graphdb. createnode ( ) ; 20 morpheus. setproperty ( "name", "Morpheus" ) ; 21 morpheus. setproperty ( " rank ", " Captain " ) ; 22 morpheus. setproperty ( " occupation ", " Total bad a s s " ) ; // Utworzenie kraw dzi ( r e l a c j i ) s k i e r o w a n e j mi dzy w zªami. 25 mranderson. c r e a t e R e l a t i o n s h i p T o ( morpheus, RelTypes.KNOWS) ; Node t r i n i t y = graphdb. createnode ( ) ; 28 t r i n i t y. s etproperty ( "name", " T r i n i t y " ) ; // Wªasno±ci (" p r o p e r t i e s ") mo»na t a k» e dodawa do kraw dzi, co 31 // i l u s t r u j e p o n i» s z y kod w przypadku r e l a c j i "mrandersonknowstrinity ". 32 morpheus. c r e a t e R e l a t i o n s h i p T o ( t r i n i t y, RelTypes.KNOWS) ; 33 R e l a t i o n s h i p mrandersonknowstrinity 34 = mranderson. c r e a t e R e l a t i o n s h i p T o ( t r i n i t y, RelTypes.KNOWS) ; 35 mrandersonknowstrinity. setproperty ( " age ", "3 days " ) ; 36 t r i n i t y. c r e a t e R e l a t i o n s h i p T o ( mranderson, RelTypes.LOVES) ; Node reagan = graphdb. createnode ( ) ; 39 reagan. setproperty ( "name", "Cypher" ) ; 40 reagan. setproperty ( " l a s t name", "Reagan" ) ; R e l a t i o n s h i p morpheusknowsreagan 43 = morpheus. c r e a t e R e l a t i o n s h i p T o ( reagan, RelTypes.KNOWS) ; 44 morpheusknowsreagan. setproperty ( " d i s c l o s u r e ", " p u b l i c " ) ; Node agent = graphdb. createnode ( ) ; 47 agent. setproperty ( "name", "Agent Smith" ) ; 48 agent. setproperty ( " v e r s i o n ", " 1. 0 b" ) ; 49 agent. setproperty ( " language ", "C++" ) ; R e l a t i o n s h i p reaganknowsagent 52 = reagan. c r e a t e R e l a t i o n s h i p T o ( agent, RelTypes.KNOWS) 53 reaganknowsagent. setproperty ( " d i s c l o s u r e ", " s e c r e t " ) ; 54 reaganknowsagent. setproperty ( " age ", "6 months" ) ; Node a r c h i t e c t = graphdb. createnode ( ) ; 57 a r c h i t e c t. s etproperty ( "name", "The A r c h i t e c t " ) ; 58 agent. c r e a t e R e l a t i o n s h i p T o ( a r c h i t e c t, RelTypes.CODED_BY) ; // Oznaczenie t r a n s a k c j i sukcesem i zako«czenie j e j spowoduje 14

15 61 // wykonanie commit ' u do bazy 62 tx. s u c c e s s ( ) ; 63 tx. f i n i s h ( ) ; 64 } 5.3 Wyszukiwanie w grae Znalezienie przyjacióª i tranzytywnych przyjacióª pana Andersona. Gdy mamy wypeªnion baz, mo»emy wypróbowa metod przej±cia grafu w celu znalezienia wszystkich znajomych pana Andersona. Przej±cie polega na odwiedzeniu wszystkich w zªów, do których da si doj± przechodz c wyª cznie wyj±ciowymi kraw dziami typu KNOWS. Graf b dziemy przechodzi wedªug strategii przeszukiwania wszerz, przeszukiwaj c w zªy do ko«ca grafu. Przeszukiwanie grafu ilustruje poni»szy kod: 1 public void findfriendsofanderson ( ) { 2 // Utworzenie i n s t a n c j i o b i e k t u k l a s y Traverser, k t ó r y zwróci 3 // p r z y j a c i ó ª Pana Andersona. 4 Traverser f r i e n d s T r a v e r s e r = mranderson. t r a v e r s e ( 5 // s t r a t e g i a p r z e s z u k i w a n i a wszerz : 6 Traverser. Order.BREADTH_FIRST, 7 // p r z e g l d a n i e do ko«ca g r a f u : 8 StopEvaluator.END_OF_GRAPH, 9 // zwracanie w s z y s t k i c h pasuj cych w zªów, oprócz o s t a t n i e g o : 10 ReturnableEvaluator.ALL_BUT_START_NODE, 11 // r e l a c j a, jaka nas i n t e r e s u j e : 12 RelTypes.KNOWS, 13 // k i e r u n e k r e l a c j i : 14 D i r e c t i o n.outgoing 15 ) ; // P r z e j ± c i e po w zªach i wypisanie r e z u l t a t ó w 18 System. out. p r i n t l n ( "Mr Anderson ' s f r i e n d s : " ) ; 19 for ( Node f r i e n d : f r i e n d s T r a v e r s e r ){ 20 System. out. p r i n t f ( "At depth %d => %s%n", 21 f r i e n d s T r a v e r s e r. c u r r e n t P o s i t i o n ( ). depth ( ), 22 f r i e n d. getproperty ( "name" ) 23 ) ; 24 } 25 } Rezultat wykonania powy»szej funkcji jest nast puj cy: Mr Anderson ' s f r i e n d s : At depth 1 => Morpheus At depth 1 => T r i n i t y At depth 2 => Cypher At depth 3 => Agent Smith 15

16 Znalezienie wszystkich osób, które s w kim± zakochane. W tym przypadku naszym celem jest zwrócenie wszystkich w zªów w±ród znajomych pana Andersona, które posiadaj wyj±ciow relacj typu LOVES. Sªu»y temu metoda ndfriendsinlove(): 1 public void findfriendsinlove ( ) { 2 // Utworzenie i n s t a n c j i o b i e k t u k l a s y Traverser, k t ó r y zwróci w zªy 3 // z r e l a c j wyj±ciow "LOVES" 4 Traverser l o v e T r a v e r s e r = mranderson. t r a v e r s e ( 5 Traverser. Order.BREADTH_FIRST, // s t r a t e g i a p r z e s z u k i w a n i a 6 StopEvaluator.END_OF_GRAPH, // p r z e s z u k i w a n i e do ko«ca g r a f u 7 // Zdefiniowanie, k t ó r e w zªy maj by zwracane : 8 new ReturnableEvaluator ( ) { 9 public boolean isreturnablenode ( T r a v e r s a l P o s i t i o n pos ){ 10 return pos. currentnode ( ). h a s R e l a t i o n s h i p ( 11 RelTypes.LOVES, D i r e c t i o n.outgoing 12 ) ; 13 } 14 }, 15 // p r z e c h o d z e n i e g r a f u nadal odbywa s i po 16 // wy±ciowych kraw dziach typu KNOWS 17 RelTypes.KNOWS, 18 D i r e c t i o n.outgoing 19 ) ; // P r z e j ± c i e po w zªach i wypisanie r e z u l t a t ó w 22 System. out. p r i n t l n ( "Who i s in l o v e?" ) ; 23 for ( Node person : l o v e T r a v e r s e r ){ 24 System. out. p r i n t f ( "At depth %d => %s%n", 25 l o v e T r a v e r s e r. c u r r e n t P o s i t i o n ( ). depth ( ), 26 person. getproperty ( "name" ) 27 ) ; 28 } 29 } Rezultat uruchomienia metody: Who i s in l o v e? At depth 1 => T r i n i t y 5.4 Peªny kod przykªadu Plik Neo4jExample.java: 1 package neo4jexample ; 2 3 import org. neo4j. graphdb. D i r e c t i o n ; 4 import org. neo4j. graphdb. GraphDatabaseService ; 5 import org. neo4j. graphdb. Node ; 6 import org. neo4j. graphdb. R e l a t i o n s h i p ; 7 import org. neo4j. graphdb. RelationshipType ; 8 import org. neo4j. graphdb. ReturnableEvaluator ; 9 import org. neo4j. graphdb. StopEvaluator ; 10 import org. neo4j. graphdb. Transaction ; 16

17 11 import org. neo4j. graphdb. T r a v e r s a l P o s i t i o n ; 12 import org. neo4j. graphdb. Traverser ; 13 import org. neo4j. k e r n e l. EmbeddedGraphDatabase ; public class Neo4jExample { private enum RelTypes implements RelationshipType 19 { 20 KNOWS, 21 CODED_BY, 22 LOVES 23 } private GraphDatabaseService graphdb ; 26 private Node mranderson ; public void c r e a t e D a t a b a s e I n s t a n c e ( ) { 29 // Utworzenie i n s t a n c j i bazy danych. Baza j e s t typu "embedded ", c z y l i 30 // z n a j d u j e s i na maszynie w i r t u a l n e j, na k t ó r e j program j e s t uruchamiany 31 graphdb = new EmbeddedGraphDatabase ( " neo4j s t o r e " ) ; // Rozpocz cie t r a n s a k c j i 34 Transaction tx = graphdb. begintx ( ) ; // Utworzenie w zªa g r a f u. Dodanie do w zªów k i l k u w ª a s n o ± c i (" p r o p e r t i e s " ). 37 mranderson = graphdb. createnode ( ) ; 38 mranderson. s e t P r o p e r t y ( "name", "Thomas Anderson " ) ; 39 mranderson. s e t P r o p e r t y ( " age ", 2 9 ) ; Node morpheus = graphdb. createnode ( ) ; 42 morpheus. s e t P r o p e r t y ( "name", "Morpheus" ) ; 43 morpheus. s e t P r o p e r t y ( " rank ", " Captain " ) ; 44 morpheus. s e t P r o p e r t y ( " occupation ", " Total bad a s s " ) ; // Utworzenie kraw dzi ( r e l a c j i ) s k i e r o w a n e j mi dzy w zªami. 47 mranderson. c r e a t e R e l a t i o n s h i p T o ( morpheus, RelTypes.KNOWS) ; Node t r i n i t y = graphdb. createnode ( ) ; 50 t r i n i t y. s e t P r o p e r t y ( "name", " T r i n i t y " ) ; // Wªasno±ci (" p r o p e r t i e s ") mo»na t a k» e dodawa do kraw dzi, co i l u s t r u j e 53 // p o n i» s z y kod w przypadku r e l a c j i "mrandersonknowstrinity ". 54 morpheus. c r e a t e R e l a t i o n s h i p T o ( t r i n i t y, RelTypes.KNOWS) ; 55 R e l a t i o n s h i p mrandersonknowstrinity 56 = mranderson. c r e a t e R e l a t i o n s h i p T o ( t r i n i t y, RelTypes.KNOWS) ; 57 mrandersonknowstrinity. s e t P r o p e r t y ( " age ", "3 days " ) ; 58 t r i n i t y. c r e a t e R e l a t i o n s h i p T o ( mranderson, RelTypes.LOVES) ; Node reagan = graphdb. createnode ( ) ; 61 reagan. s e t P r o p e r t y ( "name", "Cypher" ) ; 62 reagan. s e t P r o p e r t y ( " l a s t name", "Reagan" ) ; R e l a t i o n s h i p morpheusknowsreagan 65 = morpheus. c r e a t e R e l a t i o n s h i p T o ( reagan, RelTypes.KNOWS) ; 66 morpheusknowsreagan. s e t P r o p e r t y ( " d i s c l o s u r e ", " p u b l i c " ) ; Node agent = graphdb. createnode ( ) ; 69 agent. s e t P r o p e r t y ( "name", "Agent Smith" ) ; 70 agent. s e t P r o p e r t y ( " v e r s i o n ", " 1. 0 b" ) ; 71 agent. s e t P r o p e r t y ( " language ", "C++" ) ; 72 17

18 73 R e l a t i o n s h i p reaganknowsagent 74 = reagan. c r e a t e R e l a t i o n s h i p T o ( agent, RelTypes.KNOWS) ; 75 reaganknowsagent. s e t P r o p e r t y ( " d i s c l o s u r e ", " s e c r e t " ) ; 76 reaganknowsagent. s e t P r o p e r t y ( " age ", "6 months" ) ; Node a r c h i t e c t = graphdb. createnode ( ) ; 79 a r c h i t e c t. s e t P r o p e r t y ( "name", "The A r c h i t e c t " ) ; agent. c r e a t e R e l a t i o n s h i p T o ( a r c h i t e c t, RelTypes.CODED_BY) ; // Oznaczenie t r a n s a k c j i sukcesem i z a k o «c z e n i e j e j spowoduje wykonanie 84 // commit ' u do bazy 85 tx. s u c c e s s ( ) ; 86 tx. f i n i s h ( ) ; 87 } public void stopdatabase ( ) { 90 graphdb. shutdown ( ) ; 91 } public void findfriendsofanderson ( ) { 94 // Utworzenie i n s t a n c j i o b i e k t u k l a s y Traverser, k t ó r y zwróci 95 // p r z y j a c i ó ª Pana Andersona. 96 Traverser f r i e n d s T r a v e r s e r = mranderson. t r a v e r s e ( 97 // s t r a t e g i a p r z e s z u k i w a n i a wszerz : 98 Traverser. Order.BREADTH_FIRST, 99 // p r z e g l d a n i e do ko«ca g r a f u : 100 StopEvaluator.END_OF_GRAPH, 101 // zwracanie w s z y s t k i c h pasuj cych w zªów, oprócz o s t a t n i e g o : 102 ReturnableEvaluator.ALL_BUT_START_NODE, 103 // r e l a c j a, jaka nas i n t e r e s u j e : 104 RelTypes.KNOWS, 105 // k i e r u n e k r e l a c j i : 106 D i r e c t i o n.outgoing) ; // P r z e j ± c i e po w zªach i wypisanie r e z u l t a t ó w 109 System. out. p r i n t l n ( "Mr Anderson ' s f r i e n d s : " ) ; 110 for ( Node f r i e n d : f r i e n d s T r a v e r s e r ){ 111 System. out. p r i n t f ( "At depth %d => %s%n", 112 f r i e n d s T r a v e r s e r. c u r r e n t P o s i t i o n ( ). depth ( ), 113 f r i e n d. getproperty ( "name" ) ) ; 114 } 115 } public void f i n d F r i e n d s I n L o v e ( ) { 118 // Utworzenie i n s t a n c j i o b i e k t u k l a s y Traverser, k t ó r y zwróci w zªy 119 // z r e l a c j wyj±ciow "LOVES" 120 Traverser l o v e T r a v e r s e r = mranderson. t r a v e r s e ( 121 Traverser. Order.BREADTH_FIRST, // s t r a t e g i a p r z e s z u k i w a n i a 122 StopEvaluator.END_OF_GRAPH, // p r z e s z u k i w a n i e do ko«ca g r a f u 123 // Zdefiniowanie, k t ó r e w zªy maj by zwracane : 124 new ReturnableEvaluator ( ) { 125 public boolean isreturnablenode ( T r a v e r s a l P o s i t i o n pos ){ 126 return pos. currentnode ( ). h a s R e l a t i o n s h i p ( 127 RelTypes.LOVES, D i r e c t i o n.outgoing ) ; 128 } 129 }, 130 // p r z e c h o d z e n i e g r a f u nadal odbywa s i po 131 // wy±ciowych kraw dziach typu KNOWS 132 RelTypes.KNOWS, 133 D i r e c t i o n.outgoing 134 ) ; 18

19 // P r z e j ± c i e po w zªach i wypisanie r e z u l t a t ó w 137 System. out. p r i n t l n ( "Who i s i n l o v e?" ) ; 138 for ( Node person : l o v e T r a v e r s e r ){ 139 System. out. p r i n t f ( "At depth %d => %s%n", 140 l o v e T r a v e r s e r. c u r r e n t P o s i t i o n ( ). depth ( ), 141 person. getproperty ( "name" ) 142 ) ; 143 } 144 } public s t a t i c void main ( S t r i n g [ ] a r g s ) { 147 Neo4jExample exampleapp = new Neo4jExample ( ) ; 148 exampleapp. c r e a t e D a t a b a s e I n s t a n c e ( ) ; 149 exampleapp. findfriendsofanderson ( ) ; 150 System. out. p r i n t l n ( ) ; 151 exampleapp. f i n d F r i e n d s I n L o v e ( ) ; 152 exampleapp. stopdatabase ( ) ; 153 } } 6 Podsumowanie. W przypadku obszernej klasy problemów grafowe bazy danych znacznie bardziej nadaj si do przechowywania danych ni» relacyjne bazy danych. Elastyczno±, wydajno±, prostota i lepsze dopasowanie do obiektowego modelu dziedziny to najwa»niejsze zalety GBD. Istnieje wiele zastosowa«, przy których model grafowy jest jedynym dobrym rozwi zaniem. Przy szybkim rozwoju technologii takich, jak sieci spoªeczno±ciowe, bazy wiedzy, bazy GIS, czy sieci Semantic Web mo»na si spodziewa,»e znaczenie GBD b dzie rosªo. Tak»e w wielu zastosowaniach, w których dotychczas korzystano z tradycyjnych, relacyjnych BD, mo»na czerpa znaczne korzy±ci z u»ycia modelu grafowego. Na rynku jest wiele dost pnych rozwi za«, zarówno komercyjnych, jak i open source (na które warto zwróci szczególn uwag ). Rozwi zania te, cz sto wyodr bnione z innych projektów s stosunkowo mªode, ale na tyle zaawansowane,»e nadaj si do zastosowa«profesjonalnych. Literatura [1] A Comparison of a Graph Database and a Relational Database. A Data Provenance Perspective, Chad Vicknair, Michael Macias, Zhendong Zhao, Xiaofei Nan, Yixin Chen, Dawn Wilkins, 2010 r., Oxford, MS, USA. [2] - Graph Databases, NOSQL and Neo4j. [3] - Neo Technology Commercializes Next Generation Graph Based Database [4] Survey of Graph Database Models, Renzo Angles, Claudio Gutierrez, Universidad de Chile, luty 2008 r. 19

20 [5] - Neo. Some code snippets, Emil Eifrem, r. [6] - NoSQL Graph Database Comparison, Pere Urbón-bayes,