В этом примере показано, как анализировать зависимости между службами в сети с помощью интерфейса MATLAB ® к Neo4j ®. Предположим, что данные графика хранятся в базе данных Neo4j ®, представляющей сеть. Эта база данных имеет семь узлов и семь взаимосвязей. Каждый узел имеет только один уникальный ключ свойстваname со значениями Service1 через Service7. Каждая связь имеет тип DEPENDS_ON.
Для определения количества услуг, от которых зависит каждая услуга, используйте интерфейс MATLAB ® для Neo4j ® и digraph объект. Дополнительные сведения об интерфейсе MATLAB ® с Neo4j ® см. в разделе Рабочий процесс базы данных Graph для интерфейсов базы данных Neo4j.
Локальная машина содержит базу данных Neo4j ® с номером порта7474Имя пользователя neo4j, и пароль matlab. Визуальное представление данных в базе данных см. на этом рисунке.
Создание объекта соединения Neo4j ®neo4jconn с использованием URL-адреса http://localhost:7474/db/dataИмя пользователя neo4j, и пароль matlab.
url = 'http://localhost:7474/db/data'; username = 'neo4j'; password = 'matlab'; neo4jconn = neo4j(url,username,password);
Проверьте Message свойство объекта соединения Neo4j ®neo4jconn. Бланк 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