4

在过去的几周里,我一直在尝试使用 Titan,并希望在前进的道路上得到一些指示,以及一些具体的问题。该项目的目的是将日志数据存储在 Cassandra 集群上(对于这个问题,让我们使用 Web 流量的示例)并在 Titan 图中表示关系。所有节点都被建模为具有实体值和类型(例如“google.com”、“主机名”),并且边具有标签(例如“连接”)以及关系的几个属性(时间戳、流长度等)上)。

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

我目前的设置如下:

  • 一个 python 脚本,用于将日志文件转换为 Gremlin 加载的vertices.csv文件edges.csv
  • 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 回答 2

1

对于 d3 可视化,您可以使用力有向图。它们有几种变体。

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

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

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

于 2013-12-02T07:06:19.773 回答
0

将属性分配给边的过程是什么?

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

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

至于:

Titan中更新图的过程是什么?大概使用相同的图运行加载脚本两次只会将节点/顶点添加到现有的图,所以我将如何在每次更新模型时生成具有相同名称的新图,并让 RexPro 能够引用它运行查询时?

您不希望BatchGraph在加载后引用 a ,因为它具有阻止您查询的限制。听起来您应该只在中配置“yourgraph” rexster.xml,当您通过脚本加载时,只需将您的rexster.xml配置包装Graph在代码中,然后对其执行加载操作。当您想查询它时,只需引用“yourgraph”而不是“bg”。

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

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

很难说这是否“容易”,因为这取决于技术之外的因素。我会说可以构建一个接受 Gremlin 查询的接口(您编写的 SQL,但我假设您的意思是 Gremlin),将它们传递给 Rexster 并返回答案。你如何处理这个答案取决于你,但就 Rexster 的作用而言,我不明白为什么这会是一个问题。

于 2013-11-27T14:07:51.310 回答