OneBI blog

Wstęp do Neo4j – Grafowa baza danych.

Home  >>  Neo4j  >>  Wstęp do Neo4j – Grafowa baza danych.

Wstęp do Neo4j – Grafowa baza danych.

On April 12, 2016, Posted by , In Neo4j, With 5 Comments

Neo4j to grafowa baza danych, która nie używa SQL a języka Cypher.

W tym wpisie pokażemy jak wykonywać podstawowe operacje na Neo4j.

Instalacja

Pobieramy Neo4j z tej strony.  Gdy już mamy pliki na swoim komputerze, musimy je wypakować z archiwum. Robimy to za pomocą komendy:

Pierwsze Kroki

Po wypakowaniu przechodzimy do folderu bin, i uruchamiamy serwer komendą

Teraz otwieramy przeglądarkę (polecam Google Chrome) i przechodzimy pod adres localhost:7474 gdzie musimy ustawić hasło do naszego serwera.

Ok, jesteśmy zalogowani do naszego dashboardu. Spróbujmy umieścić jakieś dane w Neo4j. Przygotowałem bazę przystanków komunikacji miejskiej. Możesz ja wgrać używając dashboardu –  po prostu skopiuj  zawartość pliku i wklej ją do linii poleceń dashboarda.

Język Cypher

Podstawowe obiekty Neo4j to

  • węzeł (node) – wierzchołek grafu, reprezentuje obiekt
  • relacja (relationship) – krawędź grafu, reprezentuje powiązanie między obiektami
  • etykieta (label) – tekstowa etykieta, która może być przypięta do węzła lub relacji
  • własność (property) – dowolna zmienna (nazwa + wartość), tak samo może być przypięta do węzła lub relacji

Przeanalizujmy teraz zapytania, które pobraliście. Pierwsze tworzy węzeł:

create (_1605:`Przystanek` {`name`:"Mostki"}) 

Polecenie create tworzy nam węzeł. _1605 to identyfikator węzła, a :Przystanek jest etykietą węzła. Nasz węzeł ma własność name o wartości “Mostki”.

Kolejne zapytanie tworzy relacje pomiędzy węzłami.

_872 oraz _889 wskazują przystanki, które mają zostać połączone. :Linia_2 jest etykietą relacji między przystankami. Relacje oznacza się kreskami. Strzałka -[]-> oznacza kierunek relacji, w tym wypadku w która stronę jedzie bus.

Pozostałe polecenia działają podobnie.

Hmm, skoro już mamy bazę miejskiej komunikacji to może sprawdźmy co potrafi cypher. Załóżmy, że chcę się dostać z punktu A do punktu B. Często bywa tak, że musisz przejechać cała trasę autobusu ponieważ punkt B jest ostatnim przystankiem na danej lini autobusowe. Użyjmy cyphera, żeby znaleźć najkrótsza drogę z punktu A do punktu B.

Załóżmy że interesuje mnie linia 40. Oto jej trasa.

Kazimierza Wielkiego, Rynek, Dunajewskiego, Wąsowiczów, Kościuszki, Jagiellońska, Mickiewicza, Długosza, Nawojowska, Aleja Piłsudskiego, Bolesława Prusa, Komorowskiego, Nawojowska, Nawojowa, Podkamienne, Żeleźnikowa Mała, Żeleźnikowa Wielka, Łazy Biegonickie, (Nowy Sącz) Biegonicka, Węgierska, Asnyka, Kolejowa, Dw.MPK st.1, Aleja Batorego, Aleja Wolności, Mickiewicza, Długosza, Kościuszki, Matejki, Lwowska, Rynek.

40 trasa cala

Z przystanku na ul. Kazimierza Wielkiego chce dojechać na ul. Kolejową, niestety mój przystanek jest na początku linii, a Rynek na samym końcu. Między nimi jest 20 Przystanków!!!

Użyjmy Cyphera, żeby znaleźć najszybszą drogę z mojego przystanku na ul Kolejową.

shortest 40

 

Przeanalizujmy nasze zapytanie. Jest to polecenie MATCH.

Pierwsza linijka z wyszukuje nam węzły o zadanej właściwości “name” i etykiecie Przystanek, następnie przypisuje do nich zmienne w tym przypadku a,b.

Druga linijka to algorytm cyphera, który służy jak sama nazwa wskazuje do wyszukiwania najkrótszej ścieżki.

Trzecia linijka zwraca rezultat drugiej linijki.

Jak widać istnieje wiele ścieżek, które szybciej mnie zabiorą do celu. Neo4j pokazuje mi te informacje w bardzo prosty i czytelny dla każdego sposób.

Nie wiem jak was, ale mnie ciekawi, ile jest lini które jadą bezpośrednio z Rynku na ul. Dunajewskiego:

ile 40

Jak w poprzednim przypadku zaczniemy od analizy kodu.

Pierwsza linijka – identycznie jak w poprzednim przykładzie.

Druga linijka to kolejne polecenie MATCH, dzięki *1 wyszukujące nam relacje spełniające warunek, że relacja Rynek -> Dunajewskiego jest w jednym kroku.

Trzecia linijka zlicza nam wynik drugiej linijki.

Wynik zapytania mówi nam, że jest dokładnie 27 linii, które jadą bezpośrednio z Rynku na ul. Dunajewskiego.

Jak zobaczyliśmy, neo4j jest bardzo prosty w instalacji, obsłudze oraz czytelności. Cypher jest to młody język z wielkim potencjałem, który jest już wykorzystywany przez wiele firm.

 

5 Comments so far:

  1. An interesting discussion is worth comment. I think that you should write more on this topic, it might not be a taboo subject but generally people are not enough to speak on such topics. To the next. Cheers

  2. Czy autor dobrze to przemyślał?

  3. Gavin Blass says:

    Czy będzie kontynułacja?

Leave a Reply

Your email address will not be published. Required fields are marked *