Grafowe bazy danych - przegląd technologiidydaktyka:ztb:2010:...Grafowe bazy danych cz sto (ale nie...
Transcript of Grafowe bazy danych - przegląd technologiidydaktyka:ztb:2010:...Grafowe bazy danych cz sto (ale nie...
Grafowe bazy danych - przegl¡d technologii
Daniel Sªotwi«ski
01.06.2010
Spis tre±ci
1 Koncepcja grafowych baz danych 21.1 Graf jako struktura danych . . . . . . . . . . . . . . . . . . . . . 21.2 Geneza grafowych baz danych . . . . . . . . . . . . . . . . . . . . 21.3 Relacyjne bazy danych (RBD) a grafowe bazy danych (GDB) . . 2
2 Grafowy model danych 32.1 Struktury danych . . . . . . . . . . . . . . . . . . . . . . . . . . . 32.2 Wi¦zy integralno±ci . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2.1 Spójno±¢ schemat-instancja (ang. schema-instance con-sistency) . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2.2 To»samo±¢ obiektu oraz integralno±¢ referencyjna (ang.object identity and referential integrity) . . . . . . . . . . 4
2.2.3 Zale»no±ci funkcyjne . . . . . . . . . . . . . . . . . . . . . 52.3 J¦zyki zapyta« i mody�kacji danych . . . . . . . . . . . . . . . . 5
3 Zastosowania 63.1 Obszary i przyczyny u»ycia modelu grafowego . . . . . . . . . . . 6
3.1.1 Zastosowania klasyczne (ang. classical applications) . . . 63.1.2 Sieci zªo»one (ang. complex networks) . . . . . . . . . . . 7
3.2 Rzeczywiste zastosowania . . . . . . . . . . . . . . . . . . . . . . 7
4 Przegl¡d dost¦pnych technologii 84.1 Opis wybranych systemów . . . . . . . . . . . . . . . . . . . . . . 84.2 Porównanie wybranych cech GBD . . . . . . . . . . . . . . . . . 11
5 Przykªadowa implementacja bazy danych � neo4j 125.1 Instalacja bazy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135.2 Utworzenie grafu . . . . . . . . . . . . . . . . . . . . . . . . . . . 135.3 Wyszukiwanie w gra�e . . . . . . . . . . . . . . . . . . . . . . . . 155.4 Peªny kod przykªadu . . . . . . . . . . . . . . . . . . . . . . . . . 16
6 Podsumowanie. 19
1
1 Koncepcja grafowych baz danych
1.1 Graf jako struktura danych
Graf jest jedn¡ z podstawowych abstrakcji w informatyce i posiada wiele zas-tosowa«. Praktycznie ka»da aplikacja, która operuje na grafach, musi te struk-tury przechowywa¢ w pami¦ci oraz tworzy¢ do nich zapytania. W ostatnim cza-sie 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 oddzi-aªywa« mi¦dzybiaªkowych, grafów struktur chemicznych, klastrów genów, mapgenetycznych. Grafy to jedne z najbardziej u»ytecznych struktur do modelowa-nia obiektów i oddziaªywa«.
1.2 Geneza grafowych baz danych
Zainteresowanie naukowców grafowymi bazami danych rozwin¦ªo we wczesnychlatach 90', lecz pó¹niej niemal wygasªo. Zainteresowanie przeniosªo si¦ na tech-nologie 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 doreprezentacji ogromnych ilo±ci danych. Tradycyjne magazyny danych (relacyjnebazy danych) s¡ zdolne do przechowywania reprezentacji struktur grafowych,jednak nie czyni¡ tego w prosty i naturalny sposób, reprezentacja taka nie jestte» wydajna. Dlatego znacznie potrzeba stosowania baz danych wyspecjali-zowanych do przechowywania danych grafowych.
1.3 Relacyjne bazy danych (RBD) a grafowe bazy danych(GDB)
Relacyjne bazy danych. Jedn¡ z przyczyn sukcesu relacyjnych baz danychjest ich zdolno±¢ do modelowania praktycznie dowolnej struktury danych bezwprowadzania redundancji lub utraty precyzji. Osi¡gni¦ciu tego pomaga naetapie projektowania bazy danych proces normalizacji. Po stworzeniu strukturybazy dane mog¡ by¢ dodawane, mody�kowane oraz pobierane z u»yciem j¦zykaSQL (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 cza-sie, trudno±ci w modelowaniu struktur drzewiastych, danych póªstruktu-ralnych danych hierarchicznych, sieci i innych.
• Model relacyjny jest sªabo dopasowany do popularnych obecnie paradyg-matów rozwoju oprogramowania, w szczególno±ci technologii i j¦zykówzorientowanych obiektowo oraz j¦zyków dynamicznych. Problem w liter-aturze angielskiej nosi nazw¦ object-relational impedance mismatch.Konieczne jest tworzenie tzw. warstw ORM (Object-Relational Mapping),
2
mapuj¡cych relacje (tabele) na obiekty i odwrotnie. Systemy te (np. Hi-bernate) 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 wielomakolumnami, które s¡ puste dla wi¦kszo±ci wierszy (macierze rzadkie), coprowadzi do niskiej wydajno±ci. Alternatywne modelowanie tych strukturza pomoc¡ wielu poª¡czonych tabel tak»e nie jest wydajne, ze wzgl¦du nadu»y koszt wykonywania zª¡cze« tabel w zapytaniach (joins).
Wg teorii struktury grafowe zapisane w RBD mo»na podda¢ normalizacji, ma tojednak powa»ne konsekwencje wydajno±ciowe przy zapytaniach. Konsekwencjes¡ zwi¡zane z charakterem rekursywnym struktur takich jak np. drzewa plików,struktury sieciowe, sieci spoªeczne oraz charakterem zapisu danych w postacirelacji. 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 inieskalowalnej przy rosn¡cej liczbie krotek (ang. tuples) w tabelach.
Grafowe bazy danych. Zapisanie u»ywanych w programach struktur grafowychw grafowej bazie danych likwiduje powy»sze problemy. Grafowa baza danychjest bardziej naturaln¡ ni» RBD metod¡ reprezentacji, przechowywania i po-bierania danych, których charakter nie przystaje do typowego schematu bazyrelacyjnej. Dobrym przykªadem s¡ modele sieci spoªeczno±ciowych lub innemodele zawieraj¡ce zwi¡zki, których nie mo»na ªatwo reprezentowa¢ w postacitabeli lub których nie mo»na skalowa¢.
W pozycji bibliogra�cznej [3] opisano prób¦, podczas której zostaªa utwor-zona struktura sieci spoªeczno±ciowej skªadaj¡cej si¦ z 1000 u»ytkowników, gdzieka»dy z nich posiadaª 50 �znajomych�. Tradycyjna RBD potrzebowaªa 2000 msna wykonanie zapytania o dane ka»dego przyjaciela ka»dego u»ytkownika. Ana-logiczna grafowa baza danych zaimplementowana w neo4j potrzebowaªa na t¦operacj¦ tylko 2 ms. W celu zaprezentowania wydajno±ci i skalowalno±ci bazyneo4j zwi¦kszono liczb¦ u»ytkowników do 1 000 000. Okazaªo si¦, »e caªkowityczas zapyta« tak»e wyniósª 2 ms! Jak wida¢, wa»n¡ cech¡ modelu grafowegojest zdolno±¢ do ªatwego skalowania przy zªo»onych relacjach mi¦dzy encjami wbazie 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. Encjeoraz relacje mog¡ by¢ opisane przez atrybuty (wªasno±ci).
Mówi¡c j¦zykiem teorii grafów, model jest etykietowanym i skierowanymmultigrafem z atrybutami. Graf etykietowany posiada etykiet¦ dla ka»dej kraw¦dzi,b¦d¡c¡ jej typem. Graf skierowany zawiera kraw¦dzie z okre±lonym kierunk-iem, od w¦zªa ¹ródªowego do w¦zªa ko«cowego. Graf z atrybutami umo»li-wia 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
kraw¦dzie pomi¦dzy dwoma w¦zªami. Oznacza to, »e dwa w¦zªy mog¡ by¢ ª¡c-zone wiele razy przez ró»ne kraw¦dzie, nawet je±li te kraw¦dzie maj¡ ten samw¦zeª ¹ródªowy, docelowy oraz etykiet¦.
Teoria grafów jest bardzo u»yteczna i odpowiednia do rozwi¡zywania wieluproblemów z wielu ró»nych dziedzin, w których dane modelowane s¡ z przy po-mocy struktur grafowych. Przykªadem algorytmu pochodz¡cym z teorii grafówjest znajdowanie najkrótszej ±cie»ki.
2.2 Wi¦zy integralno±ci
Wi¦zy integralno±ci s¡ ogólnymi instrukcjami i reguªami, które de�niuj¡ zbiórspójnych stanów bazy danych i/lub zmian stanów.
W przypadku grafowych baz danych wyró»niamy nast¦puj¡ce wi¦zy inte-gralno±ci:
2.2.1 Spójno±¢ schemat-instancja (ang. schema-instance consistency)
Grafowe bazy danych cz¦sto (ale nie zawsze) de�niuj¡ 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 wyty-cznym:
1. instancja powinna zawiera¢ tylko encje i relacje o typach zde�niowanychw schemacie
2. encja w instancji mo»e mie¢ wyª¡cznie te relacje lub wªa±ciwo±ci (proper-ties), które s¡ zde�niowane dla typu tej encji (lub w przypadku dziedz-iczenia 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¢ zaklasy�kowany jako strukturalny (structured) lubniestrukturalny (unstructured) w zale»no±ci od tego, czy pozwala lub nie pozwalana de�nicj¦ schematu w celu ograniczenia instancji bazy danych do dobrzeokre±lonych typów danych. W wi¦kszo±ci baz danych wyst¦puje rozró»nienieschematu i instancji.
2.2.2 To»samo±¢ obiektu oraz integralno±¢ referencyjna (ang. objectidentity 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 przezzapisanie w ka»dym obiekcie w bazie unikalnego identy�katora, np. etykiety.
Integralno±¢ encji (entity integrity) zapewnia, »e ka»dy w¦zeª grafu jestunikaln¡ encj¡ identy�kowan¡ przez jej kontekst. Integralno±¢ referencyjna (ref-erential integrity) wymaga istnienie odniesienia tylko do istniej¡cych encji.
Te ograniczenia odpowiadaj¡ wi¦zom integralno±ci klucza podstawowego orazklucza obcego (referencyjnego) w relacyjnych bazach danych.
4
2.2.3 Zale»no±ci funkcyjne
Zale»no±ci funkcyjne s¡ zale»no±ciami semantycznymi. Zale»no±¢ funkcyjnaA → 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¢ reprezen-towane przez skierowane kraw¦dzie.
2.3 J¦zyki zapyta« i mody�kacji 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 celuakwizycji i manipulowaniu danymi zawartymi w tych strukturach.
Wiele j¦zyków obsªuguje przechodzenie grafów (graph traversal). Przechodze-nie to wyszukanie pewnych obiektów (w¦zªów) startuj¡c z innych w¦zªów. Naprzykªad, je±li pewien obiekt w gra�e jest niepoprawny, to ta informacja musizosta¢ rozpropagowana do wszystkich potomków tego w¦zªa - konieczno±¢ prze-j±cia grafu. Innym przykªadem jest wyszukiwanie pewnych informacji w gra�e.
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 gra�e, które s¡ singleton-ami - 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 wbudowanemechanizmy zapyta« grafowych, analizy i manipulacji grafami. Jego ob-sª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« SPARQLjest zbiór grafów RDF. Obsªuga np. w AllegroGraph.
• G, G+, GraphLog - J¦zyki te umo»liwiaj¡ tworzenie tzw. grafów zapy-ta« (query graph). Zapytanie grafowe w przypadku j¦zyka G wyra»onew jest zbiorem etykietowanych skierowanych multigrafów, których w¦zªymog¡ by¢ zmiennymi lub staªymi. Wynikiem zapytania jest suma (union)wszystkich grafów zapyta«, które dopasowano do podgrafów z instancjigrafu (bazy).
• G-Log - zawiera j¦zyk deklaratywny do zªo»onych obiektów. U»ywa log-iczn¡ notacj¦ speªnienia reguª (rule satisfaction) do wyznaczenia odpowiedzina zapytanie.
5
• Glide - zapytania s¡ wyra»one z u»yciem liniowej notacji skªadaj¡cej si¦ zwyra»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ólnekategorie: zastosowania klasyczne (ang. classical applications) i sieci zªo»one(ang. complex networks). Sieci zªo»one wyst¦puj¡ w dziedzinach charakteryzu-j¡cych si¦ ogromn¡ ilo±ci¡ danych oraz struktur¡ sieci. Zastosowania klasyczneto 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.
3.1.1 Zastosowania klasyczne (ang. classical applications)
• Jako uogólnienia klasycznego modelu bazodanowegoModel klasyczny jest cz¦sto krytykowany za brak semantyki, pªask¡ struk-tur¦ danych, trudno±ci w odkryciu przez u»ytkownika relacji mi¦dzy danymioraz trudno±ci w modelowaniu zªo»onych obiektów.
• Gdy zªo»ono±¢ danych przekracza mo»liwo±ci modelu relacyjnegoTaka sytuacja mo»e wyst¡pi¢ w: zarz¡dzaniu sieciami transportowymi(kolejowymi, lotniczymi, wodnymi, telekomunikacyjnymi), modelowaniusystemu drogowego, komunikacji zbiorowej. Wiele zastosowa« grafowebazy danych znajduj¡ w systemach GIS (Systemy Informacji Geogra�cznej)oraz przestrzennych bazach danych.
• W sytuacjach, gdy siªa ekspresji j¦zyków zapyta« modelu relacyjnego(SQL) jest zbyt ograniczonaOperacje, które s¡ naturalne w modelu grafowym i s¡ implementowane wwi¦kszo±ci grafowych baz danych, posiadaj¡ szerokie zastosowanie. Przykªadytakich operacji, to ró»ne rodzaje przechodzenia grafów oraz wyszukiwania.
• W systemach reprezentacji wiedzyU»ycie grafowych baz danych pozwala na zwi¦kszenie elastyczno±ci bazywiedzy oraz technik wnioskowania.
• W wielu procesach modelowania semantycznych i zorientowanych obiek-towo baz danych u»ywa si¦ abstrakcji w postaci grafu. W takich sytuac-jach warto rozwa»y¢ u»ycie grafowej bazy danych, gdzie zarówno operacjeCRUD (Create, Read, Update, Delete), jak i reprezentacja danych b¦dziebardziej odpowiednia.
• Jako rozszerzenie funkcjonalno±ci oferowanej przez obiektowe bazy danych,np. w systemach CASE, CAD, przetwarzania obrazów, analizy danychnaukowych
• Interfejsy gra�czne i wizualne, systemy geogra�czne, obrazkowe i multi-medialne.
• Sie¢ Semantyczna (Semantic Web)
6
3.1.2 Sieci zªo»one (ang. complex networks)
• Sieci spoªeczno±cioweW tych sieciach w¦zªy reprezentuj¡ ludzi lub grupy ludzi, a kraw¦dziepokazuj¡ zwi¡zki lub przepªywy pomi¦dzy w¦zªami. Przykªady relacji igrafó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. cytatypomi¦dzy artykuªami akademickimi, sie¢ WWW (hiperª¡cza), sieci peer-to-peer, relacje pomi¦dzy klasami sªów w tezaurusie, sieci preferencji.
• Sieci technologiczneW tych sieciach dominuj¡ aspekty przestrzenne i geogra�czne struktury.Przykªady: Internet (jako sie¢ komputerowa), sieci energetyczne, drogilotnicze, sieci telefoniczne, sieci kurierskie (pocztowe), GIS.
• Sieci biologiczneModel grafowy u»ywany jest do reprezentowania informacji biologicznej,której du»a obj¦to±¢, zarz¡dzanie i analiza staªy si¦ trudno±ci¡, którejprzyczyna le»y w zautomatyzowaniu procesu akwizycji danych.
3.2 Rzeczywiste zastosowania
W tym rozdziale przedstawiono kilka rzeczywistych projektów, przy którychwykorzystano grafowe bazy danych.
Amanzi Wireless Explorer - http://www.amanzitel.com/page/AWE- Neo4j
Amanzi Wireless Explorer (AWE) jest platform¡ open source sªu»¡c¡ do wizual-izacji, zarz¡dzania danymi, optymalizacji i analizy danych, a tak»e raportowa-nia w dziedzinie wspomagania decyzji in»ynierskich. �¡czy koncepcje arkuszakalkulacyjnego, systemu GIS oraz bazy danych.
Dane dziedziny s¡ przechowywane w bazie Neo4J, która pozwala na korzys-tanie przez u»ytkowników z przekazanych struktur danych, a tak»e umo»liwiainteraktywn¡ analiz¦ i raportowanie na poziomie niedost¦pnym w przypadkurelacyjnych baz danych.
Twitter - http://github.com/twitter/�ockdb - FlockDB
Tweeter jest serwisem spoªeczno±ciowym, umo»liwiaj¡cym wysyªanie i odczyty-wanie 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¦dneindeksy (secondary indices). W kwietniu 2010 w bazie FlockDB Twittera byªoponad 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
Smewt (Smart Media Manager) - http://www.smewt.com/ - Neo4j
Smewt jest inteligentnym programem zarz¡dzaj¡cym zasobami multimedial-nymi. Przeszukuje pliki u»ytkownika, automatycznie rozpoznaje je i zbiera in-formacje na ich temat z sieci. Przedstawia multimedialn¡ kolekcj¦ nie w postacilisty plików, ale jako semantycznie powi¡zane informacje.
Smewt przechowuje wszystkie informacje w postaci grafu. Dzi¦ki temu ist-nieje mo»liwo±¢ ªatwego powi¡zania przechowywanej informacji oraz tworzenia�trudnych� zapyta«, co byªoby w przypadku u»ycia innych struktur danychutrudnione. U»ytkownik mo»e zamiast prostego przeszukiwania tekstu utworzy¢zapytanie semantyczne w rodzaju: �Podaj list¦ wszystkich moich �lmów stwor-zonych przez hiszpa«skiego re»ysera w ci¡gu ostatnich 10 lat�.
Na stronie http://wiki.neo4j.org/content/Neo4j_In_The_Wild jestobszerna 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 - http://neo4j.org/
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 sil-nikiem 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 traver-sal).
Neo4j u»ywa systemu Apache Lucene do indeksowania i przeszukiwania.Lucene jest silnikiem przeszukiwania tekstów, napisanym w Javie i posiada-j¡cym du»¡ wydajno±¢.
Neo4j posiada API (bindingi) do wielu j¦zyków programowania, w tymPython, Ruby, Erlang, Clojure, PHP.
Przykªad implementacji prostej sieci spoªeczno±ciowej w Neo4J znajduje si¦w rozdziale 5.
Sones GraphDB - http://www.sones.com
Sones GraphDB posiada cechy magazynu plikowego oraz systemu zarz¡dzaniabaz¡ danych. Nadaje sie do przechowywania du»ych ilo±ci danych póªstruktu-ralnych o du»ym stopniu powi¡zania. Umo»liwia prac¦ w ±rodowisku rozpros-zonym.
Baza danych jest komercyjna, udost¦pniona jest jednak tak»e wersja OpenSource. Sones GraphDB pracuje wyª¡cznie na platformie .NET/Mono.
8
InfoGrid - http://infogrid.org/
InfoGrid ª¡czy cechy grafowych i relacyjnych (SQL) baz danych. Aplikacje zbu-dowane na platformie InfoGrid mog¡ korzysta¢ z ró»nych silników relacyjnychbaz danych lub baz danych NoSQL bez zmiany kodu aplikacji. W przypadkuu»ycia relacyjnej bazy danych InfoGrid zapewnia automatyczne mapowanieobiektowo-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 systemachoperacyjnych.
Implementacja protokoªu XPRISO umo»liwia komunikacj¦ pomi¦dzy instac-jami systemu InfoGrid, co umo»liwia rozszerzanie funkcjonalno±ci systemu i za-pewnia skalowalno±¢.
InfoGrid uªatwia dost¦p do zewn¦trznych (rozproszonych) danych, w tymzmiennych 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 natywnymiInfoGrid.
HyperGraphDB - http://www.kobrix.com/hgdb.jsp
Baza danych zaprojektowana do u»ycia w projektach wykorzystuj¡cych sztuczn¡inteligencj¦ oraz sieci semantyczne. Umo»liwia przechowywanie danych zarównow modelu obiektowym, jak i relacyjnym. Jako grafowa baza danych Hyper-GraphDB nie narzuca ogranicze« (wi¦zów), zapewnia wi¦ksz¡ ogólno±¢ ni» inneGBD.
AllegroGraph - http://www.franz.com/agraph/allegrograph/
AllegroGraph jest baz¡ danych opart¡ o RDF (Resource Description Frame-work). U»ywa dyskowego magazynu danych, umo»liwia uzyskanie du»ej wyda-jno±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 - http://www.dama.upc.edu/technology-transfer/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, atrybutydziedzinowe
• darmowa wersja spoªeczno±ciowa umo»liwia utworzenie bazy maksymalniedo 1 miliona w¦zªów
vertexdb - http://www.dekorte.com/projects/opensource/vertexdb/
VertexDB jest serwerem grafowych baz danych du»ej wydajno±ci, obsªuguj¡cyautomatyczny garbage collection. U»ywa protokoªu HTTP do zapyta« i JSONjako formatu odpowiedzi. API jest wzorowane na systemie FUSE (Filesystemin USErspace) oraz kilku dodatkowych metodach zapyta« i kolejek.
9
FlockDB - http://github.com/twitter/�ockdb
FlockDB jest rozproszon¡ baz¡ danych przechowuj¡c¡ informacje grafowe wpostaci 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
4.2 Porównanie wybranych cech GBD
Neo4J Sones GraphDB InfoGrid
Baza danych
Transakcyjno±¢ tak nie tak
ACID tak nie cz¦±ciowo
Rozproszona cz¦±ciowo (RMI) tak tak
Silnik bazy wªasny wªasny ró»ne
Mapowanieobiektowe
nie tak tak
Wspóªbie»no±¢
Zapytania
J¦zyk zapyta« Gremlinwªasny
(Graph Query Language)brak
Przechodzenie grafu tak nie tak
Licencja
Open Source tak tak tak
Komercyjny tak tak tak
Licencja AGPLv3 SaaS AGPLv3
APIJava embedded /
REST.NET embedded, REST,
WebServices
jako API +XPRISO, OpenID,RSS, Atom, JSON,Java embedded
J¦zykiprogramowania
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 tak
Platformasystemowa
JVM .NET JVM
11
AllegroGraph DEX VertexDB HyperGraphDB
Baza danych
Transakcyjno±¢ tak nie tak tak
ACID tak - ? cz¦±ciowo (ACI)
Rozproszona nie nie tak
Silnik bazy wªasnyTokyoCabinet
Berkeley DB
Mapowanieobiektowe
nie nie tak
Wspóªbie»no±¢ tak tak
Zapytania
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¦zykiprogramowania
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 -
Platformasystemowa
Linux / LinuxVirtual Machine
Linux,Windows
Linux / Unix JVM
Szczegóªowe porównanie systemów grafowych baz danych mo»na znale¹¢ wpozycji [6] w bibliogra�i.
5 Przykªadowa implementacja bazy danych � neo4j
Celem przykªadu b¦dzie utworzenie instancji bazy danych zawieraj¡cej grafprzedstawiony na poni»szym rysunku. Graf reprezentuje niewielk¡ sie¢ spoªeczno±-ciow¡. Przykªad jest wzorowany na prezentacji [5].
12
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 os-adzona (ang. embedded), co oznacza, »e b¦dzie istniaªa lokalnie w uruchomionejMaszynie Wirtualnej Javy (JVM). Aby u»y¢ neo4j, wystarczy w aplikacji doda¢do classpath pliki JAR pobrane ze strony http://neo4j.org/download/.
5.2 Utworzenie grafu
Graf z rysunku 1 przedstawia pewnien zbiór w¦zªów, zbiór relacji pomi¦dzyw¦zªami (ró»nych typów), zbiór wªa±ciwo±ci (properties) dla ka»dego w¦zªa, orazzbiór wªa±ciwo±ci tych relacji.
W celu okre±lenia typów relacji tworzymy enumeracj¦, która de�niuje tetypy:
1 private enum RelTypes implements Relat ionshipType {2 KNOWS,3 CODED_BY,4 LOVES5 }
Metoda createDatabaseInstance tworzy instacj¦ bazy neo4j oraz wypeªnia j¡danymi:
1 private GraphDatabaseService graphDb ;2 private Node mrAnderson ;34 public void c reateDatabase Ins tance ( ){5 // Utworzenie i n s t a n c j i bazy danych . Baza j e s t typu "embedded " , c z y l i6 // zna jdu j e s i ¦ na maszynie w i r tua lne j , na k t ó r e j program j e s t7 // uruchamiany8 graphDb = new EmbeddedGraphDatabase ( "neo4j−s t o r e " ) ;910 // Rozpocz¦cie t r a n s a k c j i
13
11 Transact ion tx = graphDb . beginTx ( ) ;1213 // Utworzenie w¦zªa gra fu . Dodanie do w¦zªów k i l k u wªasno±c i14 // (" p r o p e r t i e s " ) .15 mrAnderson = graphDb . createNode ( ) ;16 mrAnderson . se tProper ty ( "name" , "Thomas Anderson" ) ;17 mrAnderson . se tProper ty ( "age" , 2 9 ) ;1819 Node morpheus = graphDb . createNode ( ) ;20 morpheus . s e tProper ty ( "name" , "Morpheus" ) ;21 morpheus . s e tProper ty ( " rank" , "Captain" ) ;22 morpheus . s e tProper ty ( " occupat ion " , "Total bad as s " ) ;2324 // Utworzenie kraw¦dz i ( r e l a c j i ) sk i e rowane j mi¦dzy w¦zªami .25 mrAnderson . c r ea teRe la t i onsh ipTo (morpheus , RelTypes .KNOWS) ;2627 Node t r i n i t y = graphDb . createNode ( ) ;28 t r i n i t y . s e tProper ty ( "name" , " Tr in i ty " ) ;2930 // Wªasno±ci (" p r o p e r t i e s ") mo»na tak » e dodawa¢ do kraw¦dzi , co31 // i l u s t r u j e pon i » s zy kod w przypadku r e l a c j i "mrAndersonKnowsTrinity " .32 morpheus . c r ea teRe la t i onsh ipTo ( t r i n i t y , RelTypes .KNOWS) ;33 Re la t i on sh ip mrAndersonKnowsTrinity34 = mrAnderson . c r ea teRe la t i onsh ipTo ( t r i n i t y , RelTypes .KNOWS) ;35 mrAndersonKnowsTrinity . s e tProper ty ( "age" , "3 days" ) ;36 t r i n i t y . c r ea teRe la t i onsh ipTo (mrAnderson , RelTypes .LOVES) ;3738 Node reagan = graphDb . createNode ( ) ;39 reagan . se tProper ty ( "name" , "Cypher" ) ;40 reagan . se tProper ty ( " l a s t name" , "Reagan" ) ;4142 Re la t i on sh ip morpheusKnowsReagan43 = morpheus . c r ea teRe la t i onsh ipTo ( reagan , RelTypes .KNOWS) ;44 morpheusKnowsReagan . se tProper ty ( " d i s c l o s u r e " , " pub l i c " ) ;4546 Node agent = graphDb . createNode ( ) ;47 agent . s e tProper ty ( "name" , "Agent Smith" ) ;48 agent . s e tProper ty ( " ve r s i on " , " 1 .0 b" ) ;49 agent . s e tProper ty ( " language " , "C++" ) ;5051 Re la t i on sh ip reaganKnowsAgent52 = reagan . c r ea teRe la t i onsh ipTo ( agent , RelTypes .KNOWS)53 reaganKnowsAgent . s e tProper ty ( " d i s c l o s u r e " , " s e c r e t " ) ;54 reaganKnowsAgent . s e tProper ty ( "age" , "6 months" ) ;5556 Node a r c h i t e c t = graphDb . createNode ( ) ;57 a r c h i t e c t . s e tProper ty ( "name" , "The Arch i t e c t " ) ;58 agent . c r ea teRe la t i onsh ipTo ( a r ch i t e c t , RelTypes .CODED_BY) ;5960 // Oznaczenie t r a n s a k c j i sukcesem i zako«czen ie j e j spowoduje
14
61 // wykonanie commit 'u do bazy62 tx . su c c e s s ( ) ;63 tx . f i n i s h ( ) ;64 }
5.3 Wyszukiwanie w gra�e
Znalezienie przyjacióª i tranzytywnych przyjacióª pana Andersona.Gdy mamy wypeªnion¡ baz¦, mo»emy wypróbowa¢ metod¦ przej±cia grafu wcelu znalezienia wszystkich znajomych pana Andersona. Przej±cie polega naodwiedzeniu wszystkich w¦zªów, do których da si¦ doj±¢ przechodz¡c wyª¡czniewyj±ciowymi kraw¦dziami typu KNOWS. Graf b¦dziemy przechodzi¢ wedªugstrategii przeszukiwania wszerz, przeszukiwaj¡c w¦zªy do ko«ca grafu.
Przeszukiwanie grafu ilustruje poni»szy kod:
1 public void f indFriendsOfAnderson ( ){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ó ry zwróc i3 // p r z y j a c i ó ª Pana Andersona .4 Traverser f r i e nd sTrav e r s e r = mrAnderson . t r a v e r s e (5 // s t r a t e g i a prze s zuk iwan ia wszerz :6 Traverser . Order .BREADTH_FIRST,7 // p r z e g l ¡dan i e do ko«ca gra fu :8 StopEvaluator .END_OF_GRAPH,9 // zwracanie ws 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 ierunek r e l a c j i :14 Di r e c t i on .OUTGOING15 ) ;1617 // Pr z e j ± c i e po w¦zªach i wypisanie r e zu l t a t ów18 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 nd : f r i e nd sTrav e r s e r ){20 System . out . p r i n t f ( "At depth %d => %s%n" ,21 f r i e nd sTrav e r s e r . cu r r en tPo s i t i on ( ) . depth ( ) ,22 f r i e nd . 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 => MorpheusAt depth 1 => Tr in i tyAt depth 2 => CypherAt depth 3 => Agent Smith
15
Znalezienie wszystkich osób, które s¡ w kim± zakochane. W tym przy-padku naszym celem jest zwrócenie wszystkich w¦zªów w±ród znajomych panaAndersona, które posiadaj¡ wyj±ciow¡ relacj¦ typu LOVES. Sªu»y temu metoda�ndFriendsInLove():
1 public void f indFr iends InLove ( ){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ó ry zwróc i w¦zªy3 // z r e l a c j ¡ wyj±ciow¡ "LOVES"4 Traverser l oveTrave 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 prze s zuk iwan ia6 StopEvaluator .END_OF_GRAPH, // pr ze s zuk iwan ie do ko«ca gra fu7 // Zdef in iowanie , k t ó r e w¦zªy maj¡ by¢ zwracane :8 new ReturnableEvaluator ( ){9 public boolean i sReturnableNode ( Trave r s a lPo s i t i on pos ){10 return pos . currentNode ( ) . hasRe la t i onsh ip (11 RelTypes .LOVES, D i r e c t i on .OUTGOING12 ) ;13 }14 } ,15 // przechodzen ie gra fu nadal odbywa s i ¦ po16 // wy±ciowych kraw¦dziach typu KNOWS17 RelTypes .KNOWS,18 Di r e c t i on .OUTGOING19 ) ;2021 // Pr z e j ± c i e po w¦zªach i wypisanie r e zu l t a t ów22 System . out . p r i n t l n ( "Who i s in love ?" ) ;23 for (Node person : l oveTrave r s e r ){24 System . out . p r i n t f ( "At depth %d => %s%n" ,25 loveTrave r s e r . cu r r en tPo s i t i on ( ) . depth ( ) ,26 person . getProperty ( "name" )27 ) ;28 }29 }
Rezultat uruchomienia metody:
Who i s in l ove ?At depth 1 => Tr in i ty
5.4 Peªny kod przykªadu
Plik Neo4jExample.java:
1 package neo4jexample ;23 import org . neo4j . graphdb . D i r e c t i on ;4 import org . neo4j . graphdb . GraphDatabaseService ;5 import org . neo4j . graphdb . Node ;6 import org . neo4j . graphdb . Re la t i on sh ip ;7 import org . neo4j . graphdb . Relat ionshipType ;8 import org . neo4j . graphdb . ReturnableEvaluator ;9 import org . neo4j . graphdb . StopEvaluator ;10 import org . neo4j . graphdb . Transact ion ;
16
11 import org . neo4j . graphdb . Trave r s a lPo s i t i on ;12 import org . neo4j . graphdb . Traverser ;13 import org . neo4j . k e rne l . EmbeddedGraphDatabase ;141516 public class Neo4jExample {1718 private enum RelTypes implements Relat ionshipType19 {20 KNOWS,21 CODED_BY,22 LOVES23 }2425 private GraphDatabaseService graphDb ;26 private Node mrAnderson ;2728 public void c reateDatabase Ins tance ( ){29 // Utworzenie i n s t a n c j i bazy danych . Baza j e s t typu "embedded " , c z y l i30 // zna jdu je s i ¦ na maszynie w i r tua lne j , na k t ó r e j program j e s t uruchamiany31 graphDb = new EmbeddedGraphDatabase ( "neo4j−s t o r e " ) ;3233 // Rozpocz¦cie t r an s a k c j i34 Transact ion tx = graphDb . beginTx ( ) ;3536 // Utworzenie w¦zªa gra fu . Dodanie do w¦zªów k i l k u wªasno±c i (" p rop e r t i e s " ) .37 mrAnderson = graphDb . createNode ( ) ;38 mrAnderson . se tProper ty ( "name" , "Thomas Anderson" ) ;39 mrAnderson . se tProper ty ( "age" , 2 9 ) ;4041 Node morpheus = graphDb . createNode ( ) ;42 morpheus . s e tProper ty ( "name" , "Morpheus" ) ;43 morpheus . s e tProper ty ( " rank" , "Captain" ) ;44 morpheus . s e tProper ty ( " occupat ion " , "Total bad as s " ) ;4546 // Utworzenie kraw¦dzi ( r e l a c j i ) sk ierowane j mi¦dzy w¦zªami .47 mrAnderson . c r ea teRe la t i onsh ipTo (morpheus , RelTypes .KNOWS) ;4849 Node t r i n i t y = graphDb . createNode ( ) ;50 t r i n i t y . s e tProper ty ( "name" , " Tr in i ty " ) ;5152 // Wªasno±ci (" p rop e r t i e s ") mo»na tak »e dodawa¢ do kraw¦dzi , co i l u s t r u j e53 // pon i » s zy kod w przypadku r e l a c j i "mrAndersonKnowsTrinity " .54 morpheus . c r ea teRe la t i onsh ipTo ( t r i n i t y , RelTypes .KNOWS) ;55 Re la t i on sh ip mrAndersonKnowsTrinity56 = mrAnderson . c r ea teRe la t i onsh ipTo ( t r i n i t y , RelTypes .KNOWS) ;57 mrAndersonKnowsTrinity . s e tProper ty ( "age" , "3 days" ) ;58 t r i n i t y . c r ea teRe la t i onsh ipTo (mrAnderson , RelTypes .LOVES) ;5960 Node reagan = graphDb . createNode ( ) ;61 reagan . se tProper ty ( "name" , "Cypher" ) ;62 reagan . se tProper ty ( " l a s t name" , "Reagan" ) ;6364 Re la t i on sh ip morpheusKnowsReagan65 = morpheus . c r ea teRe la t i onsh ipTo ( reagan , RelTypes .KNOWS) ;66 morpheusKnowsReagan . se tProper ty ( " d i s c l o s u r e " , " pub l i c " ) ;6768 Node agent = graphDb . createNode ( ) ;69 agent . s e tProper ty ( "name" , "Agent Smith" ) ;70 agent . s e tProper ty ( " ve r s i on " , " 1 .0 b" ) ;71 agent . s e tProper ty ( " language " , "C++" ) ;72
17
73 Re la t i on sh ip reaganKnowsAgent74 = reagan . c r ea teRe la t i onsh ipTo ( agent , RelTypes .KNOWS) ;75 reaganKnowsAgent . s e tProper ty ( " d i s c l o s u r e " , " s e c r e t " ) ;76 reaganKnowsAgent . s e tProper ty ( "age" , "6 months" ) ;7778 Node a r c h i t e c t = graphDb . createNode ( ) ;79 a r c h i t e c t . s e tProper ty ( "name" , "The Arch i t e c t " ) ;8081 agent . c r ea teRe la t i onsh ipTo ( a r ch i t e c t , RelTypes .CODED_BY) ;8283 // Oznaczenie t r an s a k c j i sukcesem i zako«czenie j e j spowoduje wykonanie84 // commit 'u do bazy85 tx . su c c e s s ( ) ;86 tx . f i n i s h ( ) ;87 }8889 public void stopDatabase ( ){90 graphDb . shutdown ( ) ;91 }9293 public void f indFriendsOfAnderson ( ){94 // Utworzenie i n s t a n c j i o b i e k tu k l a s y Traverser , k tóry zwróci95 // p r z y j a c i ó ª Pana Andersona .96 Traverser f r i e nd sTrav e r s e r = mrAnderson . t r a v e r s e (97 // s t r a t e g i a przeszuk iwania wszerz :98 Traverser . Order .BREADTH_FIRST,99 // pr zeg l ¡dan i e do ko«ca gra fu :100 StopEvaluator .END_OF_GRAPH,101 // zwracanie ws zy s t k i ch pasuj¡cych w¦zªów , oprócz o s t a tn i e go :102 ReturnableEvaluator .ALL_BUT_START_NODE,103 // re l a c j a , jaka nas i n t e r e s u j e :104 RelTypes .KNOWS,105 // k ierunek r e l a c j i :106 Di r e c t i on .OUTGOING) ;107108 // Pr z e j ± c i e po w¦zªach i wypisanie r e zu l t a t ów109 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 nd : f r i e nd sTrav e r s e r ){111 System . out . p r i n t f ( "At depth %d => %s%n" ,112 f r i e nd sTrav e r s e r . cu r r en tPo s i t i on ( ) . depth ( ) ,113 f r i e nd . getProperty ( "name" ) ) ;114 }115 }116117 public void f indFr iends InLove ( ){118 // Utworzenie i n s t a n c j i o b i e k tu k l a s y Traverser , k tóry zwróci w¦zªy119 // z r e l a c j ¡ wyj±ciow¡ "LOVES"120 Traverser l oveTrave 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 przeszuk iwania122 StopEvaluator .END_OF_GRAPH, // przes zuk iwanie do ko«ca gra fu123 // Zdef iniowanie , k tó re w¦zªy maj¡ by¢ zwracane :124 new ReturnableEvaluator ( ){125 public boolean i sReturnableNode ( Trave r s a lPo s i t i on pos ){126 return pos . currentNode ( ) . hasRe la t i onsh ip (127 RelTypes .LOVES, D i r e c t i on .OUTGOING ) ;128 }129 } ,130 // przechodzen ie gra fu nadal odbywa s i ¦ po131 // wy±ciowych kraw¦dziach typu KNOWS132 RelTypes .KNOWS,133 D i r e c t i on .OUTGOING134 ) ;
18
135136 // Pr z e j ± c i e po w¦zªach i wypisanie r e zu l t a t ów137 System . out . p r i n t l n ( "Who i s in love ?" ) ;138 for (Node person : l oveTrave r s e r ){139 System . out . p r i n t f ( "At depth %d => %s%n" ,140 l oveTrave r s e r . cu r r en tPo s i t i on ( ) . depth ( ) ,141 person . getProperty ( "name" )142 ) ;143 }144 }145146 public stat ic void main ( St r ing [ ] a rgs ) {147 Neo4jExample exampleApp = new Neo4jExample ( ) ;148 exampleApp . c reateDatabase Ins tance ( ) ;149 exampleApp . f indFriendsOfAnderson ( ) ;150 System . out . p r i n t l n ( ) ;151 exampleApp . f indFr i ends InLove ( ) ;152 exampleApp . stopDatabase ( ) ;153 }154155 }
6 Podsumowanie.
W przypadku obszernej klasy problemów grafowe bazy danych znacznie bardziejnadaj¡ si¦ do przechowywania danych ni» relacyjne bazy danych. Elastyczno±¢,wydajno±¢, prostota i lepsze dopasowanie do obiektowego modelu dziedzinyto najwa»niejsze zalety GBD. Istnieje wiele zastosowa«, przy których modelgrafowy jest jedynym dobrym rozwi¡zaniem.
Przy szybkim rozwoju technologii takich, jak sieci spoªeczno±ciowe, bazywiedzy, bazy GIS, czy sieci Semantic Web mo»na si¦ spodziewa¢, »e znaczenieGBD b¦dzie rosªo. Tak»e w wielu zastosowaniach, w których dotychczas korzys-tano z tradycyjnych, relacyjnych BD, mo»na czerpa¢ znaczne korzy±ci z u»yciamodelu grafowego.
Na rynku jest wiele dost¦pnych rozwi¡za«, zarówno komercyjnych, jak i opensource (na które warto zwróci¢ szczególn¡ uwag¦). Rozwi¡zania te, cz¦sto wyo-dr¦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 DataProvenance Perspective�, Chad Vicknair, Michael Macias, Zhendong Zhao,Xiaofei Nan, Yixin Chen, Dawn Wilkins, 2010 r., Oxford, MS, USA.
[2] http://www.infoq.com/articles/graph-nosql-neo4j - �Graph Databases,NOSQL and Neo4j�.
[3] http://www.techcrunchit.com/2009/10/27/neo-technology-commercializes-next-generation-graph-based-database/ - �Neo Technology CommercializesNext Generation Graph Based Database�
[4] �Survey of Graph Database Models�, Renzo Angles, Claudio Gutierrez, Uni-versidad de Chile, luty 2008 r.
19
[5] http://dist.neo4j.org/basic-neo4j-code-examples-2008-05-08.pdf - Neo.Some code snippets, Emil Eifrem, 8.05.2008 r.
[6] http://java.dzone.com/news/nosql-graph-database-feature - NoSQL GraphDatabase Comparison, Pere Urbón-bayes, 2010
20