Úvod do Java API OrientDB
1. Prehľad
OrientDB je open source databázová technológia Multi-Model NoSQL určená na prácu s modelmi Graph, Document, Key-Value, GeoSpatial a Reactive pri správe dotazov pomocou syntaxe SQL.
V tomto článku sa budeme zaoberať nastavením a používaním rozhraní API OrientDB Java.
2. Inštalácia
Najskôr musíme nainštalovať binárny balík.
Stiahnime si najnovšiu stabilnú verziu OrientDB (2.2.x v čase písania tohto článku).
Po druhé, musíme ho rozbaliť a presunúť jeho obsah do pohodlného adresára (pomocou ORIENTDB_HOME). Nezabudnite pridať kôš priečinok do premenných prostredia pre akékoľvek jednoduché použitie príkazového riadku.
Nakoniec musíme upraviť orientdb.sh súbor nachádzajúci sa v $ ORIENTDB_HOME / bin vyplnením miesta (ORIENTDB_HOME) adresára OrientDB namiesto ORIENTDB_DIR a tiež používateľa systému, ktorého by sme chceli použiť namiesto USER_YOU_WANT_ORIENTDB_RUN_WITH.
Teraz máme plne funkčný OrientDB. Môžeme použiť orientdb.sh skript s možnosťami:
- začať: na spustenie servera
postavenie : skontrolovať stav
- zastav : zastavenie servera
Upozorňujeme, že oboje začať a zastav akcie vyžadujú heslo používateľa (heslo, ktoré sme nastavili v orientdb.sh spis).
Akonáhle je server spustený, obsadí port 2480. Preto k nemu môžeme pristupovať lokálne pomocou tohto URL:
Viac podrobností o manuálnej inštalácii nájdete tu.
Poznámka: OrientDB vyžaduje Javu verzie 1.7 alebo vyššej.
Predchádzajúce verzie sú k dispozícii tu.
3. Nastavenie API rozhrania OrientDB Java
OrientDB umožňuje vývojárom Java pracovať s tromi rôznymi API, ako sú:
- Graph API - databázy grafov
- Document API - dokumentárne databázy
- Object API - objekty, ktoré sú naviazané priamo na dokument OrientDB
Všetky tieto typy môžeme použiť v rámci jednej kódovej základne iba integráciou a použitím OrientDB.
Pozrime sa na niekoľko dostupných téglikov, ktoré môžeme zahrnúť do triedy projektu:
- orientdb-core - *. jar: prináša základnú knižnicu
- plány-jadro - *. jar: priniesť základné komponenty adaptérov
- orientdb-graphdb - *. jar: dáva API databázy Graph
- orientdb-objekt - *. jar: poskytuje API databázy objektov
- orientdb-distribuované - *. jar: poskytuje doplnok distribuovanej databázy na prácu so serverovým klastrom
- orientdb-tools - *. jar: odovzdá príkaz konzoly
- orientdb-client - *. jar: poskytuje vzdialeného klienta
- orientdb-enterprise - *. jar: umožňuje protokol a sieťové triedy zdieľané klientom a serverom
Posledné dve sú povinné, iba ak spravujeme naše údaje na vzdialenom serveri.
Začnime s projektom Maven a používajme nasledujúce závislosti:
com.orientechnologies orientdb-core 2.2.31 com.orientechnologies orientdb-graphdb 2.2.31 com.orientechnologies orientdb-core 2.2.31 com.tinkerpop.blueprints blueprints-core 2.6.0
Skontrolujte prosím repozitár Maven Central, kde nájdete najnovšie verzie Core, GraphDB, Object API a Blueprints-Core v OrientDB.
4. Použitie
OrientDB používa na prácu s grafmi implementáciu TinkerPop Blueprints.
TinkerPop je grafický výpočtový rámec, ktorý poskytuje mnoho spôsobov budovania databáz grafov, kde každý z nich má svoje implementácie:
- Plány
- Rúry
- Gremlin
- Rexster
- Zdvojnásobenie plachiet
Okrem toho OrientDB umožňuje pracovať s tromi druhmi schém bez ohľadu na typ API:
- Schema-Full - prísny režim je povolený, takže všetky polia sú zadané počas vytvárania triedy
- Schema-Less - triedy sú vytvárané bez konkrétnej vlastnosti, takže ich môžeme pridávať, ako chceme; je to predvolený režim
- Schema-Hybrid - je to zmes schém a úplných a bez schém, kde môžeme vytvoriť triedu s preddefinovanými poľami, ale nechať záznam definovať ďalšie vlastné
4.1. Graph API
Pretože sa jedná o databázu založenú na grafoch, dáta sú reprezentované ako sieť obsahujúca vrcholy (uzly) prepojené hranami (oblúky).
Ako prvý krok použijeme UI na vytvorenie databázy Graph s názvom BaeldungDB s používateľom admin a heslo admin.
Ako vidíme na nasledujúcom obrázku, graf bol vybraný ako typ databázy, takže jeho údaje budú následne prístupné v GRAF tab:
Poďme sa teraz pripojiť k požadovanej databáze s vedomím, že ORIENTDB_HOME je premenná prostredia, ktorá zodpovedá inštalačnému priečinku systému Windows OrientDB:
@BeforeClass public static void setup () {String orientDBFolder = System.getenv ("ORIENTDB_HOME"); graph = new OrientGraphNoTx ("plocal:" + orientDBFolder + "/ databases / BaeldungDB", "admin", "admin"); }
Začnime Článok, Autora Editor triedy - zatiaľ čo ukazuje, ako pridať overenie do svojich polí:
@BeforeClass public static void init () {graph.createVertexType ("článok"); OrientVertexType writerType = graph.createVertexType ("Spisovateľ"); writerType.setStrictMode (true); writerType.createProperty ("meno", OType.STRING); // ... OrientVertexType authorType = graph.createVertexType ("Autor", "Spisovateľ"); authorType.createProperty ("level", OType.INTEGER) .setMax ("3"); OrientVertexType editorType = graph.createVertexType ("Editor", "Spisovateľ"); editorType.createProperty ("level", OType.INTEGER) .setMin ("3"); Vrchol vEditor = graph.addVertex ("trieda: editor"); vEditor.setProperty ("meno", "Maxim"); // ... Vertex vAuthor = graph.addVertex ("class: Author"); vAuthor.setProperty ("meno", "Jerome"); // ... Vertex vArticle = graph.addVertex ("class: Article"); vArticle.setProperty ("title", "Úvod do ..."); // ... graph.addEdge (null, vAuthor, vEditor, "has"); graph.addEdge (null, vAuthor, vArticle, "napísal"); }
V úryvku kódu vyššie sme vytvorili jednoduchú reprezentáciu našej jednoduchej databázy, kde:
- Článok je trieda bez schémy, ktorá obsahuje články
- Spisovateľ je super-trieda plná schémy, ktorá obsahuje potrebné informácie o pisateľovi
- Spisovateľ je podtyp Autor ktorý drží svoje detaily
- Editor je podtyp bez schémy Spisovateľ ktorý obsahuje podrobnosti editora
- priezvisko pole nebolo vyplnené uloženým autorom, ale stále sa zobrazuje v nasledujúcom grafe
- medzi všetkými triedami máme vzťah: an Autor môže písať Článok a musí mať Editor
- Vrchol predstavuje entitu s niektorými poľami
- Hrana je subjekt, ktorý spája dva Vrcholy
Vezmite prosím na vedomie, že pri pokuse o pridanie ďalšej vlastnosti k objektu celej triedy skončíme s OValidationException.
Po pripojení k našej databáze pomocou štúdia OrientDB sa zobrazí grafická reprezentácia našich údajov:
Pozrime sa, ako mať počet všetkých záznamov (vrcholov) databázy:
dlha velkost = graph.countVertices ();
Teraz si ukážeme iba počet Spisovateľ (autor a redaktor) objekty:
@Test public void givenBaeldungDB_checkWeHaveTwoWriters () {long size = graph.countVertices ("Writer"); assertEquals (2, veľkosť); }
V ďalšom kroku môžeme nájsť všetky SpisovateľÚdajov pomocou tohto vyhlásenia:
Iterovateľní autori = graph.getVerticesOfClass ("Writer");
Na záver sa poďme dopytovať za všetkých EditorJe s úrovni 7; tu máme iba jednu, ktorá sa zhoduje:
@Test public void givenBaeldungDB_getEditorWithLevelSeven () {String onlyEditor = ""; pre (Vertex v: graph.getVertices ("Editor.level", 7)) {onlyEditor = v.getProperty ("firstName"). toString (); } assertEquals ("Maxim", onlyEditor); }
Názov triedy je vždy zadaný, aby sa pri vyžiadaní vyhľadal konkrétny vrchol. Viac podrobností nájdete tu.
4.2. Document API
Ďalšou možnosťou je použitie modelu dokumentu OrientDB. To vystavuje manipuláciu s dátami prostredníctvom jednoduchého záznamu s informáciami uloženými v poliach, kde by typom mohol byť text, obrázok alebo binárna forma.
Poďme znova použiť UI na vytvorenie databázy s názvom BaeldungDBTwo, ale teraz s dokument ako typ:
Poznámka: Rovnako je možné toto API tiež použiť v režime úplnej schémy, schémy bez schémy alebo hybridnej schémy.
Pripojenie k databáze zostáva priame, pretože potrebujeme iba vytvoriť inštanciu ODatabaseDocumentTx objekt, zadajte adresu URL databázy a poverenia používateľa databázy:
@BeforeClass public static void setup () {String orientDBFolder = System.getenv ("ORIENTDB_HOME"); db = new ODatabaseDocumentTx ("plocal:" + orientDBFolder + "/ databases / BaeldungDBTwo") .open ("admin", "admin"); }
Začnime ukladaním jednoduchého dokumentu, ktorý obsahuje Autor informácie.
Tu vidíme, že trieda bola vytvorená automaticky:
@Test public void givenDB_whenSavingDocument_thenClassIsAutoCreated () {ODocument doc = nový ODocument ("autor"); doc.field ("meno", "Paul"); doc.save (); assertEquals ("Autor", doc.getSchemaClass (). getName ()); }
Podľa toho počítať počet Autori, môžeme použiť:
long size = db.countClass ("Autor");
Poďme znova vyhľadať dokumenty pomocou hodnoty poľa a vyhľadať AutorObjekty s úrovni 7:
@Test public void givenDB_whenSavingAuthors_thenWeGetOnesWithLevelSeven () {for (ODocument author: db.browseClass ("Author")) author.delete (); ODocument authorOne = nový ODocument ("Autor"); authorOne.field ("meno", "Lev"); authorOne.field ("úroveň", 7); authorOne.save (); ODocument authorTwo = nový ODocument („autor“); authorTwo.field ("meno", "Lucien"); authorTwo.field ("úroveň", 9); authorTwo.save (); Zoznam výsledkov = db.query (nový OSQLSynchQuery ("vyberte * od autora, kde úroveň = 7")); assertEquals (1, result.size ()); }
Rovnako tak sa odstránia všetky záznamy o Autor triedy, môžeme použiť:
pre (ODocument autor: db.browseClass ("Autor")) {author.delete (); }
V štúdiu OrientDB PREHLIADAŤ tab môžeme urobiť dotaz, aby sme dostali všetky naše Autor 's objekty:
4.3. Object API
OrientDB nemá objektový typ databázy. Object API sa teda spolieha na databázu dokumentov.
V type Object API zostávajú všetky ostatné koncepty rovnaké, len s jedným doplnkom - väzbou na POJO.
Začnime pripojením k BaeldungDBThree pomocou OObjectDatabaseTx trieda:
@BeforeClass public static void setup () {String orientDBFolder = System.getenv ("ORIENTDB_HOME"); db = new OObjectDatabaseTx ("plocal:" + orientDBFolder + "/ databases / BaeldungDBThree") .open ("admin", "admin"); }
Ďalej za predpokladu, že Autor je POJO používaný na držanie Autor údaje, musíme ich zaregistrovať:
db.getEntityManager (). registerEntityClass (Author.class);
Autor má vyhľadávače a nastavovače pre nasledujúce polia:
- krstné meno
- priezvisko
- úrovni
Vytvorme Autor s viacriadkovými pokynmi, ak sme uznali konštruktora no-arg:
Autor autor = db.newInstance (Author.class); author.setFirstName ("Lukáš"); author.setLastName ("Sky"); autor.setLevel (9); db.save (autor);
Na druhej strane, ak máme iného konštruktora, ktorý vezme krstné meno, priezviskoa úrovni z Autor inštancia je iba jeden riadok:
Autor autor = db.newInstance (Author.class, "Luke", "Sky", 9); db.save (autor);
Nasledujúce riadky slúžia na prehliadanie a mazanie všetkých záznamov triedy Author:
pre (Autor autor: db.browseClass (Author.class)) {db.delete (autor); }
Aby sme mohli spočítať všetkých autorov, stačí zadať triedu a inštanciu databázy bez nutnosti písať dotaz SQL:
dlhý autorCount = db.countClass (Author.class);
Podobne dopytujeme autorov pomocou úrovni Takto 7:
@Test public void givenDB_whenSavingAuthors_thenWeGetOnesWithLevelSeven () {for (Author author: db.browseClass (Author.class)) {db.delete (author); } Autor authorOne = db.newInstance (Author.class, "Lev", "Marta", 7); db.save (authorOne); Autor authorTwo = db.newInstance (Author.class, "Lucien", "Aurelien", 9); db.save (authorTwo); Zoznam výsledkov = db.query (nový OSQLSynchQuery ("vyberte * od autora, kde úroveň = 7")); assertEquals (1, result.size ()); }
Nakoniec je to oficiálny sprievodca, ktorý predstavuje niektoré pokročilé použitia rozhrania Object API.
5. Záver
V tomto článku sme videli, ako používať OrientDB ako systém správy databáz s jeho Java API. Tiež sme sa naučili, ako pridať overenie na polia a napísať niekoľko jednoduchých otázok.
Zdrojový kód tohto článku nájdete ako vždy na serveri GitHub.