Мощность графовых баз данных без выхода за пределы экосистемы 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, где авторы продолжают рассказывать эту историю и делиться ее продолжением.










