Sprievodca Neo4J s Java

1. Úvod

Tento článok je o Neo4j - jedna z najrozvinutejších a najkompletnejších databáz grafov na dnešnom trhu. Databázy grafov pristupujú k úlohe modelovania údajov s tým, že veľa vecí v živote sa dá predstaviť ako zbierka uzly (V) a spojenie medzi nimi tzv hrany (E).

2. Zabudovaný Neo4j

Najjednoduchší spôsob, ako začať Neo4j je použitie vloženej verzie, v ktorej Neo4j beží v rovnakom JVM ako vaša aplikácia.

Najprv musíme pridať závislosť Maven:

 org.neo4j neo4j 3.4.6 

Kliknutím na tento odkaz si môžete stiahnuť najnovšiu verziu.

Ďalej vytvorme továreň:

GraphDatabaseFactory graphDbFactory = nový GraphDatabaseFactory ();

Nakoniec vytvoríme vloženú databázu:

GraphDatabaseService graphDb = graphDbFactory.newEmbeddedDatabase (nový súbor ("data / cars"));

Skutočná akcia sa teraz môže začať! Najskôr musíme v grafe vytvoriť niekoľko uzlov, a preto musíme začať transakciu odvtedy Neo4j odmietne každú deštruktívnu operáciu, pokiaľ nebola zahájená transakcia:

graphDb.beginTx ();

Keď máme rozpracovanú transakciu, môžeme začať pridávať uzly:

Uzol auto = graphDb.createNode (Label.label ("Car")); car.setProperty ("make", "tesla"); car.setProperty ("model", "model3"); Vlastník uzla = graphDb.createNode (Label.label ("Osoba")); owner.setProperty ("meno", "baeldung"); owner.setProperty ("priezvisko", "baeldung");

Tu sme pridali uzol Auto s vlastnosťami urobiť a Model rovnako ako uzol Osoba s vlastnosťami krstné meno a priezvisko

Teraz môžeme pridať vzťah:

owner.createRelationshipTo (auto, RelationshipType.withName ("vlastník"));

Vyššie uvedené vyhlásenie pridalo hranu spájajúcu dva uzly s vlastník štítok. Tento vzťah môžeme overiť spustením dotazu napísaného v Neo4j silný Cypher Jazyk:

Výsledok result = graphDb.execute ("MATCH (c: Car) <- [owner] - (p: Person)" + "WHERE c.make = 'tesla'" + "RETURN p.firstName, p.lastName");

Tu požiadame o nájdenie majiteľa auta pre každé auto, ktorého značka je Tesla, a vrátime mu jeho meno a priezvisko. Nie je prekvapením, že sa vracia: {p.firstName = baeldung, p.lastName = baeldung}

3. Cypher Query Language

Neo4j poskytuje veľmi výkonný a dosť intuitívny dotazovací jazyk, ktorý podporuje celú škálu funkcií, ktoré by sa od databázy očakávali. Poďme preskúmať, ako môžeme splniť tento štandard, ktorým je vytváranie, načítanie, aktualizácia a mazanie úloh.

3.1. Vytvoriť uzol

Kľúčové slovo Create možno použiť na vytvorenie uzlov aj vzťahov.

CREATE (self: Company {name: "Baeldung"}) RETURN self

Tu sme vytvorili spoločnosť s jediným majetkom názov. Definícia uzla je označená zátvorkami a jeho vlastnosti sú uzavreté v zložených zátvorkách. V tomto prípade, ja je alias pre uzol a Spoločnosť je štítok uzla.

3.2. Vytvorte vzťah

Je možné vytvoriť uzol a vzťah k tomuto uzlu všetko v jednom dotaze:

Výsledok result = graphDb.execute ("CREATE (baeldung: Company {name: \" Baeldung \ "})" + "- [: own] -> (tesla: Car {make: 'tesla', model: 'modelX'} ) "+" NÁVRAT baeldung, tesla ");

Tu sme vytvorili uzly baeldung a tesla a nadviazal medzi nimi vlastnícky vzťah. Vytváranie vzťahov k už existujúcim uzlom je samozrejme tiež možné.

3.3. Načítať údaje

ZÁPAS kľúčové slovo sa používa na vyhľadanie údajov v kombinácii s NÁVRAT na kontrolu, ktoré dátové body sa vrátia. The KDE klauzulu je možné použiť na filtrovanie iba tých uzlov, ktoré majú vlastnosti, ktoré požadujeme.

Poďme zistiť meno spoločnosti, ktorá vlastní Tesla ModelX:

Výsledok result = graphDb.execute ("MATCH (firma: Company) - [: own] -> (car: Car)" + "WHERE car.make = 'tesla' and car.model = 'modelX'" + "RETURN company .názov");

3.4. Aktualizácia uzlov

NASTAVIŤ kľúčové slovo možno použiť na aktualizáciu vlastností uzla alebo označení. Pridajme počet najazdených kilometrov k našej Tesle:

Výsledok = graphDb.execute ("MATCH (auto: auto)" + "KDE auto.make = 'tesla'" + "SET auto.milage = 120" + "SET auto: Auto: Electro" + "SET auto.model = NULL "+" NÁVRATNÉ auto ");

Tu pridáme novú vlastnosť s názvom milage, upravte štítky tak, aby boli oboje Auto a Electro a nakoniec vymažeme Model majetok úplne.

3.5. Odstrániť uzly

Kľúčové slovo DELETE možno použiť na trvalé odstránenie uzlov alebo vzťahov z grafu:

graphDb.execute ("ZÁPAS (spoločnosť: Spoločnosť)" + "KDE spoločnosť.názov = 'Baeldung'" + "ODSTRÁNIŤ spoločnosť");

Tu sme odstránili spoločnosť s názvom Baeldung.

3.6. Väzba parametrov

Vo vyššie uvedených príkladoch máme pevne zakódované hodnoty parametrov, čo nie je najlepší postup. Našťastie Neo4j poskytuje zariadenie na viazanie premenných na dotaz:

Parametre mapy = nový HashMap (); params.put ("meno", "baeldung"); params.put ("make", "tesla"); params.put ("model", "modelS"); Výsledok result = graphDb.execute ("CREATE (baeldung: Company {name: $ name})" + "- [: owns] -> (tesla: Car {make: $ make, model: $ model})" + "RETURN baeldung, tesla ", params);

4. Ovládač Java

Doteraz sme sa pozerali na interakciu s vloženým Neo4j Napríklad, s najväčšou pravdepodobnosťou pre výrobu, by sme chceli spustiť samostatný server a pripojiť sa k nemu pomocou poskytnutého ovládača. Najskôr musíme do nášho súboru pridať ďalšiu závislosť pom.xml:

 org.neo4j.driver neo4j-java-driver 1.6.2 

Kliknutím na tento odkaz môžete skontrolovať najnovšiu verziu tohto ovládača.

Teraz môžeme nadviazať spojenie:

Driver driver = GraphDatabase.driver ("bolt: // localhost: 7687", AuthTokens.basic ("neo4j", "12345"));

Potom vytvorte reláciu:

Relácia relácie = driver.session ();

Na záver môžeme spustiť niekoľko dotazov:

session.run ("CREATE (baeldung: Company {name: \" Baeldung \ "})" + "- [: own] -> (tesla: Car {značka: 'tesla', model: 'modelX'})" + „NÁVRAT baeldung, tesla“);

Keď skončíme so všetkou prácou, musíme ukončiť reláciu aj ovládač:

session.close (); driver.close ();

5. Ovládač JDBC

Je tiež možné komunikovať s Neo4j cez JDBC driver. Ešte jedna závislosť pre naše pom.xml:

 org.neo4j neo4j-jdbc-driver 3.4.0 

Kliknutím na tento odkaz si môžete stiahnuť najnovšiu verziu tohto ovládača.

Ďalej vytvoríme pripojenie JDBC:

Pripojenie con = DriverManager.getConnection ("jdbc: neo4j: bolt: // localhost /? User = neo4j, heslo = 12345, schéma = základné");

Tu kon je bežné spojenie JDBC, ktoré možno použiť na vytváranie a vykonávanie príkazov alebo pripravených príkazov:

try (Statement stmt = con. stmt.execute ("CREATE (baeldung: Company {name: \" Baeldung \ "})" + "- [: owns - - (Tesla: Car {make: 'tesla', model: 'modelX'}) "+" RETURN baeldung, tesla ") ResultSet rs = stmt.executeQuery (" MATCH (spoločnosť: spoločnosť) - [: vlastní] -> (auto: auto) "+" KDE car.make = 'tesla 'and car.model =' modelX '"+" RETURN company.name "); while (rs.next ()) {rs.getString (" company.name ");}}

6. Mapovanie objektov-grafov

Object-Graph-Mapping alebo OGM je technika, ktorá nám umožňuje používať naše doménové POJO ako entity v Neo4j databázy. Poďme preskúmať, ako to funguje. Prvým krokom je, ako obvykle, pridanie nových závislostí do našej pom.xml:

 org.neo4j neo4j-ogm-core 3.1.2 org.neo4j neo4j-ogm-embedded-driver 3.1.2 

Môžete skontrolovať OGM Core Link a OGM Embedded Driver Link a skontrolovať najnovšie verzie týchto knižníc.

Po druhé, anotujeme naše POJO anotáciami OGM:

@NodeEntity verejná trieda Spoločnosť {private Long id; súkromné ​​meno reťazca; @ Vzťah (typ = "vlastné") súkromné ​​auto; } @NodeEntity verejná trieda Auto {súkromné ​​Long id; súkromná značka reťazca; @Relationship (direction = "INCOMING") súkromná spoločnosť; }

@NodeEntity informuje Neo4j že tento objekt bude musieť byť vo výslednom grafe reprezentovaný uzlom. @Vzťah komunikuje potrebu vytvorenia vzťahu s uzlom predstavujúcim príbuzný typ. V takom prípade a spoločnosti vlastní a auto.

Vezmite prosím na vedomie, že Neo4j vyžaduje, aby každá entita mala primárny kľúč s názvom poľa id sa predvolene vyzdvihuje. Alternatívne pomenované pole je možné použiť anotáciou pomocou @Id @GeneratedValue.

Potom musíme vytvoriť konfiguráciu, ktorá sa použije na bootstrap Neo4jOGM. Pre jednoduchosť používajme iba zabudovanú databázu v pamäti:

Konfigurácia conf = nový Configuration.Builder (). Build ();

Po tom inicializujeme SessionFactory s konfiguráciou, ktorú sme vytvorili, a názvom balíka, v ktorom sú umiestnené naše komentované POJO:

SessionFactory factory = nová SessionFactory (conf, "com.baeldung.graph");

Nakoniec môžeme vytvoriť a Session a začni to používať:

Relácia relácie = factory.openSession (); Auto tesla = nové auto („tesla“, „modelS“); Spoločnosť baeldung = nová spoločnosť („baeldung“); baeldung.setCar (tesla); session.save (baeldung);

Tu sme iniciovali reláciu, vytvorili naše POJO a požiadali sme reláciu OGM, aby im vydržala. Neo4j OGM runtime transparentne prevádzal objekty na množinu Cypher dotazy, ktoré vytvorili príslušné uzly a hrany v databáze.

Ak sa zdá tento proces známy, je to preto, lebo je! Presne tak funguje JPA, jediný rozdiel je v tom, či sa objekt preloží do riadkov, ktoré sú pretrvávajúce do RDBMS, alebo rad uzlov a hrán pretrváva do databázy grafov.

7. Záver

Tento článok sa zameral na niektoré základy graficky orientovanej databázy Neo4j.

Ako vždy, kód v tomto zápise je k dispozícii na stránkach Github.


$config[zx-auto] not found$config[zx-overlay] not found