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

Узлы представляют сущности, например, людей (Алиса, Боб, Клара, Дэвид).
Узлы могут иметь свойства, такие как возраст (возраст: 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:
- Создание данных. Чтобы создать узлы и связи, используется команда CREATE.
CREATE (a:Person {name: "Alice", age: 30}),
(b:Person {name: "Bob", age: 25}),
(a)-[:FRIENDS_WITH]->(b);
Здесь создаются два узла - Alice и Bob, и между ними создается связь FRIENDS_WITH.
- Чтение данных. Для чтения данных используется команда MATCH.
MATCH (a:Person)-[:FRIENDS_WITH]->(b:Person)
RETURN a.name, b.name;
Этот запрос находит всех людей, связанных отношением FRIENDS_WITH, и возвращает их имена.
- Обновление данных. Для изменения свойств узлов или связей используется команда SET.
MATCH (a:Person {name: "Alice"})
SET a.age = 31;
Возраст Alice обновляется на 31.
- Удаление данных. Для удаления узлов или связей используется команда DELETE.
MATCH (a:Person {name: "Alice"})-[r:FRIENDS_WITH]->(b:Person {name: "Bob"})
DELETE r;
Удаляется связь FRIENDS_WITH между Alice и Bob.
- Поиск с условиями. Cypher поддерживает фильтрацию данных с помощью условий (WHERE).
MATCH (a:Person)
WHERE a.age > 25
RETURN a.name, a.age;
Этот запрос находит всех людей старше 25 лет и возвращает их имена и возраст.
Такие базы данных используются для социальных сетей, рекомендательных систем, анализа связей, сетей знаний.