Pengenalan API Java OrientDB

1. Gambaran keseluruhan

OrientDB adalah teknologi pangkalan data NoSQL Multi-Model sumber terbuka yang direka untuk berfungsi dengan model Grafik, Dokumen, Nilai-Utama, GeoSpatial dan Reaktif sambil menguruskan pertanyaan dengan sintaks SQL.

Dalam artikel ini, kita akan membahas penyediaan dan menggunakan API Java OrientDB.

2. Pemasangan

Pertama, kita perlu memasang pakej binari.

Mari memuat turun versi stabil terbaru dari OrientDB (2.2.x pada saat menulis artikel ini).

Kedua, kita perlu membuka zip dan memindahkan kandungannya ke direktori yang mudah digunakan (menggunakan ORIENTDB_HOME ) Pastikan untuk menambah folder bin ke pemboleh ubah persekitaran untuk penggunaan baris perintah yang mudah.

Akhirnya, kita perlu mengedit fail orientdb.sh yang terdapat di $ ORIENTDB_HOME / bin dengan mengisi lokasi ( ORIENTDB_HOME ) direktori OrientDB di tempat ORIENTDB_DIR dan juga pengguna sistem yang ingin kita gunakan dan bukannya USER_YOU_WANT_ORIENTDB_RUN_WITH .

Sekarang kita mempunyai OrientDB yang berfungsi sepenuhnya. Kita boleh menggunakan skrip orientdb.sh dengan pilihan:

  • start : untuk memulakan pelayan
  • status : untuk memeriksa status

  • berhenti : untuk menghentikan pelayan

Harap maklum bahawa tindakan memulakan dan menghentikan memerlukan kata laluan pengguna (yang kami tetapkan dalam fail orientdb.sh ).

Setelah pelayan dilancarkan, ia akan memenuhi port 2480. Oleh itu, kita dapat mengaksesnya secara tempatan menggunakan URL ini :

Maklumat lanjut mengenai pemasangan manual boleh didapati di sini.

Catatan: OrientDB memerlukan Java versi 1.7 atau lebih tinggi.

Versi sebelumnya boleh didapati di sini.

3. Persediaan API Java OrientDB

OrientDB membolehkan pemaju Java bekerja dengan tiga API yang berbeza seperti:

  • API Grafik - pangkalan data grafik
  • API Dokumen - pangkalan data berorientasikan dokumen
  • Objek API - objek yang terikat terus ke Dokumen OrientDB

Kita boleh menggunakan semua jenis itu dalam satu pangkalan data hanya dengan mengintegrasikan dan menggunakan OrientDB.

Mari kita lihat beberapa balang yang ada yang boleh kita sertakan di jalan kelas projek:

  • orientdb-core - *. jar : membawa perpustakaan teras
  • blueprints-core - *. jar : untuk membawa komponen teras penyesuai
  • orientdb-graphdb - *. jar : memberikan API pangkalan data Graf
  • orientdb-object - *. jar : menyediakan API pangkalan data Objek
  • orientdb-diedarkan - *. jar : menyediakan plugin pangkalan data yang diedarkan untuk berfungsi dengan kluster pelayan
  • orientdb-tools - *. jar : menyerahkan arahan konsol
  • orientdb-client - *. jar : menyediakan klien jarak jauh
  • orientdb-enterprise - *. jar : membolehkan protokol dan kelas rangkaian yang dikongsi oleh klien dan pelayan

Dua yang terakhir diperlukan hanya jika kami menguruskan data kami di pelayan jauh.

Mari mulakan dengan projek Maven dan gunakan pergantungan 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 

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

4. Penggunaan

OrientDB menggunakan pelaksanaan TinkerPop Blueprints untuk bekerja dengan grafik.

TinkerPop adalah Kerangka Pengkomputeran Graf yang menyediakan banyak cara untuk membina pangkalan data grafik, di mana masing-masing mempunyai pelaksanaannya:

  • Rangka Tindakan
  • Paip
  • Gremlin
  • Rexster
  • Pelayaran Layar

Selain itu, OrientDB membolehkan untuk bekerja dengan tiga jenis Skema tanpa mengira jenis API:

  • Skema-Penuh - mod ketat diaktifkan, jadi semua bidang ditentukan semasa pembuatan kelas
  • Skema-Kurang - kelas dibuat tanpa harta khusus, jadi kami dapat menambahkannya mengikut kehendak; ia adalah mod lalai
  • Schema-Hybrid - ini adalah gabungan skema penuh dan tanpa skema di mana kita boleh membuat kelas dengan medan yang telah ditentukan tetapi membiarkan rakaman untuk menentukan yang lain yang disesuaikan

4.1. API Grafik

Oleh kerana ini adalah pangkalan data berasaskan grafik, data diwakili sebagai rangkaian yang mengandungi Vertices (node) yang saling berkaitan dengan Edges (busur).

Sebagai langkah pertama, mari gunakan UI untuk membuat pangkalan data Grafik yang disebut BaeldungDB dengan pentadbir pengguna dan kata laluan .

Seperti yang kita lihat pada gambar berikutnya, grafik telah dipilih sebagai jenis pangkalan data, sehingga akibatnya datanya akan dapat diakses di GRAPH Tab :

Sekarang mari kita sambungkan ke pangkalan data yang diingini, mengetahui bahawa ORIENTDB_HOME adalah pemboleh ubah persekitaran yang sesuai dengan folder pemasangan 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

Dalam artikel ini, kita telah melihat bagaimana menggunakan OrientDB sebagai sistem pengurusan pangkalan data dengan API Java-nya. Kami juga belajar bagaimana menambahkan pengesahan di lapangan dan menulis beberapa pertanyaan mudah.

Seperti biasa, kod sumber untuk artikel ini boleh didapati di GitHub.