Titan + d3 для визуализации компьютерной сети

Я экспериментировал с Титаном в течение последних нескольких недель и хотел бы получить некоторые указания на пути вперед, а также несколько конкретных вопросов. Цель проекта — хранить данные журнала в кластере Cassandra (для этого вопроса давайте воспользуемся примером веб-трафика) и представлять отношения в графе Titan. Все узлы моделируются как имеющие значение и тип объекта (например, «google.com», «имя хоста»), а ребра имеют метку (например, «подключения»), а также несколько атрибутов отношения (отметка времени, длина потока и т. д.). на).

Как только эти данные будут сохранены в cassandra и представлены в виде графика Titan, я планирую использовать код d3 для создания визуализаций. В конце туннеля я надеюсь, что смогу создавать крупномасштабные, интерактивные, сложные графовые сети, которые будут выглядеть примерно так: http://goo.gl/CVEd55

Моя текущая настройка выглядит следующим образом:

  • Сценарий Python для преобразования файлов журнала в файлы vertices.csv и edges.csv для загрузки Gremlin.
  • Titan Server 0.4 (с использованием CassandraThrift в качестве серверной части хранилища) — скрипт гремлина для загрузки преобразованных данных в Титан.
  • Сценарий Python, который использует NetworkX для открытия соединения RexPro, позволяя аналитику вводить собственный запрос Gremlin и выводить результат в виде JSON.
  • Локальный веб-интерфейс, который использует сгенерированный JSON и d3 для отображения результатов запроса в виде графика.

В идеале в качестве тестового базового случая я хотел бы, чтобы пользователь мог ввести запрос Gremlin в веб-интерфейс и был направлен на страницу, содержащую интерактивный график d3 результата.

Мои конкретные вопросы заключаются в следующем:

  1. Каков процесс назначения атрибутов ребрам? У меня возникли проблемы с поиском примера кода, который помогает мне представить график с использованием модели, указанной выше.

  2. Мой скрипт gremlin для загрузки данных в Titan использует bg.commit() для создания пакетного графика, на который позже ссылаются в соединении с RexPro conn= RexProConnection('localhost,8184,'bg'). Первоначально это работало, но после изменения моего сценария загрузки, очистки графика в Gremlin и последующей перезагрузки соединение RexPro не может быть открыто из-за того, что график bg явно не существует. Как происходит процесс обновления графиков в Титане? Предположительно, запуск скрипта загрузки дважды с использованием одного и того же графа только добавит узлы/вершины к существующему, поэтому как мне создать новый граф с тем же именем каждый раз, когда я обновляю свою модель, и чтобы RexPro мог ссылаться на него? при выполнении запроса?

  3. Насколько легко было бы расширить интерфейс, чтобы позволить аналитику вводить SQL-запросы во внешний интерфейс, используя RexPro для доступа к графику способом, аналогичным описанному?

Извините за длинный пост, но если кто-то может поделиться своим опытом, мы будем очень признательны!


person adaml288    schedule 27.11.2013    source источник


Ответы (2)


Для визуализации d3 вы можете использовать направленный граф. Есть несколько их вариаций.

График отношений https://vida.io/documents/qZ5SJdRJfj3XmSXYJ

Принудительное дерево компоновки https://vida.io/documents/sy7vzWW7BJEvKdZeL

Если ваша сеть содержит большое количество узлов и ребер, вам необходимо сгруппировать данные перед визуализацией. Вы можете использовать такие инструменты, как Gephi, NodeXL, для выполнения кластеризации. Затем используйте кластеризованные данные для построения направленной визуализации.

person Phuoc Do    schedule 02.12.2013

Каков процесс назначения атрибутов ребрам?

Процесс аналогичен добавлению свойств к вершинам. Получите экземпляр Edge, затем выполните:

Edge e = g.addEdge(v1,v2,'label')
e.setProperty('weight',0.1d)

Что касается:

Как происходит процесс обновления графиков в Титане? Предположительно, запуск скрипта загрузки дважды с использованием одного и того же графа только добавит узлы/вершины к существующему, поэтому как мне создать новый граф с тем же именем каждый раз, когда я обновляю свою модель, и чтобы RexPro мог ссылаться на него? при выполнении запроса?

Вам не нужна ссылка на BatchGraph после загрузки, поскольку она имеет ограничения. что помешает вам запрашивать. Похоже, вы должны просто настроить «свой график» в rexster.xml, когда вы загружаетесь через свой скрипт, просто оберните свой rexster.xml настроенный Graph в свой код и выполните операции загрузки против него. Если вы хотите запросить его, просто укажите «yourgraph» вместо «bg».

conn = RexProConnection('localhost,8184,'yourgraph')

Насколько легко было бы расширить интерфейс, чтобы позволить аналитику вводить SQL-запросы во внешний интерфейс, используя RexPro для доступа к графику способом, аналогичным описанному?

Трудно сказать, насколько это «легко», поскольку это зависит от факторов, не связанных только с технологией. Я скажу, что можно создать интерфейс, который принимает запросы Gremlin (вы написали SQL, но я предполагаю, что вы имели в виду Gremlin), передает их Rexster и возвращает ответ. Что вы будете делать с этим ответом, зависит от вас, но что касается роли Рекстера, я не понимаю, почему это может быть проблемой.

person stephen mallette    schedule 27.11.2013
comment
привет Степан, спасибо за ответ! Объяснение свойств ребер действительно полезно. Что касается пакетных графиков - в настоящее время у меня есть код в сценарии загрузки Gremlin, который создает график g, за которым следует пакетный график с использованием g. Вся загрузка данных выполняется с помощью функций bg, но в моем скрипте визуализации Python NetworkX запросы выполняются с использованием g. Кажется, это работает нормально. Правильно ли я говорю, что как только вы создаете пакетный граф из обычного, обновление ссылок на g также обновляет bg? - person adaml288; 28.11.2013
comment
Продолжая последний комментарий, поскольку у меня закончились строки: Извините, если мой третий вопрос вас немного смутил. Я имел в виду, что у меня уже есть интерфейс, который позволяет пользователю вводить запрос Gremlin в веб-интерфейсе, чтобы сгенерировать график на основе запроса. Я сделал это, установив соединение RexPro и передав запрос. На самом деле я ищу что-то, что позволит аналитикам, которые могут быть не знакомы с Gremlin, писать простые запросы для возврата данных аналогичным образом. Так что либо CQL, SPARQL или аналогичный. Удачи снова. - person adaml288; 28.11.2013
comment
Если вы создадите g, не определив его в rexster.xml, он будет недоступен за пределами этого сеанса RexPro (я предполагаю, что вы используете сеансовую связь через RexPro). Если это нормально, то да, вы сможете повторно использовать ссылку g (не используйте bg для запросов, так как это не будет работать должным образом. - person stephen mallette; 28.11.2013
comment
Я думаю, можно передать SPARQL, но вам нужно написать какую-то пользовательскую функцию, которая его обработает. Другими словами, вам нужно было бы написать функцию, о которой знал Рекстер, например executeSparql, а затем, когда пользователь ввел запрос SPARQL, вам пришлось бы обернуть этот запрос внутри этой функции. Я думаю, что это сработает, но никогда не пробовал ничего подобного. - person stephen mallette; 28.11.2013