Определите зависимости сервисов в сети

Этот пример показывает, как анализировать зависимости среди сервисов в сети с помощью интерфейса MATLAB® для Neo4j®. Примите, что у вас есть данные о графике, которые хранятся на базе данных Neo4j®, которая представляет сеть. Эта база данных имеет семь узлов и семь отношений. Каждый узел имеет только один ключ name уникального свойства со значениями Service1 через Service7. Каждое отношение имеет, вводят DEPENDS_ON.

Чтобы найти количество сервисов, каждый сервис зависит от, используйте интерфейс MATLAB® для Neo4j® и объекта digraph. Для получения дополнительной информации об интерфейсе MATLAB® к Neo4j®, смотрите Рабочий процесс Базы данных Графика для Интерфейсов БД Neo4j.

Локальная машина размещает базу данных Neo4j® с номером порта 7474, имя пользователя neo4j и пароль matlab. Для визуального представления данных в базе данных смотрите эту фигуру.

Соединитесь с Neo4j® Database

Создайте объект 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)

Смотрите также

| | |

Связанные примеры

Больше о