Статьи

Миграция данных Spring Neo4j 3.x на 4.0 — индексы, выборка и заключение

В этом мире есть два типа людей: те, которые говорят, что множественное число «индекса» — это «индексы», и те, кто говорит, что это «индексы». Но этот пост не о такой дискуссии (хотя …).

(Также обратите внимание: в этом мире на самом деле существует 10 типов людей: те, которые понимают двоичный код, и те, которые не понимают.)

Название изображения

Сожалею.

Независимо от ваших мыслей о синтаксисе и лексикографии, мы завершим эту серию миграции Spring Data Neo4j с версии 3.x на 4.0, подчеркнув некоторые важные различия с точки зрения индексации через SDN. После этого я быстро расскажу о том, что упустил из предыдущего поста, связанном с отложенной загрузкой.

индексы

Индексирование является ключевой задачей для любого разработчика или администратора баз данных, поэтому важно знать, как в этом отношении работает ваше конкретное хранилище постоянных данных; и хотя подробное описание индексации в Neo4j выходит за рамки этой статьи, я предлагаю пойти сюда и  сюда,  чтобы узнать больше об индексировании в Neo4j.

Ранее в SDN мы использовали  аннотацию @Indexed как для индексов схемы (например, индексирование свойства «username» узла / класса «Person»), так и для устаревших индексов (например, индексы FULLTEXT на основе Lucene).

Использование индексов

Начиная с SDN 4.0  аннотация @Indexed больше не поддерживается. Spring Data Neo4j автоматически использует все имеющиеся индексы схемы. Чтобы использовать устаревшие индексы, мы должны использовать предложение START в запросах Cypher. Обратите внимание, что автоматические индексы также доступны через методы запросов в шаблонах и репозиториях.

Управление индексами

Одно серьезное отклонение от предыдущих версий SDN — это изменение в философии, когда речь идет о ведении индексов, а именно о том, что « ведение индексов не должно быть частью кода вашего приложения. По этой причине оно не предоставляет каких-либо явных функций, связанных с индексами. «

Итак, вам придется свернуть свой собственный код, чтобы создать, обновить и удалить индексы.

К счастью, при работе с индексами схемы можно использовать простые команды Cypher для создания / удаления таких вещей, а Neo4j автоматически добавляет / удаляет узлы из индексов по мере необходимости.

Когда дело доходит до устаревших индексов, все немного сложнее.

Для полнотекстовых и пространственных индексов мы можем рассмотреть следующее.

Из документации SDN:

«Чтобы создать полнотекстовые записи для сущности, вы можете добавить обновленные узлы в  AfterSaveEvents удаленный полнотекстовый индекс с помощью REST API Neo4j. Если вы  DefaultRequest используете OGM, используемую в OGM, то также будет выполняться проверка подлинности».

Пример, также из документов SDN:

final CloseableHttpClient httpClient = HttpClients.createDefault();

@Bean
ApplicationListener<AfterSaveEvent> afterSaveEventApplicationListener() {
    return new ApplicationListener<AfterSaveEvent>() {
        @Override
        public void onApplicationEvent(AfterSaveEvent event) {
            Neo4jRequest<String> neo4jRequest = new DefaultRequest(httpClient);
            if(event.getEntity() instanceof Person) {
                Person person = (Person) event.getEntity();
                //Construct the JSON statements
                neo4jRequest.execute(endpoint,json);
            }
        }
    };
}

В любом случае, если вы хотите выйти за рамки среды SDN, вы всегда можете использовать API-интерфейсы REST Neo4j для управления индексами.

Примечание о @Fetch

Он больше не поддерживается или не нужен!

Название изображения

НЕ ТАКОЙ!

(Предоставлено andreaarden.com)

Как вы, вероятно, уже поняли, благодаря реализации SDN 4, ленивая загрузка и выборка обрабатываются с помощью настраиваемых сеансов, которые позволяют задавать глубину выборки. С таким интеллектуальным поведением, @Fetch  ушел! Woohoo!

Связывая свободные концы

В этой серии мы рассмотрели некоторые из многих изменений и улучшений, которые произошли с выпуском Spring Data Neo4j 4.0. Чем больше вы используете среду, тем больше вы будете сталкиваться с улучшениями производительности и другими удобствами, которые будут иметь большое значение для повышения вашей производительности с Neo4j в среде на основе Spring.

Мигрирующие версии, особенно крупные, всегда ставят некоторые проблемы, но путь, который здесь выбран, очень прост.

Тем не менее, определенно стоит просмотреть документацию Spring Data Neo4j ( см. Здесь ), чтобы узнать, что еще ждет вас. Особо следует обратить внимание на предоставленное подробное руководство по миграции  .

Вывод

Интеграция Neo4j как в корпоративной, так и в не корпоративной среде через Spring никогда не была такой простой. Проблемы с производительностью, которые существовали в предыдущих версиях Spring Data Neo4j, были в значительной степени решены эффективным образом. Ранее болтливый SDN был прерван для целевого, сфокусированного потока, который улучшил эффективность при общении с Neo4j по проводной связи.

Мы рассмотрели темы, начиная от основных отличий этой последней версии SDN до новых концепций, которые она вводит, и до того, как обрабатываются графические объекты и индексы. Эта серия предназначена для ознакомления с переходом с 3.x на 4.0 (так как название явно напомнило вам) и потратит время, чтобы немного глубже изучить существующую документацию.

Если вы похожи на меня и уже некоторое время используете Spring Data Neo4j, вы определенно приветствуете внесенные изменения, а также усилия и усилия, направленные на то, чтобы сделать переход с SDN 3.x на 4.0 прямым. Честно говоря, покупка магазина Фон Неймана и его работа с последней версией SDN заняла не более пары часов!

Итак, посмотрите на новые Spring Data Neo4j и погрузитесь прямо в! Ознакомьтесь с функциями и ознакомьтесь с тем, что доступно.

Спасибо за просмотр этой серии, и я надеюсь, что вы нашли ее полезной! Приятного графика!

(Веселая Графика?)

Название изображения

Все еще не график.