Útmutató a Neo4J Java-hoz

1. Bemutatkozás

Ez a cikk arról szól Neo4j - a mai piac egyik legérettebb és teljes funkcionalitású grafikon-adatbázisa. A grafikonos adatbázisok azzal a céllal közelítik meg az adatmodellezés feladatát, hogy az életben sok minden alkalmas arra, hogy ezek gyűjteményeként jelenjenek meg csomópontok (V) és a közöttük lévő kapcsolatok hívtak élek (E).

2. Beágyazott Neo4j

Az indulás legegyszerűbb módja Neo4j az a beágyazott verzió használata, amelyben Neo4j az alkalmazásoddal azonos JVM-ben fut.

Először hozzá kell adnunk egy Maven-függőséget:

 org.neo4j neo4j 3.4.6 

A legfrissebb verzió letöltéséhez ellenőrizze ezt a linket.

Ezután hozzunk létre egy gyárat:

GraphDatabaseFactory graphDbFactory = új GraphDatabaseFactory ();

Végül létrehozunk egy beágyazott adatbázist:

GraphDatabaseService graphDb = graphDbFactory.newEmbeddedDatabase (új fájl ("adatok / autók"));

Most kezdődhet az igazi cselekvés! Először létre kell hoznunk néhány csomópontot a grafikonunkban, ehhez pedig tranzakciót kell indítanunk Neo4j elutasít minden romboló műveletet, kivéve, ha egy tranzakció megkezdődött:

graphDb.beginTx ();

Miután folyamatban van egy tranzakció, elkezdhetjük csomópontok hozzáadását:

Csomópont autó = graphDb.createNode (Címke.címke ("Autó")); car.setProperty ("gyártmány", "tesla"); car.setProperty ("modell", "modell3"); Csomópont tulajdonosa = graphDb.createNode (Címke.címke ("Személy")); tulajdonos.setProperty ("keresztnév", "baeldung"); owner.setProperty ("vezetéknév", "baeldung");

Itt adtunk hozzá egy csomópontot Autó tulajdonságokkal készítsen és modell valamint a csomópont Személy tulajdonságokkal keresztnév és vezetéknév

Most felvehetünk egy kapcsolatot:

tulajdonos.createRelationshipTo (autó, RelationshipType.withName ("tulajdonos"));

A fenti utasítás hozzáadott egy élt, amely a két csomópontot összeköti egy-vel tulajdonos címke. Ezt a kapcsolatot egy beírt lekérdezés futtatásával ellenőrizhetjük Neo4j's erős Rejtjelez nyelv:

Eredmény eredménye = graphDb.execute ("MATCH (c: Autó) <- [tulajdonos] - (p: Személy)" + "WHERE c.make = 'tesla'" + "RETURN p.firstName, p.lastName");

Itt arra kérünk, hogy találjon gépkocsitulajdonost minden olyan autóhoz, amelynek gyártmánya tesla, és adja vissza nekünk a keresztnevét és vezetéknevét. Ez nem meglepő módon visszatér: {p.firstName = baeldung, p.lastName = baeldung}

3. Cypher Query Language

Neo4j nagyon hatékony és meglehetősen intuitív lekérdező nyelvet biztosít, amely támogatja az adatbázis teljes elvárásait. Vizsgáljuk meg, hogyan tudjuk megvalósítani a szabványos feladatokat, létrehozni, letölteni, frissíteni és törölni a feladatokat.

3.1. Hozzon létre csomópontot

A kulcsszó létrehozása felhasználható csomópontok és kapcsolatok létrehozására is.

LÉTREHOZÁS (én: Cég {name: "Baeldung"}) VISSZAÁLLÍTÁS

Itt egy céget hoztunk létre egyetlen tulajdonral név. A csomópont-meghatározást zárójelek jelölik, tulajdonságait pedig göndör zárójelek zárják. Ebben az esetben, maga a csomópont álneve és Vállalat egy csomópont címke.

3.2. Kapcsolat létrehozása

Létrehozhat egy csomópontot és egy kapcsolatot ehhez a csomóponthoz egyetlen lekérdezésben:

Eredmény eredménye = graphDb.execute ("CREATE (baeldung: Vállalat {név: \" Baeldung \ "})" + "- [: birtokolja] -> (tesla: Autó {make: 'tesla', modell: 'modelX'} ) "+" RETURN baeldung, tesla ");

Itt létrehoztunk csomópontokat baeldung és tesla és tulajdonosi viszonyt létesített közöttük. Természetesen a már létező csomópontokkal való kapcsolatok létrehozása is lehetséges.

3.3. Adatok lekérése

MÉRKŐZÉS kulcsszó az adatok együttes keresésére szolgál VISSZATÉRÉS hogy mely adatpontokat adja vissza. A HOL záradék csak azoknak a csomópontoknak a kiszűrésére használható, amelyek rendelkeznek a kívánt tulajdonságokkal.

Találjuk ki annak a vállalatnak a nevét, amelynek a tesla modelX tulajdonosa:

Eredmény eredménye = graphDb.execute ("MATCH (vállalat: Vállalat) - [: birtokolja] -> (autó: autó)" + "WHERE car.make = 'tesla' és car.model = 'modelX'" + "VISSZAÁLLÍTÁS .név");

3.4. Csomópontok frissítése

KÉSZLET kulcsszó használható a csomópont tulajdonságainak vagy címkéinek frissítésére. Adjunk hozzá futásteljesítményt a teslánkhoz:

Eredmény eredménye = graphDb.execute ("MATCH (car: Car)" + "WHERE car.make = 'tesla'" + "SET car.milage = 120" + "SET car: Car: Electro" + "SET car.model = NULL "+" RETURN car ");

Itt adunk hozzá egy új tulajdonságot kilométer, módosítsa a címkéket mindkettővé Autó és Elektro és végül töröljük modell tulajdon összesen.

3.5. Csomópontok törlése

A DELETE kulcsszó használható a csomópontok vagy kapcsolatok állandó eltávolítására a grafikonról:

graphDb.execute ("MATCH (vállalat: Vállalat)" + "WHERE cég.név = 'Baeldung'" + "TÖRLÉS cég");

Itt töröltünk egy Baeldung nevű céget.

3.6. Paraméterkötés

A fenti példákban szigorúan kódolt paraméterértékek vannak, amelyek nem a legjobb gyakorlatok. Szerencsére, Neo4j lehetőséget biztosít a változók lekérdezéshez való kötésére:

Térképparaméterek = new HashMap (); params.put ("név", "baeldung"); params.put ("make", "tesla"); params.put ("modell", "modelS"); Eredmény eredménye = graphDb.execute ("CREATE (baeldung: Cég {name: $ name})" + "- [: tulajdonosa] -> (tesla: Car {make: $ make, model: $ model})" + "RETURN baeldung, tesla ", params);

4. Java illesztőprogram

Eddig a beágyazottal való interakciót kerestük Neo4j Például nagy valószínűséggel a gyártáshoz önálló kiszolgálót szeretnénk futtatni, és csatlakozni kell hozzá egy biztosított illesztőprogramon keresztül. Először hozzá kell adnunk egy másik függőséget a mavenünkhöz pom.xml:

 org.neo4j.driver neo4j-java-driver 1.6.2 

Ezt a linket követve ellenőrizheti az illesztőprogram legújabb verzióját.

Most létrehozhatunk egy kapcsolatot:

Illesztőprogram-illesztőprogram = GraphDatabase.driver ("bolt: // localhost: 7687", AuthTokens.basic ("neo4j", "12345"));

Ezután hozzon létre egy munkamenetet:

Munkamenet = driver.session ();

Végül futtathatunk néhány kérdést:

session.run ("CREATE (baeldung: Vállalkozás {név: \" Baeldung \ "})" + "- [: birtokolja] -> (tesla: Autó {make: 'tesla', modell: 'modelX'})" + "RETURN baeldung, tesla");

Miután végeztünk minden munkánkkal, be kell zárnunk mind a munkamenetet, mind az illesztőprogramot:

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

5. JDBC illesztőprogram

Lehetőség van interakcióra is Neo4j JDBC illesztőprogramon keresztül. Még egy függőség a miénktől pom.xml:

 org.neo4j neo4j-jdbc-driver 3.4.0 

Az illesztőprogram legújabb verziójának letöltéséhez kövesse ezt a linket.

Ezután hozzunk létre egy JDBC kapcsolatot:

Kapcsolat con = DriverManager.getConnection ("jdbc: neo4j: bolt: // localhost /? User = neo4j, jelszó = 12345, séma = alap");

Itt con egy normál JDBC kapcsolat, amely utasítások vagy előkészített utasítások létrehozására és végrehajtására használható:

try (Nyilatkozat stmt = con. stmt.execute ("CREATE (baeldung: Cég {név: \" Baeldung \ "})" + "- [: birtokolja] -> (tesla: Autó {make: 'tesla', modell: 'modelX'}) "+" RETURN baeldung, tesla ") ResultSet rs = stmt.executeQuery (" MATCH (vállalat: Vállalat) - [: birtokolja] -> (autó: Autó) "+" WHERE car.make = 'tesla 'és car.model =' modelX '"+" RETURN cégnév "); while (rs.next ()) {rs.getString (" company.name ");}}

6. Objektum-grafikon-leképezés

Az Object-Graph-Mapping vagy az OGM olyan technika, amely lehetővé teszi számunkra, hogy domain POJO-kat entitásként használjuk a Neo4j adatbázis. Vizsgáljuk meg, hogyan működik ez. Az első lépés, mint általában, új függőségeket ad hozzá a sajátjainkhoz pom.xml:

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

Az OGM Core Link és az OGM Embedded Driver Link használatával ellenőrizheti a könyvtárak legújabb verzióit.

Másodszor POJO-kat OGM-feljegyzésekkel fűzzük:

@NodeEntity public class Company {private Long id; privát karakterlánc neve; @Relationship (type = "owns") magánautó; } @NodeEntity public class Car {private Long id; privát húr gyártmány; @Relationship (direction = "INCOMING") zártkörű társaság; }

@NodeEntity tájékoztat Neo4j hogy ezt az objektumot egy csomópontnak kell képviselnie a kapott grafikonban. @Kapcsolat kommunikálja a kapcsolat létrejöttének szükségességét a kapcsolódó típust képviselő csomóponttal. Ebben az esetben a vállalat tulajdonosa a autó.

Kérjük, vegye figyelembe, hogy Neo4j megköveteli, hogy minden entitás rendelkezzen elsődleges kulccsal, megnevezett mezővel id alapértelmezés szerint felveszik. Egy alternatív nevű mezőt fel lehet használni, ha azt annotáljuk @Id @GeneratedValue.

Ezután létre kell hoznunk egy olyan konfigurációt, amelyet a rendszerindításhoz használunk Neo4j’S OGM. Az egyszerűség kedvéért használjunk beágyazott, csak memóriában tárolt adatbázist:

Configuration conf = new Configuration.Builder (). Build ();

Ezt követően inicializáljuk SessionFactory az általunk létrehozott konfigurációval és egy csomagnévvel, amelyben a jegyzetelt POJO-jaink találhatók:

SessionFactory gyár = new SessionFactory (conf, "com.baeldung.graph");

Végül létrehozhatunk egy Ülés és kezdje el használni:

Munkamenet = gyár.openSession (); Car tesla = new Car ("tesla", "modelS"); Baeldung vállalat = új vállalat ("baeldung"); baeldung.setCar (tesla); session.save (baeldung);

Itt kezdeményeztünk egy munkamenetet, létrehoztuk a POJO-kat és felkértük az OGM munkamenetet, hogy tartsa fenn őket. Neo4j Az OGM futásidejű objektumok átlátszóan átalakították az objektumok halmazává Rejtjelez lekérdezések, amelyek megfelelő csomópontokat és éleket hoztak létre az adatbázisban.

Ha ez a folyamat ismerősnek tűnik, az azért van! A JPA pontosan így működik, az egyetlen különbség az, hogy az objektumokat lefordítják-e sorokba, amelyek megmaradnak RDBMS-ként, vagy csomópontok és élek sorozata fennmarad-e egy gráf adatbázisban.

7. Következtetés

Ez a cikk a Neo4j gráf-orientált adatbázis néhány alapját vizsgálta.

Mint mindig, ebben az írásban szereplő kód is elérhető a Githubon.