Интеграция Neo4j в Laravel

Источник: Neo4j Graph Intelligence Platform•

Интеграция Neo4j в Laravel

Мощность графовых баз данных без выхода за пределы экосистемы Laravel. Разработчики Laravel привыкли работать с Eloquent, Построителем запросов (Query Builder), подключениями к базам данных и привычными паттернами приложений. Но что происходит, когда данные, необходимые вашему приложению, — это…

Мощность графовых баз данных без выхода за пределы экосистемы Laravel

Разработчики Laravel привыкли работать с Eloquent, Построителем запросов (Query Builder), подключениями к базам данных и привычными паттернами приложений. Но что происходит, когда данные, необходимые вашему приложению, — это не просто записи, а связи между ними?

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

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

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

Цель: сделать работу с графовыми данными интуитивно понятной для разработчиков Laravel

Добавление еще одной базы данных в проект Laravel не должно означать отказ от уже знакомых вам паттернов разработки.

С помощью Neo4j Laravel вы можете подключиться к Neo4j через уровень базы данных Laravel и выполнять Cypher-запросы, используя привычный фасад DB:

Обратите внимание, что это вам дает: явно названное подключение к Neo4j, параметризованные запросы и привычный API Laravel.

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

Поддержка Eloquent, а не просто подключение к базе данных

Интеграция с базой данных становится гораздо полезнее, когда она вписывается в то, как реально создаются приложения Laravel.

Neo4j Laravel поддерживает модели в стиле Eloquent с помощью трейта HasNeo4jConnection. Вы можете определить модель и использовать привычные операции для получения, создания, обновления и удаления данных, хранящихся в графе.

Затем работайте с ними, используя знакомый синтаксис:

Пакет также предоставляет специализированный класс Neo4jModel для приложений, в которых для данных на основе графов предпочитают использовать явный класс модели.

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

Где графовые базы данных становятся по-настоящему интересными: связи

Рассмотрим приложение о кино. Реляционная база данных может представлять фильмы, актеров и их связи с помощью таблиц и соединений (joins). Neo4j позволяет представлять эти связи напрямую в виде графовых отношений:

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

Neo4j Laravel включает в себя возможности запросов, ориентированные на связи, включая matchRelationship(), благодаря чему графовые паттерны могут выражаться через его Построитель запросов (Query Builder) и поддерживаемые API отношений Eloquent.

Например:

Для моделей Eloquent графовые отношения также могут поддерживать такие операции, как ленивая загрузка (lazy loading), жадная загрузка (eager loading), привязка (attaching), синхронизация (syncing), отвязка (detaching) и создание связанных узлов.

Это важное отличие: пакет не ограничивается отправкой «сырых» строк Cypher в Neo4j. Его цель — сделать так, чтобы операции с графами более естественно вписывались в привычный и удобный процесс разработки на Laravel.

Больше, чем базовый CRUD

Полезная база данных также должна решать повседневные задачи разработки приложений.

Neo4j Laravel включает в себя такие возможности, как:

  • Транзакции: управление связанными операциями базы данных в рамках одной транзакции.
  • Параметризованные запросы: передача значений отдельно от инструкций Cypher.
  • Пагинация: использование поддерживаемых API пагинации Laravel для запросов на базе Cypher.
  • Операции с отношениями: создание графовых связей и управление ими через поддерживаемые API запросов и моделей.
  • Мягкое удаление (Soft deletes): использование поведения SoftDeletes от Laravel для поддерживаемых моделей Neo4j.
  • Конфигурация подключения: настройка аутентификации, SSL, пула соединений и тайм-аутов.
  • Логирование запросов: отправка логов запросов через систему логирования Laravel.
  • Интеграция с Laravel Debugbar: просмотр перехваченных Cypher-запросов на общей вкладке Queries при установленной и настроенной интеграции.

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

Вам не обязательно заменять MySQL или PostgreSQL

Что стоит уточнить: внедрение Neo4j не означает автоматическую замену вашей существующей базы данных.

Для многих приложений Laravel разумной отправной точкой является сохранение MySQL, PostgreSQL или SQLite в качестве основной базы данных и настройка Neo4j в качестве дополнительного подключения для графоориентированных данных.

Это позволяет выбирать базу данных в зависимости от решаемой задачи.

Реляционная база данных может оставаться правильным выбором для обычных бизнес-записей, в то время как Neo4j может обрабатывать сценарии использования, где обход связей имеет центральное значение для приложения.

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

Создано для сообщества PHP и Laravel

Мы рассматриваем Neo4j Laravel как часть более широких усилий по повышению доступности разработки на графовых базах данных для PHP-разработчиков.

Цель состоит не в том, чтобы скрыть Neo4j или притвориться, что графовые базы данных работают точно так же, как реляционные. Цель — предоставить дружественную к Laravel интеграцию, сохранив при этом доступ к возможностям, которые делают Neo4j ценным инструментом.

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

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

Пожалуйста, делитесь любыми отзывами или найденными проблемами в репозитории.

Изучите репозиторий:

Bringing Neo4j into Laravel изначально была опубликована в Neo4j Developer Blog на Medium, где авторы продолжают рассказывать эту историю и делиться ее продолжением.

О чём эта статья

Ещё в разделе «Разработка ПО»

Все →

Ещё от Neo4j