Neo4j (или любой граф DB) я должен моделировать все отношения, даже если отношения могут быть определены с помощью графа - PullRequest
2 голосов
/ 14 марта 2019

Я только начал изучать Neo4J, чтобы отслеживать собственные приложения, использующие SQL Server, для таблиц и столбцов, которые используют эти приложения.

[Фон] В настоящее время мы реорганизуем несколько наших монолитных приложений в приложения на основе микросервисов. Все эти монолиты имеют общую базу данных, и эта база данных будет источником правды, пока этот процесс не будет завершен. Мы видим, что по мере роста этих усилий нам нужно будет отслеживать, какие приложения используют какие таблицы и, в частности, какие столбцы в этих таблицах.

Что нам нужно знать, так это «Если одному приложению необходимо изменить столбец в таблице, какие другие микросервисы необходимо оценить на предмет возможных негативных последствий этих изменений?» (да) Я знаю, что «настоящий» микросервис будет поддерживать собственный источник правды и ссылаться на другие службы, чтобы получить доступ к данным, которые не находятся под их контролем. Этот проект предназначен для отслеживания этих данных в процессе конвертации. По сути, в первый день мы не будем волшебным образом включать несколько десятков сервисов со своими собственными источниками данных.

[Вопрос] У меня вопрос такой.

У меня есть три типа узлов (Таблица, Столбец, Приложение). Я сопоставил отношения между Столбец -> Таблица и из Приложения -> Столбец, но я должен сопоставить отношение из Приложения -> Таблица, поскольку я могу перемещаться по графику, как это приложение -> Столбец -> Таблица

Посмотрите на диаграммы, чтобы получить наглядное представление о том, что я имею в виду.

Я включил код Cypher для создания графика.

Я знаю, что в общей схеме вещей я в основном спрашиваю о ТРИ (3) отношениях (в моей выборке), так зачем даже беспокоиться, так как эти отношения складываются по сравнению с количеством отношений столбцов (просто добавьте их уже ).

Причина вопроса заключается в правильности и изучении лучших практик.

Спасибо за отзыв.

enter image description here

enter image description here

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

CREATE (Customers:Table {Name:'Customers'})

CREATE (CustomerId:Column {Name:'CustomerId'})
CREATE (FirstName:Column {Name:'FirstName' })
CREATE (LastName:Column {Name:'LastName' })
CREATE (Address1:Column {Name:'Address1' })
CREATE (City:Column {Name:'City' })
CREATE (State:Column {Name:'State' })
CREATE (Cellphone:Column {Name:'Cellphone' })
CREATE (eMail:Column {Name:'eMail' })

CREATE (App_1:App {Name:'Call Back system'})
CREATE (App_2:App {Name:'Support'})
CREATE (App_3:App {Name:'Marketing'})


 
CREATE (CustomerId)-[:CONTAINED_IN]->(Customers)
CREATE (FirstName)-[:CONTAINED_IN]->(Customers)
CREATE (LastName)-[:CONTAINED_IN]->(Customers)
CREATE (Address1)-[:CONTAINED_IN]->(Customers)
CREATE (City)-[:CONTAINED_IN]->(Customers)
CREATE (State)-[:CONTAINED_IN]->(Customers)
CREATE (Cellphone)-[:CONTAINED_IN]->(Customers)
CREATE (eMail)-[:CONTAINED_IN]->(Customers)

//App 1
CREATE (App_1)-[:REFERENCES]->(Customers)
CREATE (App_1)-[:USES]->(CustomerId)
CREATE (App_1)-[:USES]->(FirstName)
CREATE (App_1)-[:USES]->(LastName)
CREATE (App_1)-[:USES]->(Cellphone)

//App 2
CREATE (App_2)-[:REFERENCES]->(Customers)
CREATE (App_2)-[:USES]->(CustomerId)
CREATE (App_2)-[:USES]->(FirstName)
CREATE (App_2)-[:USES]->(LastName)
CREATE (App_2)-[:USES]->(Address1)
CREATE (App_2)-[:USES]->(City)
CREATE (App_2)-[:USES]->(State)

 //App 3
CREATE (App_3)-[:REFERENCES]->(Customers)
CREATE (App_3)-[:USES]->(CustomerId)
CREATE (App_3)-[:USES]->(FirstName)
CREATE (App_3)-[:USES]->(LastName)
CREATE (App_3)-[:USES]->(eMail)
;

1 Ответ

0 голосов
/ 14 марта 2019

Не следует вводить избыточные отношения, если вы не уверены наверняка, что они необходимы в вашей модели данных (например, профилирование важных сценариев использования показало, что способность выполнять 1 переход вместо 2 приводит к необходимому улучшению производительности).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...