Определение зависимостей услуг в сети

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

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

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

Подключение к базе данных Neo4j ®

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

См. также

| | |

Похожие примеры

Подробнее о