Анализ графа социальных связей с Neo4j

реляционные и нереляционные базы данных примеры курсы обучение, Neo4j Cypher примеры запросов для аналитика, обучение системных и бизнес-аналитиков, курсы системный и бизнес-анализ, проектирование схемы БД, курсы бизнес-аналитик, основы баз данных, обучение системному и бизнес-анализу, Школа прикладного бизнес-анализа

Как графовые базы данных ускоряют исследование отношений между людьми по сравнению с многотабличными SQL-запросами на соединение таблиц в реляционных базах данных. Смотрим на примере NoSQL-СУБД Neo4j и ее SQL-подобного языка запросов Cypher.

Что такое Neo4j и как она работает: краткий ликбез

Большинство системных и бизнес-аналитиков хорошо знакомы с реляционными базами данных, информация в которых хранится в таблицах с жестко заданной структурой. Однако, это преимущество строгой типизации полей и табличная организация хранения данных походят не для всех сценариев применения. Поэтому полезно знать и про NoSQL-базы, которые предназначены для хранения больших объемов данных со сложной или изменяющейся структурой. Недавно я писала про одну из таких СУБД на примере документо-ориентированного хранилища MongoDB. Продолжая эту тему про ключевые компоненты архитектуры информационных систем, сегодня рассмотрим другой вид нереляционных баз данных, графовую СУБД Neo4j. Эта система хранит данные в виде графа знаний, который состоит из вершин и соединяющих их ребер. Поэтому Neo4j отлично решает задачи на графах, такие как поиск оптимального пути в логистике, информационных или электротехнических сетях, выявление сообществ и анализ социальных связей. Именно это рассмотрим далее, чтобы сравнить, насколько быстрее и легче задача выявления связей между людьми решается в Neo4j по сравнению с реляционными СУБД.

Основы архитектуры и интеграции информационных систем

Код курса
OAIS
Ближайшая дата курса
20 мая, 2024
Продолжительность
12 ак.часов
Стоимость обучения
27 000 руб.

Анализ социальных связей в реляционной СУБД на примере PostgreSQL

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

Человек 1 Человек 2 Отношения
Саша Маша деловые, работают вместе в отделе продаж
Петя деловые, работают вместе по проектам
Леша семейные, Саша и Леша братья и живут в одном доме
Кира дружеские, вместе ходят в клуб любителей йоги
Ира деловые, работают вместе в отделе продаж
Сережа Катя любовные, Катя встречается с Сережей, они живут вместе
Костя дружеские, вместе играют в шахматы в районном клубе
Петя дружеские, вместе катаются на лыжах
Маша Костя любовные, Маша встречается с Костей, они живут вместе
Ира дружеские, вместе ходят в клуб любителей йоги
Кира Леша деловые, работают вместе по проектам

Если хранить данные по этим людям и их взаимосвязям в реляционной базе, потребуется как минимум 4 таблицы для представления схемы в 3-ей нормальной форме:

  • таблица person – справочник людей, о которых идет речь в рассматриваемом кейсе;
  • таблица relation – справочник видов связей, какие могут быть отношения между людьми (деловые, дружеские, семейные, любовные);
  • таблица place – справочник мест, где возникают отношения между людьми (отдел проектов или продаж на работе, дом, клуб, бар и пр.);
  • person_relation – таблица с отношениями между парами людей.
SQL схема данных PostgreSQL
ER-схема и примеры заполненных таблиц данных для PostgreSQL

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

Например, следующий запрос покажет список людей, которые связаны деловыми отношениями:

select pers1.per_name as A, pers2.per_name as B, rel_name, pl_name
from persons.person_relation as rels
join persons.person as pers1 on pers1.per_id=rels.pr_per1
join persons.person as pers2 on pers2.per_id=rels.pr_per2
join persons.relation as rel on rel.rel_id=rels.pr_rel
join persons.place as pl on pl.pl_id=rels.rel_pl
where rels.pr_rel=1

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

Анализ социальных связей в графовой СУБД

Чтобы построить граф связи в Neo4j, откроем ее веб-консоль по адресу https://console.neo4j.org/ и введем там следующий запрос на создание узлов (людей) и отношений между ними (связей):

create (Sasha:Sales {name: 'Саша'}), (Masha:Sales:Home3 {name: 'Маша'}), (Petya:Projects {name: 'Петя'}), (Lesha:Home1 {name:'Леша'}), (Kira:YogaClub {name: 'Кира'}), (Ira:Sales {name: 'Ира'}), (Serg:Home2:SkiClub {name: 'Сережа'}), (Katya:Home2 {name: 'Катя'}), (Kostya:ChessClub:Home3 {name: 'Костя'}), (Sasha)-[:deals]->(Masha), (Sasha)-[:deals]->(Petya), (Sasha)-[:family]->(Lesha), (Sasha)-[:friend]->(Kira), (Sasha)-[:deals]->(Ira), (Serg)-[:loves]->(Katya), (Serg)-[:friend]->(Kostya), (Serg)-[:friend]->(Petya), (Masha)-[:loves]->(Kostya), (Masha)-[:friend]->(Ira), (Kira)-[:deals]->(Lesha)

Сделаем к этому графу социальных связей несколько запросов. Например, выясним, кто с кем связан деловыми отношениями (deals). Для этого следует написать простой запрос сопоставления (MATCH) на внутреннем SQL-подобном языке запросов Cypher, который поддерживает Neo4j:

match (n)-[r:deals]-(m) return n.name, m.name

В ответ вернется таблица сопоставления узлов, которые связаны деловыми отношениями. Усложним MATCH-запрос, добавив фильтрацию. К примеру, найдем, с кем дружит Сережа, т.е. с какими узлами графа узел с этим именем связан отношениями friends. Для этого напишем следующий Cypher-запрос:

match (n{name: 'Сережа'})-[r:friend]-(m) return n.name, m.name
NoSQL-СУБД Neo4j Cypher
примеры Cypher-запросов к NoSQL-СУБД Neo4j

Разумеется, это далеко не все примеры запросов, которые можно делать в Neo4j с помощью Cypher, анализируя граф социальных связей. Также эта NoSQL-СУБД поддерживает алгоритмы работы со графами, включая определение меры центральности и степени связанности, алгоритм Дейкстры для нахождения оптимального пути и другие инструменты решения графовых задач.

Познакомиться с этой NoSQL-СУБД и другими нереляционными базами данных в рамках изучения основ архитектуры и интеграции информационных систем вы сможете на курсах Школы прикладного бизнес-анализа в нашем лицензированном учебном центре обучения и повышения квалификации системных и бизнес-аналитиков в Москве:

 

Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.

Источники

  1. https://console.neo4j.org/
  2. https://neo4j.com/developer/cypher/

Добавить комментарий

Поиск по сайту

Напишите нам, мы онлайн!