Titan + d3用于计算机网络可视化

时间:2013-11-27 11:56:03

标签: graph cassandra visualization titan rexster

过去几周我一直在尝试Titan,并想了解前进的方向,以及一些具体问题。该项目的目的是将日志数据存储在Cassandra集群上(对于这个问题,让我们使用网络流量的例子)并在Titan图中表示关系。所有节点都被建模为具有实体值和类型(例如“google.com”,“hostname”),并且边缘具有标签(例如“连接”)以及关系的若干属性(时间戳,流量长度等)上)。

一旦这些数据存储在cassandra中并表示为Titan图,我计划使用d3代码生成可视化。在隧道的尽头,我希望能够构建如下所示的大规模,交互式,复杂的图形网络:http://goo.gl/CVEd55

我目前的设置如下:

  • 用于将日志文件转换为vertices.csvedges.csv文件以供Gremlin加载的python脚本
  • Titan Server 0.4(使用CassandraThrift作为存储后端) - 将转换后的数据加载到Titan的gremlin脚本
  • 使用NetworkX打开RexPro连接的Python脚本,允许分析人员输入自定义Gremlin查询,将结果输出为JSON
  • 使用生成的JSON和d3以图形形式显示查询结果的本地Web前端

理想情况下,作为测试基础案例,我希望用户能够在Web前端键入Gremlin查询,并将其定向到包含结果的交互式d3图表的页面。

我的具体问题如下:

  1. 为边缘分配属性的过程是什么?我无法找到帮助我使用上面列出的模型表示图表的示例代码。

  2. 我将用于将数据加载到Titan的gremlin脚本使用bg.commit()创建批处理图,稍后在RexPro连接conn= RexProConnection('localhost,8184,'bg')中引用该图表。这最初工作,但在更改我的加载脚本,清除Gremlin中的图形然后重新加载后,由于图形bg显然不存在而无法打开RexPro连接。在Titan中更新图表的过程是什么?假设使用相同的图形运行两次加载脚本只会将节点/顶点添加到现有图形中,因此每次更新模型时如何生成具有相同名称的新图形,并让RexPro能够引用它运行查询时?

  3. 扩展接口以允许分析师将SQL查询输入前端是多么容易,使用RexPro以与描述的方式类似的方式访问图表?

  4. 为长篇文章道歉,但如果有人可以分享他们的专业知识,将非常感激!

2 个答案:

答案 0 :(得分:1)

对于d3可视化,您可以使用力导向图。它们有一些变化。

关系图 https://vida.io/documents/qZ5SJdRJfj3XmSXYJ

强制布局树 https://vida.io/documents/sy7vzWW7BJEvKdZeL

如果您的网络包含大量节点和边缘,则需要在可视化之前对数据进行聚类。您可以使用Gephi,NodeXL等工具来执行群集。然后使用聚集数据构建力导向可视化。

答案 1 :(得分:0)

  

为边缘分配属性的过程是什么?

该过程与向顶点添加属性相同。获取Edge个实例然后执行:

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

至于:

  

泰坦更新图表的过程是什么?假设使用相同的图形运行两次加载脚本只会将节点/顶点添加到现有图形中,因此每次更新模型时如何生成具有相同名称的新图形,并让RexPro能够引用它什么时候运行查询?

您不希望在加载BatchGraph之后引用rexster.xmllimitations来阻止您查询。听起来你只需要在rexster.xml中配置“你的图表”,当你加载脚本时,只需将Graph配置的conn = RexProConnection('localhost,8184,'yourgraph') 包装在你的代码中,然后对它执行加载操作。如果要查询它,只需引用“yourgraph”而不是“bg”。

{{1}}
  

扩展接口以允许分析师将SQL查询输入前端是多么容易,使用RexPro以与描述的方式类似的方式访问图形?

很难说这是否“容易”,因为这取决于技术之外的因素。我会说可以构建一个接受Gremlin查询的接口(你写的SQL,但我认为你的意思是Gremlin),将它们传递给Rexster并得到答案。你对这个答案做了什么取决于你,但就Rexster的部分而言,我不明白为什么会出现问题。