如何使用 Titan+Cassandra 运行 分布式图数据库上的图算法?
How to run graph algorithms on distributed graph database using Titan+Cassandra?
我有一个使用 Titan+Cassandra(titan-server-0.4.4) 部署在 4 台机器上的分布式图。该图是关于呼叫详细记录的。
我有两种类型的节点——用户节点和调用节点。用户节点只包含一个 属性 "user id"。呼叫节点包含 2 个属性 - 呼叫的时间戳(日期和时间)和呼叫的持续时间。对于每个呼叫,从呼叫节点到呼叫中涉及的相应用户对有两条边。边缘包含相应用户的纬度和经度作为属性。所有属性都已编入索引。
我现在有两个问题:
给定一个特定的用户 ID,比如 "A",我如何找到 "A" 在特定时间段内呼叫的用户?
对于 运行 图形算法(如社区检测),我应该研究哪些工具?我遇到了使用 Furnace 的建议,但找不到 Furnace 的任何文档。
您可以考虑调整您的架构,通过将 date/time 放在边上来使 "call" 顶点反规范化。通过这种方式,您可以利用以顶点为中心的索引并获得更快的查询时间。
http://thinkaurelius.github.io/titan/wikidoc/0.4.4/Vertex-Centric-Indices.html
要获得您的第一个查询的答案(我假设您已非规范化并且 date/time 存储为 long on the edge),您可以执行以下操作:
g.V('user','A').as('callerA').outE.interval('time',startTime,endTime)
.inV.out.except('callerA')
至于算法,TinkerPop 在 TinkerPop2 中不支持此类内容 - Furnace 从未有过正式版本。我们期待在接近 GA 的 TinkerPop3 中有这样的东西 - http://www.tinkerpop.com/docs/3.0.0.M7/
现在,您必须自己编写。 Furnace 中有一个聚类算法,您应该能够适应您的工作 - 您可以找到它 here。如果您看一下测试,您就会知道它是如何工作的。
我有一个使用 Titan+Cassandra(titan-server-0.4.4) 部署在 4 台机器上的分布式图。该图是关于呼叫详细记录的。
我有两种类型的节点——用户节点和调用节点。用户节点只包含一个 属性 "user id"。呼叫节点包含 2 个属性 - 呼叫的时间戳(日期和时间)和呼叫的持续时间。对于每个呼叫,从呼叫节点到呼叫中涉及的相应用户对有两条边。边缘包含相应用户的纬度和经度作为属性。所有属性都已编入索引。
我现在有两个问题:
给定一个特定的用户 ID,比如 "A",我如何找到 "A" 在特定时间段内呼叫的用户?
对于 运行 图形算法(如社区检测),我应该研究哪些工具?我遇到了使用 Furnace 的建议,但找不到 Furnace 的任何文档。
您可以考虑调整您的架构,通过将 date/time 放在边上来使 "call" 顶点反规范化。通过这种方式,您可以利用以顶点为中心的索引并获得更快的查询时间。
http://thinkaurelius.github.io/titan/wikidoc/0.4.4/Vertex-Centric-Indices.html
要获得您的第一个查询的答案(我假设您已非规范化并且 date/time 存储为 long on the edge),您可以执行以下操作:
g.V('user','A').as('callerA').outE.interval('time',startTime,endTime)
.inV.out.except('callerA')
至于算法,TinkerPop 在 TinkerPop2 中不支持此类内容 - Furnace 从未有过正式版本。我们期待在接近 GA 的 TinkerPop3 中有这样的东西 - http://www.tinkerpop.com/docs/3.0.0.M7/
现在,您必须自己编写。 Furnace 中有一个聚类算法,您应该能够适应您的工作 - 您可以找到它 here。如果您看一下测试,您就会知道它是如何工作的。