Перейти к основному содержимому

3.06. Графовые БД

Разработчику Аналитику Тестировщику
Архитектору Инженеру

Графовые БД

Neo4j — это графовая СУБД с открытым исходным кодом, реализованная на Java. Графовые базы данных (Graph Databases) используют графы для хранения и обработки данных. В них данные представлены в виде узлов (nodes), ребер (edges) и свойств (properties). Узлы представляют объекты или сущности, ребра — связи между ними, а свойства — дополнительные атрибуты узлов и ребер.

image.png

Узлы представляют сущности, например, людей (Алиса, Боб, Клара, Дэвид).

Узлы могут иметь свойства, такие как возраст (возраст: 25).

Ребра показывают связи между узлами.

Например, «Алиса дружит с Бобом» или «Дэвид руководит Бобом».

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

К примеру, если обратиться по запросу:

MATCH (a:Person)-[r:дружит_с]->(b:Person)
WHERE a.name = "Алиса"
RETURN b.name

То такой запрос (на языке Cypher) вернет всех друзей Алисы.

Официальный сайт Neo4j - https://neo4j.com/

Чит-лист - https://cheatsheets.zip/neo4j

Cypher — это декларативный язык запросов, созданный для работы с графовыми базами данных. Основная идея Cypher заключается в том, чтобы сделать работу с графами интуитивно понятной. Вместо сложных SQL-подобных запросов, Cypher использует синтаксис, который напоминает ASCII-графику: узлы обозначаются кругами (), а связи между ними — стрелками --> или <--. Основные элементы:

  • Узлы представляют сущности в графе. Они могут иметь метки (labels), которые определяют тип узла, и свойства (properties), которые хранят данные.
  • Связи (или ребра) соединяют узлы и описывают отношения между ними. Связи имеют направление (--> или <--) и могут содержать свойства.
  • Метки используются для группировки узлов одного типа.
  • Свойства — это пары ключ-значение, которые хранятся как в узлах, так и в связях.

Операции в Cypher:

  1. Создание данных. Чтобы создать узлы и связи, используется команда CREATE.
CREATE (a:Person {name: "Alice", age: 30}),
(b:Person {name: "Bob", age: 25}),
(a)-[:FRIENDS_WITH]->(b);

Здесь создаются два узла - Alice и Bob, и между ними создается связь FRIENDS_WITH.

  1. Чтение данных. Для чтения данных используется команда MATCH.
MATCH (a:Person)-[:FRIENDS_WITH]->(b:Person)
RETURN a.name, b.name;

Этот запрос находит всех людей, связанных отношением FRIENDS_WITH, и возвращает их имена.

  1. Обновление данных. Для изменения свойств узлов или связей используется команда SET.
MATCH (a:Person {name: "Alice"})
SET a.age = 31;

Возраст Alice обновляется на 31.

  1. Удаление данных. Для удаления узлов или связей используется команда DELETE.
MATCH (a:Person {name: "Alice"})-[r:FRIENDS_WITH]->(b:Person {name: "Bob"})
DELETE r;

Удаляется связь FRIENDS_WITH между Alice и Bob.

  1. Поиск с условиями. Cypher поддерживает фильтрацию данных с помощью условий (WHERE).
MATCH (a:Person)
WHERE a.age > 25
RETURN a.name, a.age;

Этот запрос находит всех людей старше 25 лет и возвращает их имена и возраст.

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