如何使用Titan + Cassandra在分布式图形数据库上运行图算法?

时间:2015-03-17 11:35:57

标签: cassandra titan

我使用 Titan + Cassandra(titan-server-0.4.4)在4台计算机上部署了分布式图表。该图表是关于呼叫详细记录。

我有两种类型的节点 - 用户节点和呼叫节点。用户节点仅包含一个属性“用户ID”。呼叫节点包含2个属性 - 呼叫的时间戳(日期和时间)以及呼叫的持续时间。对于每个呼叫,从呼叫节点到呼叫中涉及的相应用户对有两个边缘。边包含相应用户的纬度和经度作为属性。所有属性都已编入索引。

我现在有两个问题:

  1. 根据特定的用户ID,说“A”,如何找到在特定时间段内调用“A”的用户?

  2. 为了运行社区检测等图形算法,我应该研究哪些工具?我遇到了使用Furnace的建议,但找不到Furnace的任何文档。

1 个答案:

答案 0 :(得分:1)

您可以考虑通过在边缘上放置日期/时间来调整模式以使“调用”顶点非规范化。通过这种方式,您可以利用以顶点为中心的索引并查看更快的查询时间。

http://thinkaurelius.github.io/titan/wikidoc/0.4.4/Vertex-Centric-Indices.html

要获得第一个查询的答案(我假设你是非规范化的,并且日期/时间存储为边长),你可以这样做:

g.V('user','A').as('callerA').outE.interval('time',startTime,endTime)
    .inV.out.except('callerA')

至于算法,TinkerPop不支持TinkerPop2中的这类东西 - Furnace从未有过官方版本。我们期待TinkerPop3中的这些东西更接近GA - http://www.tinkerpop.com/docs/3.0.0.M7/

现在,您必须自己编写。在Furnace中有一个聚类算法,您应该能够适应您的工作 - 您可以找到它here。如果您查看测试,可以看看它是如何工作的。