Pomoc do laboratoriów z bazy Neo4J - Technologie ...
Transcript of Pomoc do laboratoriów z bazy Neo4J - Technologie ...
Pomoc do laboratoriów z bazy Neo4JTechnologie Zarządzania Treścią
dr inż. Robert Perliń[email protected]
Politechnika CzęstochowskaInstytut Informatyki Teoretycznej i Stosowanej
Pomoc do laboratoriów z bazy Neo4J 1/32
Instalacja i uruchomienie
Instalacja:
pobieramy najnowszą wersję ze strony producenta:https://neo4j.com/download/
rozpakowujemy, przechodzimy do utworzonego katalogu(neo4j-community-3.3.0),
wystarczy uruchomić
Używanie:
./bin/neo4j console, Włączanie/wyłączanie serwera Redis:
neo4j { console | start | stop | restart | status }
Pomoc do laboratoriów z bazy Neo4J 2/32
neo4j-admin
główne narzędzie do zarządzania instancją Neo4J
dołączone do całego produktu Neo4J
użycie: neo4j-admin polecenie, dostępne polecenia:
ogólnecheck-consistency - sprawdzanie spójności bazy danychhelp - pomoc ogólna albo dla konkretnego poleceniaimport - import danych z kolekcji CSV albo z wydania przed 3.0store-info - wyświetla informacje o wersji przechowywanych danychautoryzacjaset-default-admin - ustawienie, który użytkownik ma być adminem(w przypadku nie utworzenia żadnych ról w bazie)set-initial-password - inicjalizacja hasła pierwszego adminatworzenie kopii zapasowych offlinedump - zrzut bazy danych do jednego pliku archiwumload - wczytanie bazy z archiwum utworzonego poleceniem dumptworzenie kopii zapasowych onlinebackup - tworzy kopie zapasową online z działającej instancjirestore - przywraca baze z utworzonej kopii
Pomoc do laboratoriów z bazy Neo4J 3/32
neo4j-shell
narzędzie konsolowe do połączenia się z bazą i wykonania jednego poleceniaalbo listy poleceń zapisanych w pliku
uruchoamia lokalnie bazę neo4j i wykonuje na niej polecenie/polecenia
komunikuje się z bazą poprzez szyfrowany binarny protokół Bolt
uruchamianie: neo4j-shell [opcje]
-host - nazwa domeny albo adres IP hista, z którym się łączymy-port - port hosta do którego się łączymy-name - nazwa RMI, rmi://<host>:<port>/<name> (domyślnie:shell)-pid - ID procesu, z którym się łączymy-c - polecenie do uruchomienia na serwerze, po uruchomieniu shell sięwyłącza-file - plik zawierający polecenia do uruchomienia, po uruchomieniushell się wyłącza-path - ścieżka do iejsca składowania plików lokalnej bazy danych-config - wskazuje na plik z ustawieniami przy startowaniu lokalnegoserwera
Pomoc do laboratoriów z bazy Neo4J 4/32
cypher-shell
tekstowa linia poleceń, narzędzie dołączone do całego produktu Neo4J
pozwala połączyć się z dowolną bazą Neo4J, użyć języka Cypher do pobraniadanych, zdefiniowania schematu czy zadań administracyjnych
pozwala na jawne używanie transakcji
komunikuje się z bazą poprzez szyfrowany binarny protokół Bolt
uruchamianie: cypher-shell [opcje]
-h, --help - pomoc do narzędzia-v, --version - wersja narządzia-a ADDRESS, --address ADDRESS - adres bazy, z którą się łączymy,domyślnie bolt://localhost:7687-u USERNAME, --username USERNAME - użytkownik, który łączy się zbazą-p PASSWORD, --password PASSWORD - hasło do połączenia--encryption true,false - określa czy szyfrować połączenie,domyślnie true
Pomoc do laboratoriów z bazy Neo4J 5/32
cypher-shell - łączenie się ze zdalną bazą
darmowy hosting na portalu https://www.graphenedb.com/
host: hobby-nkhfbmpbgmcbgbkeiadcbcpl.dbs.graphenedb.com (mniej-więcej)
protokół: bolt
port: 24786
użytkownik: neo4j
hasło: superTajneHasloXYZ
./bin/cypher-shell-a bolt://hobby-nkhfbmpbgmcbgbkeiadcbcpl.dbs.graphenedb.com:24786-p superTajneHasloXYZ -u neo4j
Pomoc do laboratoriów z bazy Neo4J 6/32
Neo4j Browser - przelgądanie wyników
Stylizacja węzłów:
Pomoc do laboratoriów z bazy Neo4J 7/32
Neo4j Browser - przelgądanie wyników
Stylizacja relacji:
Pomoc do laboratoriów z bazy Neo4J 8/32
Niektóre polecenia z Neo4j Browser
Tutoriale:
:play start - początkowe okienko do uczenia się
:play intro - przewodnik do środowiska Neo4J Browser
:play concepts - podstawowe informacje, koncepcje o Neo4J, o grafach
:play Cypher - tutorial do języka Cypher
tutorial na przykładowych bazach
:play movie-graph - baza z kolekcją filmów, aktorów itp.
:play northwind-graph - przykład transformowania danych relacyjnychdo bazy grafowej
dowolny tutorial z podanego adresu URL:play http://guides.neo4j.com/graphgist/restaurant recommendation.html
Pomoc do laboratoriów z bazy Neo4J 9/32
Polecenia z Neo4j Browser - tematy pomocy
Tematy pomocy:
:help - podstawowa pomoc uczenia się Neo4J, jest tutaj trochę różnychodnośników
:help commands - pomoc do konkretnie podanego polecenia
:help play - lista wszystkch tutoriali
:help keys - info o skrótach klawiaturowych,
:help cypher - okienko do pomocy nauki języka Cypher
:help REST GET, :help REST POST, :help rest-delete, ... - pomoc doodbługi konkretnych metod protokołu HTTP
:GET /db/data/labels:DELETE /db/data/transaction/2
:help param, :help params - obsługa parametrów wykorzystywanych wzapytaniach
:help queries – info o poleceniu :queries działającym tylko w Neo4JEnterprise
Pomoc do laboratoriów z bazy Neo4J 10/32
Polecenia systemowe i inne w Neo4j Browser
:clear – usuwa wszystkie okienka z wynikami poleceń, tutorialami, itp.
:sysinfo - informacje o systemie, liczba węzłów, właściwości, relacji, typówrelacji
współpraca z serwerem
:help server - pomoc do poleceń serwerowych
:server connect - łączenie z serwerem, wyświetla też informacje opołączeniu jeśli takie już jest
:server disconnect - rozłączanie się od serwera
:server status – informacja o połączeniu
:server change-password – zmiana hasła
polecenia dla administratora, tylko w Node4J Enterprise
:help server user – pomoc o poleceniach dla tworzenia użytkowników iwyświetlenia ich listy,
:server user add - dodawanie użytkownika
:server user list - lista utworzonych użytkowników
Pomoc do laboratoriów z bazy Neo4J 11/32
Cypher - zapytania deklaratywne I
Na początek przykład tworzenia danych, polecenie CREATE:
trzy wierzchołki o etykietach: Uzytkownik,
nazwy maciej, jan, joasia to nazwy wierzchołków dostępne w tympoleceniu
do wierzchołków została dodana właściwość nazwa przechowującanazwę użytkownika, polecenia:
CREATE (maciej:Uzytkownik {nazwa:’Maciej Kamiński’})CREATE (jan:Uzytkownik {nazwa:’Jan Wojciechowski’})CREATE (joasia:Uzytkownik {nazwa:’Joanna Mielczarek’})
Tworzenie relacji również odbywa się poleceniem CREATE:
CREATE (tomasz)-[:SLEDZI]->(halina)CREATE (wojciech)-[:LUBI {jakBardzo:62}]->(zuzanna)
Pomoc do laboratoriów z bazy Neo4J 12/32
Cypher - zapytania deklaratywne II
Pobieranie wszystkich węzłów z grafu, polecenie MATCH:
MATCH (u:Uzytkownik) RETURN (u)
Można to uznać za odpowiednik polecenia SELECT * FROM Uzytkownik.
Cypher to język deklaratywny do pracy z grafami, udostępnia więc sposobyzapytań zarówno o wierzchołki jak i o krawędzie.
Poniższe zapytanie zwraca wszystkich Uzytkownikow powiązanych zwierzchołkiem ”Piotr Kot”.
Zaczyna od podanego nazwą węzła p, wyszukuje wszystkie krawędzieprowadzące do wierzchołków Uzytkownik i wszystkie je zwraca:
MATCH (p:Uzytkownik {nazwa:’Piotr Kot’})--(u:Uzytkownik) RETURN (u)
Pomoc do laboratoriów z bazy Neo4J 13/32
Węzły w CQL
para nawiasów okrągłych () reprezentuje węzeł (niedokończone kółko)
węzły z różnym poziomem szczegółowości danych:
()(gump)(:Film)(gump:Film)(gump:Film {tytul: "Forrest Gump"})(gump:Film {tytul: "Forrest Gump", premiera: 1994})
anonimowy węzeł ()
węzeł ze zmienną (gump), można odnieść się do węzła w innej częścipolecenia ale zasięg ziennej jest ograniczony do jednego polecenia
etykieta Film poprzedzona dwukropkiem określa typ węzła; etykietyograniczają wzorce i są wykorzystywane w indeksach
właściwości węzłów ({tytul: "Forrest Gump"}) to pary klucz-wartośćograniczone nawiasami klamrowymi; używane do przechowywania informacjii ograniczania wzorców
Pomoc do laboratoriów z bazy Neo4J 14/32
Relacje w CQL
relacje nieskierowane oznaczamy parą myślników --
relacje skierowane mają wglądać jak strzałka: <-- albo --> (znakimniejszości i większości)
nawiasy kwadratowe [...] są używane do umieszczania w relacjachwłaściwości, zmiennych i/lub typu relacji
-->-[rola]->-[:GRAŁ_W]->-[rola:GRAŁ_W]->-[rola:GRAŁ_W {role: ["Forrest Gump"]}]->
anonimowa relacja -->
relacja ze zmienną -[rola]->, którą można wykorzystać gdziekolwiek wpoleceniu
typ relacji GRAŁ_W można wykorzystać w budowaniu wzorca
właściwości relacji {role: ["Forrest Gump"]}, analogicznie jakwłaściwości węzła, zawierają pray klucz-wartość, wartości mogą być tablicami
Pomoc do laboratoriów z bazy Neo4J 15/32
Przykładowy wzorzec w CQL
łącząc zapis węzłów z relacjami pomiędzy nimi tworzymy wzorce
przyklad prostego wzorca
(tom:Osoba:Aktor {nazwa: "Tom Hanks"} )-[rola:GRAŁ_W {role: ["Forrest Gump"] } ]->(gump:Film {tytul: "Forrest Gump"} )
typy relacji poprzedzone są dwukropkiem :GRAŁ_W
zmienne (rola) mogą być użyte do odwołania się do relacji w poleceniu
tablica role pozwala określić wiele ról danego aktora
Węzły wzorca a węzły w bazie
każdy węzeł wzorca opisuje zero lub więcej węzłów z bazy danych
każdy zapisany wzorzec opisuje zero lub więcej ścieżek w grafie
Pomoc do laboratoriów z bazy Neo4J 16/32
Zmienne dla wzorców
Cypher pozwala przypisywać wzorce do zmiennych
pozwala to na wielokrotne wykorzystanie fragmentu wzorca, podział jegobudowy na moduły
aktorzy = (:Osoba)-[:GRAŁ_W]->(:Film)
zmienna aktorzy będzie zawierać dwa węzły połączone relacją dla każdejznalezionej bądź utworzonej ścieżki
dostęp do ścieżek i zawartych w nich danych jest dostępny za pomocą wielufunkcji
nodes(path)
relationships(path)
length(path)
Pomoc do laboratoriów z bazy Neo4J 17/32
Klauzule w CQL
zapytania języka Cypher mają zwykle kilka klauzul, z których każdawykonuję określone zadanie
tworzenie i dopasowywanie wzorców w grafiefiltrowanie, projekcja, sortowanie albo paginacja wynikówłączenie w większą całość mniejszych zapytań
łącząc klauzule języka Cypher tworzymy bardziej skomplikowanezapytania realizujące to co chcemy
Neo4J sam określa jak dane zapytanie efektywnie zrealizować
Pomoc do laboratoriów z bazy Neo4J 18/32
Klauzula CREATE
pozwala stworzyć dowolną strukturę grafu z podanymi etykietami iwłaściwościami
przykład
CREATE (:Film {tytul: "Forrest Gump", premiera: 1994})
wynik:
Added 1 label, created 1 node, set 2 properties, completed after 257 ms.
tworzenie danych ze zwracaniem ich
CREATE (o:Osoba:Aktor {nazwa: "Tom Hanks", dataUr:1965} )RETURN o
+---------------------------------------------------+| o |+---------------------------------------------------+| (:Osoba:Aktor {dataUr: 1965, nazwa: "Tom Hanks"}) |+---------------------------------------------------+
1 row available after 121 ms, consumed after another 6 msAdded 1 nodes, Set 2 properties, Added 2 labels
Pomoc do laboratoriów z bazy Neo4J 19/32
Tworzenie większej liczby elementów
w celu utworzenia większej liczby elementów może je oddzielić przecinkiem
CREATE (:Pies), (:Kot), (:Kanarek);
0 rows available after 9 ms, consumed after another 0 msAdded 3 nodes, Added 3 labels
można również użyć wielokrotnie polecenia CREATE
CREATE (:Firma) CREATE (:Uczelnia) CREATE (:Urzad);
0 rows available after 111 ms, consumed after another 0 msAdded 3 nodes, Added 3 labels
Pomoc do laboratoriów z bazy Neo4J 20/32
Dodawanie danych do istniejących struktur
można tworzyć również bardziej skomplikowane struktury
CREATE (a:Osoba {nazwa: "Tom Hanks", dataUr:1965})- [rola:GRAL_W { role:["Forrest"] } ] ->(f:Film {tytul: "Forrest Gump", premiera: 1994})
CREATE (r:Osoba {nazwa: "Robert Zemeckis", dataUr:1951})- [:REZYSER] -> (f)
RETURN a,r,rola,f;
wynik polecenia w formie tekstowej
+--------------------------------------------------------------------------------------------------| a | r |+--------------------------------------------------------------------------------------------------| (:Osoba {dataUr: 1965, nazwa: "Tom Hanks"}) | (:Osoba {dataUr: 1951, nazwa: "Robert Zemeckis"}) |+--------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------+rola | f |---------------------------------------------------------------------------------+[:GRAL_W {role: ["Forrest"]}] | (:Film {premiera: 1994, tytul: "Forrest Gump"}) |---------------------------------------------------------------------------------+
1 row available after 218 ms, consumed after another 2 msAdded 3 nodes, Created 2 relationships, Set 7 properties, Added 3 labels
Pomoc do laboratoriów z bazy Neo4J 21/32
Pobieranie, wyszukiwanie danych
dodawanie danych do istniejących struktur wymaga znalezieniainteresującego nas wzorca
wyszukujemy wzorce poleceniem MATCH
do polecenia przekazujemy wzorce tego samego typu jaki był do tej poryopisywany
jest to podobne do budowanie zapytań na bazie przykładów (ang. query byexample) tylko tutaj przykłady uwzględniają strukturyMATCH wyszukuje podanego wzorca i zwraca jeden wiersz dla każdegopoprawnego dopasowania
MATCH (f:Film)RETURN f;
+-------------------------------------------------+| f |+-------------------------------------------------+| (:Film {premiera: 1994, tytul: "Forrest Gump"}) |+-------------------------------------------------+
1 row available after 16 ms, consumed after another 1 ms
Pomoc do laboratoriów z bazy Neo4J 22/32
Pobieranie, wyszukiwanie danych
pobranie wszystkich węzłów typu Osoba
MATCH (o:Osoba)RETURN o;
+---------------------------------------------------+| o |+---------------------------------------------------+| (:Osoba:Aktor {dataUr: 1965, nazwa: "Tom Hanks"}) || (:Osoba {dataUr: 1965, nazwa: "Tom Hanks"}) || (:Osoba {dataUr: 1951, nazwa: "Robert Zemeckis"}) || (:Osoba:Aktor {dataUr: 1965, nazwa: "Tom Hanks"}) || (:Osoba {dataUr: 1965, nazwa: "Tom Hanks"}) || (:Osoba {dataUr: 1951, nazwa: "Robert Zemeckis"}) |+---------------------------------------------------+
6 rows available after 16 ms, consumed after another 1 ms
Pomoc do laboratoriów z bazy Neo4J 23/32
Wyszukiwanie bardziej określonych danych
pobranie węzłów typu Osoba z określoną wartością właściwości nazwa
MATCH (o:Osoba {nazwa:"Tom Hanks"})RETURN o;
+---------------------------------------------------+| o |+---------------------------------------------------+| (:Osoba:Aktor {dataUr: 1965, nazwa: "Tom Hanks"}) || (:Osoba {dataUr: 1965, nazwa: "Tom Hanks"}) || (:Osoba:Aktor {dataUr: 1965, nazwa: "Tom Hanks"}) || (:Osoba {dataUr: 1965, nazwa: "Tom Hanks"}) |+---------------------------------------------------+
4 rows available after 29 ms, consumed after another 3 ms
nie potrzeba podawać wszystkich właściwości szukanego węzła
wystarczy podać tylko te kluczowe, np. ISBN, email, login, kod produktu,położenie geograficzne, ...
Pomoc do laboratoriów z bazy Neo4J 24/32
Wyszukiwanie bardziej określonych danych
zapytanie zwracające filmy i grane w nich role przez Toma Hanksa
MATCH (o:Osoba { nazwa:"Tom Hanks" })-[r:GRAL_W]->(f:Film)RETURN f.tytul, r.role;
+------------------------------+| f.tytul | r.role |+------------------------------+| "Forrest Gump" | ["Forrest"] |+------------------------------+
1 row available after 58 ms, consumed after another 3 ms
zwracamy tylko właściwości węzłów czy relacji, te, które nas interesują
posługujemy się notacją kropkową: identyfikator.wlasciwosc
Znająć polecenie MATCH i CREATE możemy już dodawać węzły i relacje doistniejącego grafu.
Pomoc do laboratoriów z bazy Neo4J 25/32
Dodawanie danych do grafu
aby dodać dane do grafu należy najpierw znaleźć punkty(węzły), w których chcemy coś dodać
dodajemy zawsze węzły razem z relacjami
dodanie filmu z Tomem Hanksem wygląda następująco
MATCH (o:Osoba { nazwa:"Tom Hanks" })CREATE (f:Film { tytul:"Zielona mila",premiera:1999 })CREATE (o)-[r:GRAL_W { role: [’Paul Edgecombe’]}]->(f)RETURN o,r,f
możemy przypisać zmienne zarówno do węzłów jak i krawędzi
zmiennych możemy używać niezależnie od tego czy powstały z poleceniaCREATE czy MATCH
używanie razem MATCH i CREATE tworzy węzeł dla każdego wierszadopasowanego przez MATCH, często tego właśnie oczekujemy
jeśli oczekujmey innego zachowania to, można np. umieścić CREATE przedMATCH albo użyć MERGE...
Pomoc do laboratoriów z bazy Neo4J 26/32
Uzupełnianie wzorców - klauzula MERGE
wykorzystywane do wykonywania pewnych operacji jednorazowo
jest idempotentne, wiele wywołań da ten sam efekt co jedno wywołanie
działa tak jak kombinacja MATCH albo CREATE sprawdzających istnieniedanych przed wstawieniem
w poleceniu MERGE definiujemy wzorzec, który ma być znaleziony alboutworzony
tak jak MATCH często chcemy uwzględnić tylko jedną kluczową właściwość,którą wzorzec określa
dodatkowo MERGE pozwala utworzyć dodatkowe właściwości, któreustawiamy przy tworzeniu (ON CREATE), polecenie
MERGE (f:Film { tytul:"Zielona mila" })ON CREATE SET f.premiera = 1999RETURN f
utworzy film jeśli takiego nie było
nic nie zrobi jeśli taki film już był w bazie (nasz przypadek)
Pomoc do laboratoriów z bazy Neo4J 27/32
Uzupełnianie wzorców - klauzula MERGE
polecenie MERGE z innym filmem, np.:
MERGE (f:Film { tytul:"Złap mnie, jeśli potrafisz" })ON CREATE SET f.premiera = 2002RETURN f
doda węzeł do bazy, ale kolejne wykonania tego polecenia już nic nie zmienią
MATCH bez żadnych wcześniej przypisanych zmiennych:
albo dopasuje cały podany wzorzecalbo stworzy cały podany wzorzec
nie ma możliwości, żeby część wzorca była dopasowanaa część stworzona
MERGE nigdy nie duplikuje danych czy struktur
Pomoc do laboratoriów z bazy Neo4J 28/32
Uzupełnianie wzorców - klauzula MERGE
MERGE może również zapewnić, że relacja będzie utworzona co najwyżej raz
wymaga to przekazania zmiennych węzła początku i końca relacji zpolecenia MATCH
MATCH (f:Film { tytul:"Złap mnie, jeśli potrafisz" })MATCH (o:Osoba { nazwa:"Tom Hanks" })MERGE (o)-[r:GRAL_W]->(f)ON CREATE SET r.role =[’Carl Hanratty’]RETURN o,r,f
powyższe poleceniu utworzy oczekiwaną relację
kolejne jego wywołania nie utworzą większej liczbytakich samych relacji
w MERGE można pominąć kierunkowość relacjimożna użyć -- zamiast -->
Pomoc do laboratoriów z bazy Neo4J 29/32
Uzupełnianie wzorców - klauzula MERGE
zupełnie inaczej będzie przy CREATE, polecenie
MATCH (f:Film { tytul:"Złap mnie, jeśli potrafisz" })MATCH (o:Osoba { nazwa:"Tom Hanks" })CREATE (o)-[r:GRAL_W {role: [’Carl Hanratty’]}]->(f)RETURN o,r,f
wywołanie 4 razy doda 4 takie same relacje do grafu
Pomoc do laboratoriów z bazy Neo4J 30/32
Filtrowanie wyników - WHERE
do tej pory zapytania zwracały wszystkie dopasowane wyniki
można to jednak ograniczyć podając warunki w klauzuli WHERE
można wykorzystywać dowolną liczbę wyrażeń booloskich łączonychoperatorami AND, OR, XOR i NOT
najprostsze predykaty to porównania, szczególnie równościowe
MATCH (f:Film)WHERE f.tytul = "Forrest Gump"RETURN f
bardziej złożony warunek
MATCH (o:Osoba)-[r:GRAL_W]->(f:Film)WHERE f.premiera > 2000 OR "Paul Edgecombe" IN r.roleRETURN o,r,f
Pomoc do laboratoriów z bazy Neo4J 31/32
Usuwanie wszystkich węzłów - DELETE
usuwanie wszystkich węzłów
MATCH (n)DETACH DELETE n
Pomoc do laboratoriów z bazy Neo4J 32/32