Pengantar API Java OrientDB

1. Ikhtisar

OrientDB adalah teknologi database Multi-Model NoSQL open source yang dirancang untuk bekerja dengan model Graph, Document, Key-Value, GeoSpatial dan Reactive sambil mengelola kueri dengan sintaks SQL.

Pada artikel ini, kami akan membahas pengaturan dan menggunakan API Java OrientDB.

2. Instalasi

Pertama, kita perlu menginstal paket biner.

Mari unduh OrientDB versi stabil terbaru (2.2.x pada saat menulis artikel ini).

Kedua, kita perlu mengekstraknya dan memindahkan isinya ke direktori yang nyaman (menggunakan ORIENTDB_HOME ). Harap pastikan untuk menambahkan folder bin ke variabel lingkungan untuk kemudahan penggunaan baris perintah.

Terakhir, kita perlu mengedit file orientdb.sh yang terletak di $ ORIENTDB_HOME / bin dengan mengisi lokasi ( ORIENTDB_HOME ) dari direktori OrientDB di tempat ORIENTDB_DIR dan juga pengguna sistem yang ingin kita gunakan sebagai ganti USER_YOU_WANT_ORIENTDB_RUN_WITH .

Sekarang kami memiliki OrientDB yang berfungsi penuh. Kita dapat menggunakan skrip orientdb.sh dengan opsi:

  • mulai : untuk memulai server
  • status : untuk memeriksa status

  • stop : untuk menghentikan server

Harap dicatat bahwa tindakan memulai dan menghentikan membutuhkan kata sandi pengguna (yang kami siapkan di file orientdb.sh ).

Setelah server diluncurkan, itu akan menempati port 2480. Oleh karena itu kita dapat mengaksesnya secara lokal menggunakan URL ini :

Rincian lebih lanjut tentang penginstalan manual dapat ditemukan di sini.

Catatan: OrientDB membutuhkan Java versi 1.7 atau lebih tinggi.

Versi sebelumnya tersedia di sini.

3. Pengaturan OrientDB Java API

OrientDB memungkinkan pengembang Java untuk bekerja dengan tiga API berbeda seperti:

  • Graph API - database grafik
  • Document API - database berorientasi dokumen
  • Object API - objek yang terikat langsung ke Dokumen OrientDB

Kita dapat menggunakan semua tipe tersebut dalam satu basis kode hanya dengan mengintegrasikan dan menggunakan OrientDB.

Mari kita lihat beberapa toples yang tersedia yang dapat kita sertakan dalam classpath proyek:

  • orientdb-core - *. jar : menghadirkan perpustakaan inti
  • blueprints-core - *. jar : untuk menghadirkan komponen inti adaptor
  • orientdb-graphdb - *. jar : memberikan API basis data Grafik
  • orientdb-object - *. jar : melengkapi API database Objek
  • orientdb-didistribusikan - *. jar : menyediakan plugin database terdistribusi untuk bekerja dengan cluster server
  • orientdb-tools - *. jar : menyerahkan perintah konsol
  • orientdb-client - *. jar : menyediakan klien jarak jauh
  • orientdb-enterprise - *. jar : mengaktifkan kelas protokol dan jaringan yang digunakan bersama oleh klien dan server

Dua yang terakhir diperlukan hanya jika kita mengelola data kita di server jauh.

Mari kita mulai dengan proyek Maven dan menggunakan dependensi berikut:

 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 

Silakan periksa repositori Maven Central untuk versi terbaru dari OrientDB's Core, GraphDB, Object APIs dan Blueprints-Core.

4. Penggunaan

OrientDB menggunakan implementasi TinkerPop Blueprints untuk bekerja dengan grafik.

TinkerPop adalah Graph Computing Framework yang menyediakan banyak cara untuk membangun database grafik, di mana masing-masing memiliki implementasinya:

  • Cetak biru
  • Pipa
  • GREMLIN
  • Rexster
  • Ouplementasi Layar

Selain itu, OrientDB memungkinkan untuk bekerja dengan tiga jenis Skema apa pun jenis API-nya:

  • Schema-Full - mode ketat diaktifkan, jadi semua bidang ditentukan selama pembuatan kelas
  • Schema-Less - kelas dibuat tanpa properti khusus, jadi kita bisa menambahkannya sesuai keinginan; itu mode default
  • Schema-Hybrid - ini adalah campuran dari skema penuh dan tanpa skema di mana kita dapat membuat kelas dengan bidang yang telah ditentukan sebelumnya tetapi membiarkan catatan untuk menentukan yang khusus lainnya

4.1. API Grafik

Karena ini adalah database berbasis grafik, data direpresentasikan sebagai jaringan yang berisi Vertices (node) yang saling berhubungan oleh Edges (arcs).

Sebagai langkah pertama, mari gunakan UI untuk membuat database Grafik yang disebut BaeldungDB dengan admin pengguna dan admin kata sandi .

Seperti yang kita lihat pada gambar berikutnya, grafik telah dipilih sebagai tipe database, jadi datanya akan dapat diakses di GRAPH Tab :

Sekarang mari kita hubungkan ke database yang diinginkan, mengetahui bahwa ORIENTDB_HOME adalah variabel lingkungan yang sesuai dengan folder instalasi OrientDB :

@BeforeClass public static void setup() { String orientDBFolder = System.getenv("ORIENTDB_HOME"); graph = new OrientGraphNoTx("plocal:" + orientDBFolder + "/databases/BaeldungDB", "admin", "admin"); }

Let's initiate the Article, Author, and Editor classes – while showing how to add validation to their fields:

@BeforeClass public static void init() { graph.createVertexType("Article"); OrientVertexType writerType = graph.createVertexType("Writer"); writerType.setStrictMode(true); writerType.createProperty("firstName", OType.STRING); // ... OrientVertexType authorType = graph.createVertexType("Author", "Writer"); authorType.createProperty("level", OType.INTEGER).setMax("3"); OrientVertexType editorType = graph.createVertexType("Editor", "Writer"); editorType.createProperty("level", OType.INTEGER).setMin("3"); Vertex vEditor = graph.addVertex("class:Editor"); vEditor.setProperty("firstName", "Maxim"); // ... Vertex vAuthor = graph.addVertex("class:Author"); vAuthor.setProperty("firstName", "Jerome"); // ... Vertex vArticle = graph.addVertex("class:Article"); vArticle.setProperty("title", "Introduction to ..."); // ... graph.addEdge(null, vAuthor, vEditor, "has"); graph.addEdge(null, vAuthor, vArticle, "wrote"); }

In the code snippet above, we made a simple representation of our simple database where:

  • Article is the schema-less class that contains articles
  • Writer is a schema-full super-class that holds necessary writer information
  • Writer is a sub-type of Author that holds its details
  • Editor is a schema-less sub-type of Writer that holds editor details
  • lastName field hasn't been filled in the saved author but still appears on the following graph
  • we have a relation between all classes: an Author can write Article and needs to have an Editor
  • Vertex represents an entity with some fields
  • Edge is an entity that links two Vertices

Please note that by trying to add another property to an object of a full class we'll end up with the OValidationException.

After connecting to our database using OrientDB studio, we'll see the graph representation of our data:

Let's see how to have the number of all records (vertices) of the database:

long size = graph.countVertices();

Now, let's show just the number of Writer (Author & Editor) objects:

@Test public void givenBaeldungDB_checkWeHaveTwoWriters() { long size = graph.countVertices("Writer"); assertEquals(2, size); }

In the next step, we can find all Writer‘s data, using the following statement:

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

Finally, let's query for all Editor‘s with level 7; here we only have one that matches:

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

The class name is always specified to look for a specific vertice when requesting. We can find more details here.

4.2. Document API

Next option is to use the OrientDB's Document model. This exposes data manipulation via a simple record with information stored in fields where the type could be text, picture or a binary form.

Let's use the UI again to create a database named BaeldungDBTwo, but now with a document as type:

Note: likewise this API also can be used either in schema-full, schema-less or schema-hybrid mode.

The database connection remains straightforward as we just need to instantiate an ODatabaseDocumentTx object, provide the database URL and the database user's credentials:

@BeforeClass public static void setup() { String orientDBFolder = System.getenv("ORIENTDB_HOME"); db = new ODatabaseDocumentTx("plocal:" + orientDBFolder + "/databases/BaeldungDBTwo") .open("admin", "admin"); }

Let's start with saving a simple document that holds an Author information.

Here we can see that the class has been automatically created:

@Test public void givenDB_whenSavingDocument_thenClassIsAutoCreated() { ODocument doc = new ODocument("Author"); doc.field("name", "Paul"); doc.save(); assertEquals("Author", doc.getSchemaClass().getName()); }

Accordingly, to count the number of Authors, we can use:

long size = db.countClass("Author");

Let's query documents again using a field value, to search for the Author‘s objects with level 7:

@Test public void givenDB_whenSavingAuthors_thenWeGetOnesWithLevelSeven() { for (ODocument author : db.browseClass("Author")) author.delete(); ODocument authorOne = new ODocument("Author"); authorOne.field("firstName", "Leo"); authorOne.field("level", 7); authorOne.save(); ODocument authorTwo = new ODocument("Author"); authorTwo.field("firstName", "Lucien"); authorTwo.field("level", 9); authorTwo.save(); List result = db.query( new OSQLSynchQuery("select * from Author where level = 7")); assertEquals(1, result.size()); }

Likewise, to delete all the records of Author class, we can use:

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

On the OrientDB studio's BROWSE Tab we can make a query to get all our Author's objects:

4.3. Object API

OrientDB doesn't have the object type of database. Thus, the Object API is relying on a Document database.

In Object API type, all other concepts remain the same with only one addition – binding to POJO.

Let's start by connecting to the BaeldungDBThree by using the OObjectDatabaseTx class:

@BeforeClass public static void setup() { String orientDBFolder = System.getenv("ORIENTDB_HOME"); db = new OObjectDatabaseTx("plocal:" + orientDBFolder + "/databases/BaeldungDBThree") .open("admin", "admin"); }

Next, by assuming that the Author is the POJO used to hold an Author data, we need to register it:

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

Author has getters and setters for the following fields:

  • firstName
  • lastName
  • level

Let's create an Author with multi-line instructions if we acknowledged a no-arg constructor:

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

On the other hand, if we've another constructor that takes the firstName, lastName, and level of the Author respectively, the instantiation is just one line:

Author author = db.newInstance(Author.class, "Luke", "Sky", 9); db.save(author);

The following lines are using to browse and delete all the records of Author class:

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

To count all authors we just have to provide the class and the database instance without the need to write an SQL query:

long authorsCount = db.countClass(Author.class);

Similarly, we query authors with level 7 like so:

@Test public void givenDB_whenSavingAuthors_thenWeGetOnesWithLevelSeven() { for (Author author : db.browseClass(Author.class)) { db.delete(author); } Author authorOne = db.newInstance(Author.class, "Leo", "Marta", 7); db.save(authorOne); Author authorTwo = db.newInstance(Author.class, "Lucien", "Aurelien", 9); db.save(authorTwo); List result = db.query(new OSQLSynchQuery( "select * from Author where level = 7")); assertEquals(1, result.size()); }

Finally, this is the official guide that introduces some advanced Object API uses.

5. Conclusion

Di artikel ini, kami telah melihat cara menggunakan OrientDB sebagai sistem manajemen database dengan Java API-nya. Kami juga belajar bagaimana menambahkan validasi pada field dan menulis beberapa query sederhana.

Seperti biasa, kode sumber untuk artikel ini dapat ditemukan di GitHub.