Introduksjon til OrientDB Java APIer

1. Oversikt

OrientDB er en åpen kildekode Multi-Model NoSQL-databaseteknologi designet for å fungere med Graph, Document, Key-Value, GeoSpatial og Reactive-modeller mens du håndterer spørsmål med SQL-syntaks.

I denne artikkelen vil vi dekke oppsettet og bruke OrientDB Java API-ene.

2. Installasjon

For det første må vi installere binærpakken.

La oss laste ned den siste stabile versjonen av OrientDB (2.2.x når vi skriver denne artikkelen).

For det andre må vi pakke den ut og flytte innholdet til en praktisk katalog (ved hjelp av ORIENTDB_HOME). Husk å legge til søppel mappen til miljøvariablene for enkel kommandolinjebruk.

Til slutt må vi redigere orientdb.sh filen ligger i $ ORIENTDB_HOME / søppel ved å fylle ut stedet (ORIENTDB_HOME) av OrientDB-katalogen i stedet for ORIENTDB_DIR og også systembrukeren vi vil bruke i stedet for USER_YOU_WANT_ORIENTDB_RUN_WITH.

Nå har vi fått et fullt fungerende OrientDB. Vi kan bruke orientdb.sh skript med alternativer:

  • start: for å starte serveren
  • status : for å sjekke statusen

  • Stoppe : for å stoppe serveren

Vær oppmerksom på at begge start og Stoppe handlinger krever brukerpassordet (det vi setter opp i orientdb.sh fil).

Når serveren er lansert, vil den okkupere porten 2480. Derfor kan vi få tilgang til den lokalt ved hjelp av dette URL:

Flere detaljer om manuell installasjon finner du her.

Merk: OrientDB krever Java versjon 1.7 eller nyere.

Tidligere versjoner er tilgjengelig her.

3. OrientDB Java API-oppsett

OrientDB lar Java-utviklere jobbe med tre forskjellige APIer, for eksempel:

  • Graph API - grafdatabaser
  • Document API - dokumentorienterte databaser
  • Object API - objekter som er bundet direkte til OrientDB Document

Vi kan bruke alle disse typene innen en enkelt kodebase bare ved å integrere og bruke OrientDB.

La oss ta en titt på noen tilgjengelige krukker vi kan inkludere i klassestien til prosjektet:

  • orientdb-core - *. krukke: bringer kjernebiblioteket
  • tegninger-kjerne - *. krukke: for å få adapterens kjernekomponenter
  • orientdb-graphdb - *. jar: gir API til Graph-databasen
  • orientdb-objekt - *. krukke: gir Object database API
  • orientdb-distribuert - *. krukke: gir det distribuerte databaseprogrammet til å fungere med en serverklynge
  • orientdb-verktøy - *. krukke: overleverer konsollkommandoen
  • orientdb-client - *. jar: gir den eksterne klienten
  • orientdb-enterprise - *. jar: aktiverer protokollen og nettverksklassene som deles av klienten og serveren

De to siste er bare påkrevd hvis vi administrerer dataene våre på en ekstern server.

La oss starte med et Maven-prosjekt og bruke følgende avhengigheter:

 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 

Vennligst sjekk Maven Central repository for de nyeste versjonene av OrientDBs Core, GraphDB, Object APIer og Blueprints-Core.

4. Bruk

OrientDB bruker implementeringen av TinkerPop Blueprints for å jobbe med grafer.

TinkerPop er et Graph Computing Framework som gir mange måter å bygge grafdatabaser, hvor hver av dem har sine implementeringer:

  • Tegninger
  • Rør
  • Gremlin
  • Rexster
  • Seilutvikling

Videre tillater OrientDB å jobbe med de tre typer skjemaer uavhengig av type API:

  • Schema-Full - streng modus er aktivert, så alle feltene spesifiseres under opprettelsen av klassen
  • Schema-Less - klasser er opprettet uten spesifikke egenskaper, slik at vi kan legge dem til som vi vil; det er standardmodus
  • Schema-Hybrid - det er en blanding av skjema-fullt og skjema-mindre der vi kan lage en klasse med forhåndsdefinerte felt, men la posten definere andre tilpassede

4.1. Graf-API

Siden dette er en grafbasert database, blir data representert som et nettverk som inneholder hjørner (noder) sammenkoblet av kanter (buer).

Som et første trinn, la oss bruke brukergrensesnittet til å opprette en grafdatabase kalt BaeldungDB med en bruker admin og passord admin.

Som vi ser i det påfølgende bildet, er kurve har blitt valgt som databasetype, så følgelig vil dataene være tilgjengelige i GRAFISK Tab:

La oss nå koble til ønsket database, vel vitende om at ORIENTDB_HOME er en miljøvariabel som tilsvarer installasjonsmappen til OrientDB:

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

La oss starte Artikkel, Forfatter, og Redaktør klasser - mens du viser hvordan du legger til validering i sine felt:

@BeforeClass public static void init () {graph.createVertexType ("Article"); OrientVertexType writerType = graph.createVertexType ("Writer"); writerType.setStrictMode (true); writerType.createProperty ("fornavn", OType.STRING); // ... OrientVertexType authorType = graph.createVertexType ("Forfatter", "Forfatter"); authorType.createProperty ("level", OType.INTEGER) .setMax ("3"); OrientVertexType editorType = graph.createVertexType ("Editor", "Writer"); editorType.createProperty ("level", 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: artikkel"); vArticle.setProperty ("tittel", "Introduksjon til ..."); // ... graph.addEdge (null, vAuthor, vEditor, "har"); graph.addEdge (null, vAuthor, vArticle, "skrev"); }

I kodebiten ovenfor laget vi en enkel fremstilling av vår enkle database der:

  • Artikkel er den skjemafrie klassen som inneholder artikler
  • Forfatter er en skjemafull superklasse som inneholder nødvendig forfatterinformasjon
  • Forfatter er en undertype av Forfatter som holder detaljene
  • Redaktør er en skjemafri undertype av Forfatter som inneholder redaktørdetaljer
  • etternavn feltet er ikke fylt ut i den lagrede forfatteren, men vises fremdeles i følgende graf
  • vi har et forhold mellom alle klasser: an Forfatter kan skrive Artikkel og trenger å ha en Redaktør
  • Vertex representerer en enhet med noen felt
  • Kant er en enhet som kobler to Hjørner

Vær oppmerksom på at ved å prøve å legge til en annen eiendom til et objekt av en full klasse, vil vi ende opp med OValidationException.

Etter å ha koblet til databasen vår ved hjelp av OrientDB studio, ser vi grafrepresentasjonen av dataene våre:

La oss se hvordan du kan ha antall poster (vertices) i databasen:

lang størrelse = graph.countVertices ();

La oss bare vise antall Forfatter (forfatter og redaktør) gjenstander:

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

I neste trinn kan vi finne alt ForfatterSine data, ved hjelp av følgende utsagn:

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

Til slutt, la oss spørre etter alle Redaktør‘S med nivå 7; her har vi bare en som passer:

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

Klassenavnet er alltid spesifisert for å se etter en bestemt toppunkt når du ber om det. Vi finner flere detaljer her.

4.2. Dokument-API

Neste alternativ er å bruke OrientDBs dokumentmodell. Dette eksponerer datamanipulering via en enkel post med informasjon lagret i felt der typen kan være tekst, bilde eller binær form.

La oss bruke brukergrensesnittet igjen for å opprette en database som heter BaeldungDBTwo, men nå med en dokument som type:

Merk: På samme måte kan denne API også brukes enten i skjema-full, skjema-fri eller skjema-hybrid-modus.

Databaseforbindelsen forblir grei, ettersom vi bare trenger å starte en ODatabaseDocumentTx objekt, oppgi databasens URL og databasebrukerens legitimasjon:

@BeforeClass offentlig statisk ugyldig oppsett () {String orientDBFolder = System.getenv ("ORIENTDB_HOME"); db = new ODatabaseDocumentTx ("plocal:" + orientDBFolder + "/ databases / BaeldungDBTwo") .open ("admin", "admin"); }

La oss begynne med å lagre et enkelt dokument som inneholder en Forfatter informasjon.

Her kan vi se at klassen er opprettet automatisk:

@Test offentlig ugyldighet gittDB_whenSavingDocument_thenClassIsAutoCreated () {ODocument doc = new ODocument ("Author"); doc.field ("navn", "Paul"); doc.save (); assertEquals ("Forfatter", doc.getSchemaClass (). getName ()); }

Følgelig å telle antall Forfattere, Vi kan bruke:

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

La oss spørre om dokumenter igjen ved hjelp av en feltverdi for å søke etter Forfatter’S objekter med nivå 7:

@Test public void givenDB_whenSavingAuthors_thenWeGetOnesWithLevelSeven () {for (ODocument author: db.browseClass ("Author")) author.delete (); ODocument authorOne = nytt ODocument ("Forfatter"); authorOne.field ("fornavn", "Leo"); authorOne.field ("nivå", 7); authorOne.save (); ODocument authorTwo = nytt ODocument ("Forfatter"); authorTwo.field ("fornavn", "Lucien"); authorTwo.field ("nivå", 9); authorTwo.save (); Listeresultat = db.query (ny OSQLSynchQuery ("velg * fra forfatter hvor nivå = 7")); assertEquals (1, result.size ()); }

Likeledes å slette alle postene til Forfatter klasse, kan vi bruke:

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

På OrientDB-studioene Bla gjennom fanen vi kan gjøre et spørsmål for å få alle våre Forfatter's objekter:

4.3. Objekt-API

OrientDB har ikke objekttypen database. Dermed er Object API avhengig av en dokumentdatabase.

I Object API-typen forblir alle andre konsepter de samme med bare ett tillegg - bindende til POJO.

La oss starte med å koble til BaeldungDBTre ved å bruke OObjectDatabaseTx klasse:

@BeforeClass offentlig statisk ugyldig oppsett () {String orientDBFolder = System.getenv ("ORIENTDB_HOME"); db = new OObjectDatabaseTx ("plocal:" + orientDBFolder + "/ databases / BaeldungDBThree") .open ("admin", "admin"); }

Neste, ved å anta at Forfatter er POJO brukt til å holde en Forfatter data, må vi registrere det:

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

Forfatter har getters og settere for følgende felt:

  • fornavn
  • etternavn
  • nivå

La oss lage en Forfatter med flerlinjeinstruksjoner hvis vi anerkjente en konstruktør uten argumenter:

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

På den annen side, hvis vi har en annen konstruktør som tar fornavn, etternavn, og nivå av Forfatter henholdsvis er instantieringen bare en linje:

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

Følgende linjer bruker for å bla gjennom og slette alle postene i forfatterklassen:

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

For å telle alle forfattere, må vi bare oppgi klassen og databaseforekomsten uten å måtte skrive et SQL-spørsmål:

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

På samme måte spør vi forfattere med nivå 7 slik:

@Test offentlig ugyldig gittDB_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 (Forfatter.klasse, "Lucien", "Aurelien", 9); db.save (authorTwo); Listeresultat = db.query (ny OSQLSynchQuery ("velg * fra forfatter hvor nivå = 7")); assertEquals (1, result.size ()); }

Til slutt er dette den offisielle guiden som introduserer noen avanserte Object API-bruksområder.

5. Konklusjon

I denne artikkelen har vi sett hvordan du bruker OrientDB som et databasestyringssystem med sine Java API-er. Vi lærte også hvordan du legger til validering på feltene og skriver noen enkle spørsmål.

Som alltid kan kildekoden for denne artikkelen finnes på GitHub.


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