Grafowe bazy danych - przegląd technologiidydaktyka:ztb:2010:...Grafowe bazy danych cz sto (ale nie...

20

Transcript of Grafowe bazy danych - przegląd technologiidydaktyka:ztb:2010:...Grafowe bazy danych cz sto (ale nie...

Page 1: Grafowe bazy danych - przegląd technologiidydaktyka:ztb:2010:...Grafowe bazy danych cz sto (ale nie zawsze) de niuj¡ schemat bazy (ang. schema ), który konkretna instancja bazy

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

Page 2: Grafowe bazy danych - przegląd technologiidydaktyka:ztb:2010:...Grafowe bazy danych cz sto (ale nie zawsze) de niuj¡ schemat bazy (ang. schema ), który konkretna instancja bazy

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

Page 3: Grafowe bazy danych - przegląd technologiidydaktyka:ztb:2010:...Grafowe bazy danych cz sto (ale nie zawsze) de niuj¡ schemat bazy (ang. schema ), który konkretna instancja bazy

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

Page 4: Grafowe bazy danych - przegląd technologiidydaktyka:ztb:2010:...Grafowe bazy danych cz sto (ale nie zawsze) de niuj¡ schemat bazy (ang. schema ), który konkretna instancja bazy

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

Page 5: Grafowe bazy danych - przegląd technologiidydaktyka:ztb:2010:...Grafowe bazy danych cz sto (ale nie zawsze) de niuj¡ schemat bazy (ang. schema ), który konkretna instancja bazy

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

Page 6: Grafowe bazy danych - przegląd technologiidydaktyka:ztb:2010:...Grafowe bazy danych cz sto (ale nie zawsze) de niuj¡ schemat bazy (ang. schema ), który konkretna instancja bazy

• 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

Page 7: Grafowe bazy danych - przegląd technologiidydaktyka:ztb:2010:...Grafowe bazy danych cz sto (ale nie zawsze) de niuj¡ schemat bazy (ang. schema ), który konkretna instancja bazy

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

Page 8: Grafowe bazy danych - przegląd technologiidydaktyka:ztb:2010:...Grafowe bazy danych cz sto (ale nie zawsze) de niuj¡ schemat bazy (ang. schema ), który konkretna instancja bazy

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

Page 9: Grafowe bazy danych - przegląd technologiidydaktyka:ztb:2010:...Grafowe bazy danych cz sto (ale nie zawsze) de niuj¡ schemat bazy (ang. schema ), który konkretna instancja bazy

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

Page 10: Grafowe bazy danych - przegląd technologiidydaktyka:ztb:2010:...Grafowe bazy danych cz sto (ale nie zawsze) de niuj¡ schemat bazy (ang. schema ), który konkretna instancja bazy

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

Page 11: Grafowe bazy danych - przegląd technologiidydaktyka:ztb:2010:...Grafowe bazy danych cz sto (ale nie zawsze) de niuj¡ schemat bazy (ang. schema ), który konkretna instancja bazy

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

Page 12: Grafowe bazy danych - przegląd technologiidydaktyka:ztb:2010:...Grafowe bazy danych cz sto (ale nie zawsze) de niuj¡ schemat bazy (ang. schema ), który konkretna instancja bazy

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

Page 13: Grafowe bazy danych - przegląd technologiidydaktyka:ztb:2010:...Grafowe bazy danych cz sto (ale nie zawsze) de niuj¡ schemat bazy (ang. schema ), który konkretna instancja bazy

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

Page 14: Grafowe bazy danych - przegląd technologiidydaktyka:ztb:2010:...Grafowe bazy danych cz sto (ale nie zawsze) de niuj¡ schemat bazy (ang. schema ), który konkretna instancja bazy

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

Page 15: Grafowe bazy danych - przegląd technologiidydaktyka:ztb:2010:...Grafowe bazy danych cz sto (ale nie zawsze) de niuj¡ schemat bazy (ang. schema ), który konkretna instancja bazy

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

Page 16: Grafowe bazy danych - przegląd technologiidydaktyka:ztb:2010:...Grafowe bazy danych cz sto (ale nie zawsze) de niuj¡ schemat bazy (ang. schema ), który konkretna instancja bazy

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

Page 17: Grafowe bazy danych - przegląd technologiidydaktyka:ztb:2010:...Grafowe bazy danych cz sto (ale nie zawsze) de niuj¡ schemat bazy (ang. schema ), który konkretna instancja bazy

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

Page 18: Grafowe bazy danych - przegląd technologiidydaktyka:ztb:2010:...Grafowe bazy danych cz sto (ale nie zawsze) de niuj¡ schemat bazy (ang. schema ), który konkretna instancja bazy

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

Page 19: Grafowe bazy danych - przegląd technologiidydaktyka:ztb:2010:...Grafowe bazy danych cz sto (ale nie zawsze) de niuj¡ schemat bazy (ang. schema ), który konkretna instancja bazy

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

Page 20: Grafowe bazy danych - przegląd technologiidydaktyka:ztb:2010:...Grafowe bazy danych cz sto (ale nie zawsze) de niuj¡ schemat bazy (ang. schema ), który konkretna instancja bazy

[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