Этот пример показывает, как анализировать зависимости среди сервисов в сети с помощью интерфейса MATLAB® для Neo4j®. Примите, что у вас есть данные о графике, которые хранятся на базе данных Neo4j®, которая представляет сеть. Эта база данных имеет семь узлов и семь отношений. Каждый узел имеет только один ключ name
уникального свойства со значениями Service1
через Service7
. Каждое отношение имеет, вводят DEPENDS_ON
.
Чтобы найти количество сервисов, каждый сервис зависит от, используйте интерфейс MATLAB® для Neo4j® и объекта digraph
. Для получения дополнительной информации об интерфейсе MATLAB® к Neo4j®, смотрите Рабочий процесс Базы данных Графика для Интерфейсов БД Neo4j.
Локальная машина размещает базу данных Neo4j® с номером порта 7474
, имя пользователя neo4j
и пароль matlab
. Для визуального представления данных в базе данных смотрите эту фигуру.
Создайте объект neo4jconn
связи Neo4j® с помощью http://localhost:7474/db/data
URL, имени пользователя neo4j
и пароль matlab
.
url = 'http://localhost:7474/db/data'; username = 'neo4j'; password = 'matlab'; neo4jconn = neo4j(url,username,password);
Проверяйте свойство Message
объекта neo4jconn
связи Neo4j®. Пустое свойство Message
указывает на успешную связь.
neo4jconn.Message
ans = []
Получает все отношения типа DEPENDS_ON
и все узлы, сопоставленные с каждым отношением.
network_graphdata = searchGraph(neo4jconn,{'DEPENDS_ON'})
network_graphdata = struct with fields:
Nodes: [7×3 table]
Relations: [7×5 table]
Используя таблицу network_graphdata.Nodes
, получите доступ к свойству name
для каждого узла, который появляется в переменной NodeData
таблицы.
Присвойте таблицу network_graphdata.Nodes
nodestable
.
nodestable = network_graphdata.Nodes
nodestable=7×3 table
NodeLabels NodeData NodeObject
__________ ____________ ___________________________________
6 'Service' [1×1 struct] [1x1 database.neo4j.http.Neo4jNode]
0 'Service' [1×1 struct] [1x1 database.neo4j.http.Neo4jNode]
4 'Service' [1×1 struct] [1x1 database.neo4j.http.Neo4jNode]
2 'Service' [1×1 struct] [1x1 database.neo4j.http.Neo4jNode]
3 'Service' [1×1 struct] [1x1 database.neo4j.http.Neo4jNode]
5 'Service' [1×1 struct] [1x1 database.neo4j.http.Neo4jNode]
1 'Service' [1×1 struct] [1x1 database.neo4j.http.Neo4jNode]
Присвойте имена строки для каждой строки к rownames
.
rownames = nodestable.Properties.RowNames
rownames = 7×1 cell array
{'6'}
{'0'}
{'4'}
{'2'}
{'3'}
{'5'}
{'1'}
Доступ к переменной NodeData
из nodestable
для каждой строки. nodedata
содержит массив структур.
nodedata = [nodestable.NodeData{rownames}]
nodedata = 1×7 struct array with fields:
name
Чтобы получить поле name
из каждой структуры, индексируйте в массив. nodenames
является массивом ячеек из символьных векторов, который содержит имена узла.
nodenames = {nodedata(:).name}
nodenames = 1×7 cell array
{'Service7'} {'Service6'} {'Service1'} {'Service3'} {'Service2'} {'Service4'} {'Service5'}
Создайте объект digraph
network_graph
с помощью функции neo4jStruct2Digraph
и графика network_graphdata
.
network_graph = neo4jStruct2Digraph(network_graphdata,'NodeNames',nodenames)
network_graph = digraph with properties: Edges: [7×3 table] Nodes: [7×3 table]
Чтобы видеть визуальное представление графика, создайте фигуру, которая отображает график network_graph
.
plot(network_graph,'EdgeLabel',network_graph.Edges.RelationType)
Найдите количество сервисов, что каждый сервис зависит от в графике network_graph
. Определите счет зависимости для каждого узла путем итерации через узлы в графике с помощью цикла for. Чтобы определить количество зависимости, используйте функцию nearest
.
Создайте таблицу dependency_count
, которая хранит количество зависимых сервисов для каждого сервиса. Сортировка строк в таблице зависимостью рассчитывает в порядке убывания.
dependency_count = table; for i = 1:height(network_graph.Nodes) nodeid = network_graph.Nodes.Name(i); nearest_node = nearest(network_graph,nodeid,Inf,'Direction','outgoing'); nearest_length = length(nearest_node); dependency_count = [dependency_count; ... table(nodeid,nearest_length, ... 'VariableNames',{'Node','Dependency_count'})]; end dependency_count = sortrows(dependency_count,-2)
dependency_count=7×2 table
Node Dependency_count
__________ ________________
'Service6' 5
'Service7' 3
'Service4' 2
'Service5' 2
'Service3' 1
'Service2' 1
'Service1' 0
Найдите все сервисы, что сервис Service6
зависит от в графике network_graph
с помощью функции nearest
.
disp('Service6 depends on the following services:');
Service6 depends on the following services:
nearest(network_graph,'Service6',Inf,'Direction','outgoing')
ans = 5×1 cell array
{'Service4'}
{'Service5'}
{'Service3'}
{'Service2'}
{'Service1'}
close(neo4jconn)
nearest
| neo4j
| searchNode
| searchRelation