Рубрики
Без рубрики

Введение в API OrientDB Java

Быстрое и практическое введение в OrientDB.

Автор оригинала: Dassi Orleando.

1. Обзор

OrientDB — технология базы данных с открытым исходным кодом Multi-Model NoS’L, предназначенная для работы с График , Документ , Ключевые значения , Геопространственные и Реактивные модели при управлении запросами с S’L синтаксис.

В этой статье мы будем освещать настройку и использовать API OrientDB Java.

2. Установка

Во-первых, нам нужно установить бинарный пакет.

Давайте загрузим последнюю стабильную версию OrientDB ( 2.2.x на момент написания этой статьи).

Во-вторых, нам нужно распаковать его и переместить его содержание в удобный каталог (с ORIENTDB_HOME ). Пожалуйста, не забудьте добавить бен папка к переменным среды для любого простого использования командной строки.

Наконец, мы должны редактировать orientdb.sh файл, расположенный в $ORIENTDB-HOME/bin путем заполнения местоположения ( ORIENTDB_HOME ) каталога OrientDB на месте ORIENTDB_DIR а также системного пользователя, которого мы хотели бы использовать вместо USER_YOU_WANT_ORIENTDB_RUN_WITH .

Теперь у нас есть полностью работающий OrientDB. Мы можем использовать orientdb.sh с вариантами :

  • начало : для запуска сервера
  • статус : для проверки статуса

  • остановить : для остановки сервера

Пожалуйста, обратите внимание, что оба начало и остановка действия требуют пароля пользователя (тот, который мы создали в orientdb.sh файл).

Как только сервер запущен, он займет порт 2480. Поэтому мы можем получить доступ к нему локально, используя URL :

Более подробную информацию о ручной установке можно найти здесь.

Примечание: OrientDB требует Java версия 1.7 или выше.

Предыдущие версии доступны здесь .

3. Настройка API OrientDB Java

OrientDB позволяет java-разработчикам работать с тремя различными API, такими как:

  • График API – графические базы данных
  • Документ API – базы данных, ориентированных на документы
  • API объекта — объекты, непосредственно связанные с документом OrientDB

Мы можем использовать все эти типы в рамках одной кодовой базы, просто интегрируя и используя OrientDB.

Давайте посмотрим на некоторые доступные банки мы можем включить в classpath проекта:

  • orientdb-ядро –.jar : приносит основную библиотеку
  • чертежи-основной .jar : принести адаптеры основных компонентов
  • orientdb-graphdb–.jar : дает API базы данных Graph
  • orientdb-объект – .jar : предоставляет API базы данных объектов
  • ориентированный распределенный – .jar : предоставляет распределенный плагин базы данных для работы с кластером серверов
  • orientdb-инструменты – .jar : передает команду консоли
  • orientdb-клиент – .jar : предоставляет удаленного клиента
  • orientdb-предприятие – .jar : позволяет проводить классы протоколов и сетей, разделяемые клиентом и сервером

Два последних требуются только в том случае, если мы обуговаем наши данные на удаленном сервере.

Начнем с проекта Maven и используем следующие зависимости:


    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

Пожалуйста, проверьте центральный репозиторий Maven для последних версий Основные , ГрафДБ , Объект API и Чертежи-основные .

4. Использование

OrientDB использует TinkerPop Чертежи реализации для работы с графиками.

ТинкерПоп является графическим вычислительным каркасом, обеспечивающим множество способов построения графических баз данных, где каждая из них имеет свои реализации:

Кроме того, OrientDB позволяет работать с тремя видами Шемас независимо от типа API:

  • Schema-Full — включен строгий режим, поэтому все поля указаны при создании класса
  • Schema-Less – классы создаются без какого-либо конкретного свойства, поэтому мы можем добавлять их по мере это режим по умолчанию
  • Schema-Hybrid – это смесь схемы-полной и схемы-менее, где мы можем создать класс с заранее определенными полями, но пусть запись для определения других пользовательских из них

4.1. Графический API

Поскольку это графическая база данных, данные представлены как сеть, содержащая Вертихес (узлы), взаимосвязанные Края (дуги).

В качестве первого шага давайте использовать пользовательский интерфейс для создания базы данных Graph под названием BaeldungDB с пользовательским администратор и пароль Администратора.

Как мы видим на последующем изображении, график был выбран в качестве типа базы данных, поэтому ее данные будут доступны в GRAPH Tab :

Теперь подключимся к нужной базе данных, зная, что ORIENTDB_HOME является переменной среды, которая соответствует папке установки OrientDB :

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

Давайте инициируем Статья , Автор , и Редактор классы – показывая, как добавить проверку в свои поля:

@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");
}

В фрагменте кода выше, мы сделали простое представление нашей простой базы данных, где:

  • Статья является схема менее класс, который содержит статьи
  • Писатель является схема-полный супер-класс, который содержит необходимую информацию писателя
  • Писатель является подтипом Автор , который держит свои детали
  • Редактор является схемой менее подтипа Писатель , который держит детали редактора
  • последнееимя поле не было заполнено сохраненным автором, но все еще отображается на следующем графике
  • у нас есть связь между всеми классами: Автор может писать Статья и должен иметь редактор
  • Вертекс представляет сущность с некоторыми полями
  • Край является сущностью, которая связывает два Вершин

Пожалуйста, обратите внимание, что, пытаясь добавить другое свойство к объекту полного класса, мы в конечном итоге с OValidationИсключение .

После подключения к нашей базе данных с Студия OrientDB , мы увидим график представления наших данных:

Давайте посмотрим, как иметь количество всех записей (vertices) базы данных:

long size = graph.countVertices();

Теперь давайте покажем только количество Писатель (Автор и редактор) Объектов:

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

    assertEquals(2, size);
}

На следующем этапе мы сможем найти все Писатель данные, используя следующее утверждение:

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

Наконец, давайте запросим для всех Редактор С уровень 7; здесь у нас есть только один, который соответствует:

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

    assertEquals("Maxim", onlyEditor);
}

Имя класса всегда указывается для запроса конкретной вертицы. Мы можем найти более подробную информацию здесь .

4.2. Документ API

Следующим вариантом является использование модели документов OrientDB. Это подвергает манипуляции данными с помощью простой записи с информацией, хранящейся в полях, где тип может быть текст, изображение или двоичная форма.

Давайте снова используем пользовательский интерфейс для создания базы данных под названием BaeldungDBTwo , но теперь с документ как тип:

Примечание: также этот API также может быть использован либо в схеме-полный, схема-менее или схема-гибридный режим.

Подключение к базе данных остается простым, так как нам просто нужно мгновенно ODatabaseDocumentTx объект, предоставить URL базы данных и учетные данные пользователя базы данных:

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

Начнем с сохранения простого документа, автор информация.

Здесь мы видим, что класс был автоматически создан:

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

    assertEquals("Author", doc.getSchemaClass().getName());
}

Соответственно, подсчитать количество Авторы , мы можем использовать:

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

Давайте снова запросим документы, используя значение поля, для поиска Автор ‘S объектов с уровень 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());
}

Аналогичным образом, чтобы удалить все записи Автор класса, мы можем использовать:

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

На студии OrientDB BROWSE Tab мы можем сделать запрос, чтобы получить все наши Авторская s объекты:

4.3. ОБЪЕКТ API

OrientDB не имеет объектного типа базы данных. Таким образом, API объекта опирается на базу данных документа.

В типе Object API все остальные концепции остаются неизменными только с одним дополнением – обязательный в POJO.

Начнем с подключения к BaeldungDBТри с помощью OObjectDatabaseTx класс:

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

Далее, предполагая, что Автор является POJO используется для хозяй Автор данные, мы должны зарегистрировать его:

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

Автор имеет getters и сеттеров для следующих полей:

  • первоеимя
  • последнееимя
  • уровень

Давайте создадим Автор с многослойной инструкцией, если мы признали конструктора без арга:

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

С другой стороны, если у нас есть другой конструктор, который принимает первоеимя , последнееимя , и уровень из Автор соответственно, моментация – это всего лишь одна строка:

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

Следующие строки используются для просмотра и удаления всех записей класса Автор:

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

Чтобы подсчитать всех авторов, мы просто должны предоставить класс и экземпляр базы данных без необходимости писать запрос S’L:

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

Аналогичным образом, мы запрашиваем авторов с уровень 7, как это:

@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());
}

Наконец, это официальный путеводитель который вводит некоторые расширенные использования API объектов.

5. Заключение

В этой статье мы видели, как использовать OrientDB в качестве системы управления базами данных с его API Java. Мы также узнали, как добавить проверку на полях и написать несколько простых запросов.

Как всегда, исходный код этой статьи можно найти более на GitHub .