Понимание Cypher, декларативного языка запросов графов Neo4j

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

«… Построено с нуля для использования не только данных, но и их взаимосвязей. Neo4j связывает данные по мере их хранения, обеспечивая выполнение запросов, о которых раньше даже не догадывались, с невероятной скоростью. ”

База данных графа - это тип базы данных, используемый для моделирования данных в виде графа. Структура базы данных графов основана на следующем:

  • Nodes - представляют запись / данные. Вы можете добавить к узлу ноль или более меток.
  • Relationships — представляют соединение между узлами. У каждого соединения всегда есть направление.
  • Properties - представляют названные значения данных. Применимо как к узлам, так и к отношениям.

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

Перейдем к следующему разделу и начнем с установки.

1. Настройка

Джава

Прежде чем продолжить установку, необходимо убедиться, что на вашем компьютере установлен OpenJDK 11 или Oracle Java 11. Вы можете легко проверить это, выполнив следующую команду в терминале.

java --version

Вы должны увидеть следующий результат

Я использую сборку OpenJDK 11 от AdoptOpenJDK, которая имеет открытый исходный код и доступна бесплатно.

Neo4j

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

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

Есть два способа запустить Neo4j:

  • Как консольное приложение
  • Как услуга

Консольное приложение

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

<NEO4J_HOME>\bin\neo4j console

На вашем терминале будет отображаться следующий вывод:

В консольном режиме процесс привязан к терминалу. Он должен оставаться открытым на переднем плане.

Услуга

С другой стороны, служба запускает процесс в фоновом режиме. Он будет продолжать работать, даже если терминал закрыт. Чтобы установить его как службу, выполните следующую команду:

<NEO4J_HOME>\bin\neo4j install-service

После этого вы можете запустить его в обычном режиме с помощью следующей команды:

neo4j start

В следующем списке представлены некоторые полезные команды на основе модуля Windows PowerShell:

  • stop — Остановить процесс
  • restart - перезапустить процесс
  • status — Проверить статус процесса
  • uninstall-service - Удалить neo4j как службу

Консоль Neo4j

Следующим шагом будет доступ к нему в вашем браузере. Откройте браузер и перейдите по следующему URL-адресу.

http://localhost:7474

Он перенаправит вас на:

http://localhost:7474/browser/

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

Если вы обращаетесь к нему впервые, просто подключитесь к базе данных, используя следующие имя пользователя и пароль:

  • username - neo4j
  • password — neo4j

Вам будет предложено изменить пароль. Убедитесь, что вы помните новый пароль, так как при последующих входах будет использоваться новый пароль. После входа в систему вы должны увидеть следующий интерфейс:

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

Вы можете найти три кнопки с правой стороны, как показано ниже:

  • star - Обновить запрос как любимый
  • eraser - Очистить область ввода
  • play - выполнить запрос. Вы можете использовать комбинацию клавиш Ctrl+Enter, чтобы запустить выполнение.

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

Примеры наборов данных

Neo4j поставляется с двумя типовыми наборами данных для вас. Выполните следующую команду, если вы собираетесь следовать встроенному руководству.

Первый набор данных демонстрирует общие шаблоны запросов по актерам и фильмам в поп-культуре с перекрестными ссылками. Выполните следующее в области ввода, чтобы начать обучение.

:play movie graph

Кроме того, второй набор данных касается загрузки данных из внешних файлов csv. Вы научитесь переходить от схемы СУБД к структуре графа с использованием некоторых классических наборов данных. Вы можете запустить учебник с помощью следующей команды:

:play northwind graph

2. Информация, документация и конфигурации

Слева находится панель навигации с несколькими полезными кнопками в зависимости от ваших потребностей.

Информация о базе данных

Первая кнопка показывает обзор базы данных.

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

Любимые сценарии

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

Документация

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

Браузерная синхронизация

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

Настройки браузера

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

3. Cypher - язык запросов графов

Cypher используется для запроса данных из Neo4j. Это высокооптимизированный язык запросов, который способен понимать сохраненные соединения между каждым узлом. Он сильно отличается от обычного SQL-запроса, поскольку концепция таблицы не существует в графической базе данных (больше никаких кошмаров JOIN при запросе к базе данных).

В большинстве случаев вы будете использовать следующие предложения:

  • СООТВЕТСТВИЕ
  • СОЗДАЙТЕ
  • ОБЪЕДИНЕНИЕ

СООТВЕТСТВИЕ

Предложение MATCH используется для чтения данных. Вы можете думать об этом как о предложении SELECT в SQL. Он описывает шаблон данных графа, в котором Neo4j будет использовать для извлечения всех путей, соответствующих шаблону. В следующем примере показан запрос на получение всех данных из существующей базы данных. Вам необходимо явно указать предложение RETURN, чтобы получить данные.

MATCH (n) RETURN (n)

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

  • график
  • стол
  • текст
  • код

График показывает визуализацию между узлами и отношения между ними.

Таблица отображает информацию о каждом узле, такую ​​как метки и свойства в таблице.

С другой стороны, Text показывает весь вывод запроса точно так же, как при запросе к базе данных SQL.

Код предоставляет вам информацию об ответе, если вы запрашиваете ее через код.

Вы можете ограничить его определенным шаблоном. Например, чтобы вернуть все фильмы в базе данных:

MATCH (movie:Movie)
RETURN movie.title

Кроме того, он часто сочетается с предложением WHERE, поскольку предложение MATCH описывает только структуру, а предложение WHERE определяет содержимое запроса. Давайте посмотрим на следующий пример, который найдет все фильмы режиссера по имени Steven Spielberg.

MATCH (director:Person)-[:DIRECTED]->(movie)
WHERE director.name = "Steven Spielberg"
RETURN movie.title

Приведенный выше пример основан на исходящих отношениях. Направление стрелки будет обратным во входящих отношениях. Например, получить всех актеров, которые снимались в фильме под названием Wandering Earth.

MATCH (m:Movie { title: 'Wandering Earth' })<-[:ACTED_IN]-(actor)
RETURN actor.name

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

MATCH (m:Movie { title: 'Wandering Earth' })<-[:ACTED_IN|:DIRECTED]-(person)
RETURN person.name

Верните все имена, которые играли или сняли фильм под названием Wandering Earth.

СОЗДАЙТЕ

Предложение CREATE в основном используется для создания данных так же, как предложение INSERT в SQL. Вам необходимо указать именованные узлы и их отношения со встроенными свойствами. Вы можете легко создать новый узел, представляющий метку PERSON, следующим образом:

CREATE (n:Person)

Узел может иметь ноль или более меток. Следующий запрос создает узел с двумя метками (Person и Malaysian).

CREATE (n:Person:Malaysian)

Узел также может иметь свои собственные свойства. Вы можете создать узел с меткой и свойствами одновременно, используя синтаксис в стиле словаря:

CREATE (n:Person { name: 'Wai Foong', title: 'AI Engineer' })

Вы можете запросить и вернуть вновь созданные данные с помощью предложения RETURN. В следующем примере будет возвращена одна строка данных AI Engineer.

CREATE (n:Person { name: 'Wai Foong', title: 'AI Engineer' })
RETURN n.title

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

A-[:RELTYPE]->B

Для создания новых узлов и отношений вы можете указать это следующим образом:

CREATE (a:Person {name:"A"})-[:IS_FRIEND_OF]->(b:Person {name:"B"})

Если у вас уже есть существующие узлы и вы хотите создать между ними соединения, вам необходимо сначала получить узлы с помощью предложения MATCH.

MATCH (a:Person),(b:Person)
WHERE a.name = 'A' AND b.name = 'B'
CREATE (a)-[:IS_FRIEND_OF]->(b)

ОБЪЕДИНЕНИЕ

В отличие от предложения CREATE, предложение MERGE сначала определит, существует ли шаблон на графике, прежде чем создавать новые данные. Вы можете думать об этом как о комбинации MATCH и CREATE, где он либо сопоставляет существующие данные на основе шаблона, либо создает на их основе новые данные. В следующем примере будет создан новый узел, поскольку не все свойства соответствуют какому-либо существующему узлу (существует дополнительный возраст вызова свойства по сравнению с тем, который мы создали ранее).

MERGE (n:Person { name: 'Wai Foong', title: 'AI Engineer', age: 28})
RETURN n

Вы можете объединить предложение MERGE с двумя дополнительными подпунктами:

  • ON_CREATE - действие, выполняемое, если совпадение не найдено и создается новый узел
  • ON_MATCH - действие, выполняемое при обнаружении совпадения

В следующем примере создается новый узел Person со свойствами name и created. При создании для созданных свойств будет установлена ​​текущая отметка времени.

MERGE (n:Person { name: 'Wai Foong' })
ON CREATE SET n.updatetime = timestamp()
RETURN n.name, n.updatetime

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

MERGE (n:Person { name: 'Wai Foong' })
ON MATCH SET n.updatetime = timestamp()
RETURN n.name, n.updatetime

Вы можете объединить оба подпункта и установить свойства в зависимости от того, было ли найдено совпадение или создан новый узел.

MERGE (n:Person { name: 'Wai Foong' })
ON CREATE SET n.created = timestamp()
ON MATCH SET n.found = TRUE
RETURN n.name, n.created, n.found

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

  • MERGE без связанных переменных может создавать повторяющиеся элементы.
  • MERGE со связанными переменными повторно использует существующие элементы графа.
  • MERGE использование комбинаций связанных и несвязанных переменных для различных случаев использования.
  • Помните, что будут созданы и несвязанные отношения.
  • Используйте ON MATCH и ON CREATE после свойств от MERGE до SET в соответствии с поведением MERGE.
  • MERGE получает блокировки на узлах и взаимосвязях в шаблоне, что приводит к созданию шаблона.
  • По соображениям производительности при использовании MERGE настоятельно рекомендуется создать индекс схемы на метке или свойстве.

Помощь

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

:help match

Вы должны увидеть следующий интерфейс:

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

:help cypher

В вашем браузере Neo4j отобразится следующий интерфейс.

4. Вывод

Подведем итоги тому, что мы узнали сегодня.

Мы начали с простого объяснения графовой базы данных и концепций, лежащих в ее основе.

Затем мы перешли к установке OpenJDK 11 и загрузили основной файл Neo4j. Мы извлекли его в папку и запустили в обычном режиме либо как консольное приложение, либо как фоновую службу.

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

Наконец, мы поигрались с Cypher, языком запросов к графам, используемым в Neo4j. Мы протестировали чтение и запись данных в существующую базу данных с помощью предложений MATCH, CREATE и MERGE.

Спасибо, что прочитали эту статью. Надеюсь увидеть вас снова в следующей статье!

Ссылка

  1. Графическая платформа Neo4j
  2. Последний выпуск AdoptOpenJDK