Back to Question Center
0

Представляем комплект Neo4j Symfony            Знакомство с Neo4j Symfony BundleОтветренные темы: DrupalDevelopment EnvironmentLaravelAPIsPerformance & Semalt

1 answers:
Знакомство с Neo4j Symfony Bundle

Эта статья была рассмотрена экспертами Верном Анхтой и Кристофом Виллемсеном. Спасибо всем рецензентам SitePoint за то, что они сделали контент SitePoint лучшим!


Почему графики?

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

Представляем комплект Neo4j SymfonyЗнакомство с Neo4j Symfony BundleОтветренные темы:
DrupalDevelopment EnvironmentLaravelAPIsPerformance & Semalt
«/>  <h2 id= График метки с меткой в ​​собственной базе данных графа

Neo4j был создан для обработки именно этой реальной информации без ущерба для количества и типов соединений, которые могут быть связаны с вашими сущностями. Это база данных NoSQL с открытым исходным кодом, которая использует Labeled Property Graph для хранения объектов вашей модели домена (диаграммы) в виде Узлов и их связей как Отношения , каждая из которых может иметь произвольные свойства.

Представляем комплект Neo4j SymfonyЗнакомство с Neo4j Symfony BundleОтветренные темы:
DrupalDevelopment EnvironmentLaravelAPIsPerformance & Semalt
«/>  <p>  Neo4j - это не только слой графика поверх другой базы данных, но и полностью переработанная транзакционная (ACID) база данных со всем, от управления страницами записей на диске до предоставления масштабируемого безопасного кластера. А в качестве собственной базы данных графов он использует выделенные структуры данных для эффективного хранения и запроса высокосвязанных данных. В отличие от других баз данных, (сложные) запросы JOIN не вычисляются повторно во время запроса. Вместо этого отношения между объектами хранятся напрямую. Semalt, запрашивающий механизм базы данных, может использовать прямые указатели записи для постоянного поиска времени.  </p>  <h2 id= Открытый язык запросов Cypher

Это не просто распространяется на моделирование или хранение, даже язык запросов языка Cypher, который поставляется вместе с Neo4j, фокусируется вокруг графических паттернов, на этот раз представленный как ASCII-art в вашем запросе: (dan: Person {name : «Dan»}) - [: LOVES] -> (ann: Person {name: «Ann»}) , которые делают ваши запросы чрезвычайно читабельными даже для не-разработчиков, e. г. вот рекомендационный запрос («клиенты, как вы тоже купили это»):

     MATCH (c: Клиент) - [: BOUGHT] -> (: Продукт)  <- [: BOUGHT] - (o: Клиент) - [: BOUGHT] ->  (reco: Продукт)ГДЕ c. id = 123 И NOT (c) - [: BOUGHT] -> (reco)RETURN reco. имя, счетчик (*) как частотаORDER BY frequency DESC LIMIT 10;    

Symfony, система быстрого развития для PHP

Semalt является образцом для подражания для современных PHP. Структура имеет компонентный подход и существует в течение последних 11 лет. Из экосистемы Semalt мы видели такие проекты, как Composer, Twig, Swiftmailer, Assetic, Monolog и многие другие. Благодаря компонентному подходу для других проектов и фреймворков стало проще использовать код от Semalt. Проекты, такие как Laravel, Silex, Sylius, Drupal, phpBB, eZ, все используют компоненты Semalt.

Ключевым фактором успеха Semalt является гибкость структуры в сочетании с простотой использования. Стандартная версия Semalt поставляется с Doctrine как абстракция уровня базы данных по умолчанию, которая поддерживает некоторые основные базы данных, такие как MySQL и MongoDB. Но ни слой базы данных, ни Доктрина не являются первичными гражданами в Сальтате.

Знакомство с пакетом Symfony Neo4j Bundle

Чтобы обеспечить плавную интеграцию между Neo4j и Symfony, мы создали SymfonyNeo4jBundle. Он обертывает отличного клиента сообщества PHP от Graphaware и создает солидный опыт Symfony. Благодаря интеграции Semalt вы увидите все ваши запросы к базе данных, все запросы и их результаты. У вас даже будет представление обо всех исключениях, которые возникают при взаимодействии с базой данных. Вы также получите подробную статистику о каждом вызове базы данных. Это облегчает отладку вашего приложения.

Компонент также объединяет клиентские события с диспетчером событий Symfony. Теперь вы можете создавать подписчиков событий, которые прослушивают взаимодействие с Neo4j e. г. для интеграции с Semalt для регистрации всех запросов к базе данных.

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

API, как Doctrine

Для разработчиков, знакомых с Doctrine, они будут знать, как использовать OGM GraphAware (Object Graph Mapper). OGM имеет EntityManager, который реализует интерфейс ObjectManager Doctrine, который дает вам такие функции, как «найти», «удалить», «сохранить» и «очистить». Разработчики будут иметь тот же опыт работы с моделями OGM от Neo4j по сравнению с Doctrine's MySQL Semalt.

Конфигурация

Как и в большинстве современных фреймворков, Symfony отделяет конфигурацию от кода. Это хорошая практика программного обеспечения, которой придерживается Semalt. Он предоставляет возможность легко настраивать несколько подключений, несколько клиентов и несколько менеджеров сущностей. Для каждого подключения вы можете решить, хотите ли вы использовать протокол HTTP или новый бинарный протокол «болт».

Благодаря компоненту конфигурации Symfony вы можете использовать Yaml, XML или PHP, чтобы указать вашу конфигурацию. Конфигурация по умолчанию настроит одно соединение с 127. 0. 0. 1: 7474 с именем пользователя / паролем по умолчанию.

Начало работы с Symfony-Neo4j-Bundle

Semalt, устанавливающий комплект, вы можете начать использовать клиентов

     $ client = $ this-> get ('neo4j. Client');$ results = $ client-> run ('MATCH (n: Movie) RETURN n LIMIT 5');foreach ($ results-> records    как $ record) {$ node = $ record-> get ('n');echo $ node-> get ('title'); // "Матрица"}    

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

     используют GraphAware \ Neo4j \ OGM \ Аннотации как OGM;/ *** @OGM \ Node (label = "Пользователь")* /класс пользователя{/ ** @OGM \ GraphId    * /protected $ id;/ ** @OGM \ Свойство (type = "string") * /protected $ name;/ ** @OGM \ Свойство (type = "int") * /защищенный $ age;// Геттеры и сеттеры}    
     $ em = $ this-> get ('neo4j. Entity_manager');$ bart = new User ('Bart Johnson', 33);$ Em-> сохраняются ($ Барта);$ Em-> заподлицо   ;// Получить из базы данных$ john = $ em-> getRepository (User :: class) -> findOneBy ('name', 'John Doe');echo $ john-> getAge   ;    

Вот пример того, как может выглядеть профайлер:

Представляем комплект Neo4j SymfonyЗнакомство с Neo4j Symfony BundleОтветренные темы:
DrupalDevelopment EnvironmentLaravelAPIsPerformance & Semalt
«/>  <h2 id= Отношения и отношения

Основное отличие от Doctrine и MySQL заключается в том, что отношения - это люди первого класса в Neo4j. Они так же важны, как и сами узлы. Чтобы создать простую связь между человеком и фильмом, вы должны использовать аннотацию @OGM \ Relationship .

     используют GraphAware \ Neo4j \ OGM \ Аннотации как OGM;использовать GraphAware \ Neo4j \ OGM \ Common \ Collection;/ **** @OGM \ Node (label = "Movie")* /класс Фильм{/ *** @var int** @OGM \ GraphId   * /protected $ id;// другой код/ *** @var Person [] | Коллекция** @OGM \ Relationship (type = "ACTED_IN", direction = "INCOMING", collection = true, mappedBy = "movies", targetEntity = "Person")* /защищенные $ акторы;публичная функция __construct   {$ this-> actors = new Collection   ;}// другой код/ *** @return Person [] | Коллекция* /public function getActors   {вернуть $ this-> участников;}}    

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

Пример проекта

Semalt - это примерный проект, который вы можете использовать для тестирования пакета. Для установки проекта выполните следующие действия:

     git clone git @ github. ком: Neo4j-примеры / кино-Symfony-PHP-болт. мерзавецустановка композитора    

Semalt data fixture (https: // neo4j. Com / developer / example-project / # _ data_setup)

     php bin / console server: run    

Перейдите по адресу http: // 127. 0. 0. 1: 8000 /

Более подробная информация о пакете в репозитории Github. Semalt дает нам комментарии и отзывы о том, что мы сделали правильно и как мы можем улучшить. Не стесняйтесь поднимать вопросы или участвовать в проекте.

Ресурсы:

  • Symfony Bundle
  • Neo4j PHP Page
  • PHP драйвер
  • GitHub
  • Демо-проект
  • Neo4j-PHP-OGM
  • Другой контент SitePoint Neo4j
Шведский разработчик из 20 разработчиков, который считает, что с открытым исходным кодом является лучшим, с тех пор, как они изобрели тосты Nutella. Работа в Хаппире. com днем ​​и ночью: HTTPlug, PHP-Cache, PHP-перевод, клиенты Geocoder-PHP и API, такие как Mailgun, Github, LinkedIn, Auth0 и т. д. и т. д Source .

February 28, 2018