标签: graph-databases

Cypher:查找由 ID 标识的两个节点之间的最短路径

这个密码查询是否正确?我试图根据节点 ID 找到两个节点之间的最短路径:

MATCH (martin:RoadNode {id:16814}),(oliver:RoadNode {id:16820}),
p = shortestPath((martin)-[*..15]-(oliver))
RETURN p
Run Code Online (Sandbox Code Playgroud)

它确实执行没有错误,但它返回 0 行,尽管我希望它找到一条路径。

neo4j graph-databases cypher

2
推荐指数
1
解决办法
6112
查看次数

在 ArangoDB 中快速向文档添加边缘计数

不太复杂:我想计算每个文档的边缘并将数字保存在文档中。我提出了两个有效的查询;不幸的是,因为我有数百万条边,所以两者都非常慢。是否有一种更快的方法来使用存储边数的属性来更新文档?(只是某个时间点的计数)

功能正常但速度缓慢的 AQL 查询:

FOR doc IN Documents
    LET inEdgesCount  = LENGTH(GRAPH_NEIGHBORS('edgeGraph', doc,{direction: 'inbound', maxDepth:1})
    LET outEdgesCount = LENGTH(GRAPH_NEIGHBORS('edgeGraph', doc,{direction: 'outbound', maxDepth:1})
    UPDATE doc WITH {inEdgesCount: inEdgesCount, outEdgesCount: outEdgesCount} In Documents
Run Code Online (Sandbox Code Playgroud)

或者:

FOR e IN Edges
    COLLECT docId = e._to WITH COUNT INTO counter
    UPDATE SPLIT(docId,'/')[1] WITH {inEdgeCount: counter}
Run Code Online (Sandbox Code Playgroud)

(然后对出站边缘重复)


顺便说一句,有什么方法可以查看查询速度(例如每秒执行 FOR 的次数)或完成百分比吗?我一直试图通过使用有限的查询来判断速度,但所需的时间似乎并不是线性扩展的。

graph-databases arangodb

2
推荐指数
1
解决办法
1303
查看次数

存储聊天消息图数据库 Neo4j 的最佳方式

我将使用 neo4j 实现聊天应用程序。我将每条消息存储为图中的一个节点,但这可能会产生数十亿个节点。可以吗?

database neo4j graph-databases

2
推荐指数
1
解决办法
3169
查看次数

如何查询 ArangoDB 中的修订历史记录?

_rev在 ArangoDB 中创建的每个文档中都看到了 ,但我还没有看到有关使用这些修订来访问文档的更改历史记录的任何信息。更具体地说,如何查询特定文档的修订历史记录,以便及时查看以前的版本甚至特定版本?

nosql graph-databases arangodb aql

2
推荐指数
1
解决办法
1698
查看次数

具有前端和高级功能的图形数据库

我正在尝试可视化一些数据。为此,我将一个很小的有向图插入到 Neo4j 中(他们的沙箱使 BTE 足够低)。该图现在达到了 700 个节点和 500 条边(不是那么大的 IMO),现在对于 Neo4js 前端来说似乎太多了。每当我尝试显示超过 200 条边时,HTML UI 都会无响应且没有反馈。

现在我想知道是否有:

  1. 连接到 Neo4j 的 UI,可以可视化具有超过 1000 个节点/1000 条边的图形。
  2. 图形数据库(加上 UI),经证明可以处理更大的数据集
  3. 任何支持编辑的 UI

我不太关心性能,而是关心可视化我的数据。

graph neo4j graph-databases

2
推荐指数
1
解决办法
823
查看次数

TinkerPop 图中的深度优先树遍历

给定一个树结构的 TinkerPop 图,其顶点由标记的父子关系 ( [parent-PARENT_CHILD->child]) 连接,遍历和查找所有这些节点的惯用方法是什么?

我是图形遍历的新手,因此使用递归函数遍历它们似乎或多或少很简单:

Stream<Vertex> depthFirst(Vertex v) {
  Stream<Vertex> selfStream = Stream.of(v);
  Iterator<Vertex> childIterator = v.vertices(Direction.OUT, PARENT_CHILD);
  if (childIterator.hasNext()) {
    return selfStream.appendAll(
      Stream.ofAll(() -> childIterator)
        .flatMap(this::depthFirst)
    );
  }
  return selfStream;
}
Run Code Online (Sandbox Code Playgroud)

(注意本示例使用Vavr流,但 Java 流版本类似,只是稍微冗长一些。)

我认为图原生实现的性能会更高,尤其是在内存中 TinkerGraph 以外的数据库上。

但是,当我查看 TinkerPop tree recipes 时,不清楚repeat()/until()等的哪种组合适合做我想做的事。

如果我只想找到那些具有特定标签的顶点(叶子或分支),同样,我可以看到如何使用上面的函数来做到这一点:

Stream<Vertex> nodesWithMyLabel = depthFirst(root)
  .filter(v -> "myLabel".equals(v.label()));
Run Code Online (Sandbox Code Playgroud)

但这远不是很明显,这是有效的,我认为必须有更好的图形原生方法。

java graph-databases gremlin tinkerpop3

2
推荐指数
1
解决办法
927
查看次数

Janusgraph - 检查和获取两个顶点之间边缘的有效方法

我试图使用 Scala 探索 janusgraph。

因此,对于给定的顶点 v1 和 v2,我想判断是否存在从 v1 到 v2 具有特定属性值的有向边并检索该边。

在gremlin中,我们通常会做一个,

g.V(v1).outE().where(otherV().is(v2)).hasNext()检查边缘是否存在并 ed = g.V(v1).outE().where(otherV().is(v2)).next()获取边缘。

那么,scala中对应的查询是什么?似乎不能以otherV()类似的方式使用。

谢谢。

scala graph-databases gremlin janusgraph

2
推荐指数
1
解决办法
1211
查看次数

为什么 JanusGraph 的 addVertex() 比图遍历的 addV() 慢得多?

我正在使用 JanusGraph 将顶点添加到 cassandra 支持的数据库中,我注意到在添加顶点时存在很大的性能差异(1)JanusGraph java 库提供的 addVertex() 方法 vs (2) addV( ) gremlin 遍历函数。为什么会有这样的差异?

我使用JanusGraph版本0.2.0cql作为存储后端。我创建了一个测试,该测试使用三种方法比较将顶点添加和提交到图形所需的时间(以毫秒为单位):(1)addV()gremlin 函数,(2)addV()gremlin 函数,然后执行一个next()步骤来获取新创建的顶点,以及(3 ) JanusGraphaddVertex()方法。我从一个完全空的图形存储开始。我使用的代码可以在下面找到。

final Builder builder = JanusGraphFactory.build()
        .set("storage.backend", "cql")
        .set("storage.hostname", Config.get(CommonConfig.cassandra_host));

final JanusGraph graph = builder.open();

long nowMillis = TimeUtils.nowMillis();
graph.traversal().addV("myLabel");
graph.traversal().tx().commit();
System.out.println("(1) - Add vertex traversal only took " + (TimeUtils.nowMillis() - nowMillis) + " millis");

nowMillis = TimeUtils.nowMillis();
graph.traversal().addV("myLabel").next();
graph.traversal().tx().commit();
System.out.println("(2) - Add vertex traversal and next took …
Run Code Online (Sandbox Code Playgroud)

graph-databases gremlin tinkerpop janusgraph

2
推荐指数
1
解决办法
1327
查看次数

如何在 gremlin python 中使用“as”关键字?

当尝试将我在 Gremlin CLI 中编写和测试的查询转换为 gremlin-python 时,我unexpected token 'as'的表达式遇到错误.as('foo')as使用 gremlin-python 时如何使用 Gremlin关键字?

graph-databases gremlin amazon-neptune gremlinpython

2
推荐指数
1
解决办法
1392
查看次数

Azure Cosmos db Gremlin elementMap()

我试图在 cosmos db 中创建一个 gremlin 查询,其中所有顶点的属性都被展平。

我取得的最好成就是使用“valueMap”

询问

g.V('12345').valueMap(true))
Run Code Online (Sandbox Code Playgroud)

结果

{
   "id": "12345",
   "label": "product",
   "name": [
     "product name"
   ],
   "description": [
     "productdescription"
   ],
}
Run Code Online (Sandbox Code Playgroud)

我想要实现的目标

{
   "id": "12345",
   "label": "product",
   "name": "product name",
   "description": "productdescription"
}
Run Code Online (Sandbox Code Playgroud)

看起来 elementMap 是正确的方法,但 Cosmos Db 似乎不支持它。

是否有不支持此功能的原因或是否存在类似的解决方案?

azure graph-databases gremlin azure-cosmosdb azure-cosmosdb-gremlinapi

2
推荐指数
1
解决办法
616
查看次数