Introduktion til OrientDB Java API'er

1. Oversigt

OrientDB er en open source Multi-Model NoSQL-databaseteknologi designet til at arbejde med graf-, dokument-, nøgleværdi-, GeoSpatial- og reaktive modeller, mens du administrerer forespørgsler med SQL-syntaks.

I denne artikel dækker vi opsætningen og bruger OrientDB Java API'erne.

2. Installation

For det første skal vi installere den binære pakke.

Lad os downloade den seneste stabile version af OrientDB (2.2.x ved skrivning af denne artikel).

For det andet er vi nødt til at pakke det ud og flytte dets indhold til en praktisk mappe (ved hjælp af ORIENTDB_HOME). Sørg for at tilføje beholder mappe til miljøvariablerne til enhver let kommandolinjebrug.

Endelig skal vi redigere orientdb.sh fil placeret i $ ORIENTDB_HOME / bin ved at udfylde placeringen (ORIENTDB_HOME) af OrientDB-biblioteket i stedet for ORIENTDB_DIR og også den systembruger, vi gerne vil bruge i stedet for USER_YOU_WANT_ORIENTDB_RUN_WITH.

Nu har vi en fuldt fungerende OrientDB. Vi kan bruge orientdb.sh script med valgmuligheder:

  • Start: for at starte serveren
  • status : for at kontrollere status

  • hold op : for at stoppe serveren

Bemærk, at begge Start og hold op handlinger kræver brugeradgangskoden (den, vi oprettede i orientdb.sh fil).

Når serveren er lanceret, besætter den porten 2480. Derfor kan vi få adgang til den lokalt ved hjælp af dette URL:

Flere detaljer om manuel installation kan findes her.

Bemærk: OrientDB kræver Java version 1.7 eller nyere.

Tidligere versioner er tilgængelige her.

3. OrientDB Java API-opsætning

OrientDB tillader Java-udviklere at arbejde med tre forskellige API'er, såsom:

  • Graph API - grafdatabaser
  • Document API - dokumentorienterede databaser
  • Object API - objekter, der er bundet direkte til OrientDB Document

Vi kan bruge alle disse typer inden for en enkelt codebase bare ved at integrere og bruge OrientDB.

Lad os se på nogle tilgængelige krukker, vi kan medtage i projektets klassesti:

  • orientdb-core - *. krukke: bringer kernebiblioteket
  • tegninger-kerne - *. krukke: at bringe adapterens kernekomponenter
  • orientdb-graphdb - *. jar: giver Graph database API
  • orientdb-objekt - *. jar: leverer Object database API
  • orientdb-distribueret - *. krukke: giver det distribuerede database-plugin til at arbejde med en serverklynge
  • orientdb-tools - *. jar: afleverer konsolkommandoen
  • orientdb-client - *. jar: giver fjernklienten
  • orientdb-enterprise - *. jar: aktiverer protokollen og netværksklasser, der deles af klienten og serveren

De to sidste kræves kun, hvis vi administrerer vores data på en ekstern server.

Lad os starte med et Maven-projekt og bruge følgende afhængigheder:

 com.orientechnologies orientdb-core 2.2.31 com.orientechnologies orientdb-graphdb 2.2.31 com.orientechnologies orientdb-object 2.2.31 com.tinkerpop.blueprints blueprints-core 2.6.0 

Se Maven Central-arkivet for de nyeste versioner af OrientDBs Core, GraphDB, Object API'er og Blueprints-Core.

4. Anvendelse

OrientDB bruger implementeringen af ​​TinkerPop Blueprints til at arbejde med grafer.

TinkerPop er en Graph Computing Framework, der giver mange måder at opbygge grafdatabaser på, hvor hver af dem har sine implementeringer:

  • Tegninger
  • Rør
  • Gremlin
  • Rexster
  • Sejlforlængelse

Desuden tillader OrientDB at arbejde med de tre slags skemaer uanset typen af ​​API:

  • Skema-fuld - streng tilstand er aktiveret, så alle felterne er specificeret under oprettelse af klasse
  • Skema-mindre - klasser oprettes uden nogen specifik egenskab, så vi kan tilføje dem, som vi ønsker; det er standardtilstand
  • Skema-hybrid - det er en blanding af skema-fuld og skema-mindre, hvor vi kan oprette en klasse med foruddefinerede felter, men lad posten definere andre brugerdefinerede

4.1. Graf API

Da dette er en grafbaseret database, repræsenteres data som et netværk, der indeholder hjørner (noder), der er forbundet med kanter (buer).

Lad os som et første trin bruge brugergrænsefladen til at oprette en grafdatabase kaldet BaeldungDB med en bruger admin og adgangskode admin.

Som vi ser i det efterfølgende billede, er kurve er valgt som databasetype, så dens data vil derfor være tilgængelige i GRAF fane:

Lad os nu oprette forbindelse til den ønskede database, idet vi ved, at ORIENTDB_HOME er en miljøvariabel, der svarer til installationsmappen for OrientDB:

@BeforeClass offentlig statisk ugyldig opsætning () {String orientDBFolder = System.getenv ("ORIENTDB_HOME"); graf = ny OrientGraphNoTx ("plokal:" + orientDBFolder + "/ databaser / BaeldungDB", "admin", "admin"); }

Lad os indlede Artikel, Forfatterog Redaktør klasser - mens du viser, hvordan du tilføjer validering til deres felter:

@BeforeClass offentlig statisk ugyldig init () {graph.createVertexType ("artikel"); OrientVertexType writerType = graph.createVertexType ("Writer"); writerType.setStrictMode (sand); writerType.createProperty ("fornavn", OType.STRING); // ... OrientVertexType authorType = graph.createVertexType ("Forfatter", "Forfatter"); authorType.createProperty ("niveau", OType.INTEGER) .setMax ("3"); OrientVertexType editorType = graph.createVertexType ("Editor", "Writer"); editorType.createProperty ("niveau", OType.INTEGER) .setMin ("3"); Vertex vEditor = graph.addVertex ("klasse: Editor"); vEditor.setProperty ("fornavn", "Maksim"); // ... Vertex vAuthor = graph.addVertex ("klasse: Forfatter"); vAuthor.setProperty ("fornavn", "Jerome"); // ... Vertex vArticle = graph.addVertex ("klasse: artikel"); vArticle.setProperty ("titel", "Introduktion til ..."); // ... graph.addEdge (null, vAuthor, vEditor, "har"); graph.addEdge (null, vAuthor, vArticle, "skrev"); }

I kodestykket ovenfor lavede vi en simpel gengivelse af vores enkle database, hvor:

  • Artikel er den skemafri klasse, der indeholder artikler
  • Forfatter er en skemafuld superklasse, der indeholder den nødvendige forfatterinformation
  • Forfatter er en undertype af Forfatter der holder sine detaljer
  • Redaktør er en skemafri undertype af Forfatter der indeholder redaktøroplysninger
  • efternavn felt er ikke udfyldt i den gemte forfatter, men vises stadig i følgende graf
  • vi har et forhold mellem alle klasser: an Forfatter kan skrive Artikel og skal have en Redaktør
  • Hvirvel repræsenterer en enhed med nogle felter
  • Edge er en enhed, der forbinder to Hjørner

Bemærk, at ved at prøve at føje en anden egenskab til et objekt i en fuld klasse, ender vi med OValidationException.

Efter at have oprettet forbindelse til vores database ved hjælp af OrientDB studio, ser vi grafrepræsentationen af ​​vores data:

Lad os se, hvordan man har antallet af alle poster (hjørner) i databasen:

lang størrelse = graph.countVertices ();

Lad os nu bare vise antallet af Forfatter (forfatter og redaktør) genstande:

@Test offentlig ugyldighed givenBaeldungDB_checkWeHaveTwoWriters () {long size = graph.countVertices ("Writer"); assertEquals (2, størrelse); }

I det næste trin kan vi finde alt Forfatter'S data ved hjælp af følgende udsagn:

Iterable forfattere = graph.getVerticesOfClass ("Writer");

Lad os endelig spørge til alle Redaktør'S med niveau 7; her har vi kun en der matcher:

@Test offentlig ugyldighed givenBaeldungDB_getEditorWithLevelSeven () {String onlyEditor = ""; til (Vertex v: graph.getVertices ("Editor.level", 7)) {onlyEditor = v.getProperty ("firstName"). toString (); } assertEquals ("Maxim", onlyEditor); }

Klassenavnet er altid angivet for at lede efter en bestemt hjørne, når der anmodes om det. Vi kan finde flere detaljer her.

4.2. Dokument API

Den næste mulighed er at bruge OrientDB's dokumentmodel. Dette eksponerer datamanipulation via en simpel post med information gemt i felter, hvor typen kan være tekst, billede eller en binær form.

Lad os bruge brugergrænsefladen igen til at oprette en database med navnet BaeldungDBTwo, men nu med en dokument som type:

Bemærk: ligeledes kan denne API også bruges enten i skema-fuld, skema-mindre eller skema-hybrid-tilstand.

Databaseforbindelsen forbliver ligetil, da vi bare skal starte en ODatabaseDocumentTx objekt, angiv databasens URL og databasebrugerens legitimationsoplysninger:

@BeforeClass offentlig statisk ugyldig opsætning () {String orientDBFolder = System.getenv ("ORIENTDB_HOME"); db = ny ODatabaseDocumentTx ("plokal:" + orientDBFolder + "/ databaser / BaeldungDBTwo"). open ("admin", "admin"); }

Lad os starte med at gemme et simpelt dokument, der indeholder en Forfatter Information.

Her kan vi se, at klassen automatisk er oprettet:

@Test offentligt ugyldigt givetDB_whenSavingDocument_thenClassIsAutoCreated () {ODocument doc = new ODocument ("Author"); doc.field ("navn", "Paul"); doc.save (); assertEquals ("Forfatter", doc.getSchemaClass (). getName ()); }

Følgelig at tælle antallet af Forfattere, kan vi bruge:

lang størrelse = db.countClass ("Forfatter");

Lad os forespørge på dokumenter igen ved hjælp af en feltværdi for at søge efter Forfatter'S genstande med niveau 7:

@Test offentligt ugyldigt givetDB_whenSavingAuthors_thenWeGetOnesWithLevelSeven () {for (ODokumentforfatter: db.browseClass ("Forfatter")) author.delete (); ODocument authorOne = nyt ODocument ("Forfatter"); authorOne.field ("fornavn", "Leo"); authorOne.field ("niveau", 7); authorOne.save (); ODocument authorTwo = nyt ODocument ("Forfatter"); authorTwo.field ("fornavn", "Lucien"); authorTwo.field ("niveau", 9); authorTwo.save (); Listeresultat = db.query (nyt OSQLSynchQuery ("vælg * fra forfatter hvor niveau = 7")); assertEquals (1, result.size ()); }

Ligeledes at slette alle optegnelser over Forfatter klasse, kan vi bruge:

for (ODocument forfatter: db.browseClass ("Forfatter")) {author.delete (); }

På OrientDB-studiet Fanen BROWSE vi kan lave en forespørgsel for at få alle vores Forfatter's objekter:

4.3. Objekt API

OrientDB har ikke objekttypen database. Object API er således afhængig af en dokumentdatabase.

I Object API-typen forbliver alle andre koncepter de samme med kun en tilføjelse - bindende til POJO.

Lad os starte med at oprette forbindelse til BaeldungDBThree ved hjælp af OObjectDatabaseTx klasse:

@BeforeClass offentlig statisk ugyldig opsætning () {String orientDBFolder = System.getenv ("ORIENTDB_HOME"); db = ny OObjectDatabaseTx ("plokal:" + orientDBFolder + "/ databaser / BaeldungDBThree"). open ("admin", "admin"); }

Dernæst ved at antage, at Forfatter bruges POJO til at holde en Forfatter data, skal vi registrere det:

db.getEntityManager (). registerEntityClass (Author.class);

Forfatter har getters og settere til følgende felter:

  • fornavn
  • efternavn
  • niveau

Lad os oprette en Forfatter med instruktioner med flere linjer, hvis vi anerkendte en konstruktør uden argus:

Forfatterforfatter = db.newInstance (Author.class); author.setFirstName ("Luke"); author.setLastName ("Sky"); author.setLevel (9); db.save (forfatter);

På den anden side, hvis vi har en anden konstruktør, der tager fornavn, efternavnog niveau af Forfatter henholdsvis er instantieringen kun en linje:

Forfatterforfatter = db.newInstance (Forfatterklasse, "Luke", "Sky", 9); db.save (forfatter);

Følgende linjer bruger til at gennemse og slette alle poster i forfatterklassen:

for (Forfatter forfatter: db.browseClass (Author.class)) {db.delete (forfatter); }

For at tælle alle forfattere er vi bare nødt til at give klassen og databaseinstansen uden behov for at skrive en SQL-forespørgsel:

lange authorCount = db.countClass (Author.class);

På samme måde spørger vi forfattere til niveau 7 som sådan:

@Test offentligt ugyldigt givetDB_whenSavingAuthors_thenWeGetOnesWithLevelSeven () {for (Forfatter forfatter: db.browseClass (Author.class)) {db.delete (forfatter); } Forfatter authorOne = db.newInstance (Author.class, "Leo", "Marta", 7); db.save (authorOne); Forfatter authorTwo = db.newInstance (Author.class, "Lucien", "Aurelien", 9); db.save (authorTwo); Listeresultat = db.query (nyt OSQLSynchQuery ("vælg * fra forfatter hvor niveau = 7")); assertEquals (1, result.size ()); }

Endelig er dette den officielle guide, der introducerer nogle avancerede Object API-anvendelser.

5. Konklusion

I denne artikel har vi set, hvordan man bruger OrientDB som et databasestyringssystem med dets Java API'er. Vi lærte også, hvordan man tilføjer validering på felterne og skriver nogle enkle forespørgsler.

Som altid kan kildekoden til denne artikel findes på GitHub.