关于理解ArangoDB中图形创建的必要性

时间:2016-05-31 01:29:28

标签: graph arangodb

我不了解在ArangoDB中创建图表的必要性。

例如,请参阅以下AQL,

// Paths between 2 vertices

FOR p IN TRAVERSAL(person, knows, "person/person3", "outbound", {
  paths: true, filterVertices: [{_id: "person/person2"}],
  vertexFilterMethod: ["exclude"]}) RETURN p.path.vertices[*].name 

//All connected Vertices for a given Vertex..**

FOR p IN PATHS(person, knows, "outbound")
  FILTER p.source._id == "person/person5"
  RETURN p.vertices[*].name

以上两个查询显然与图表有关...但您无需创建图表即可使其工作。

为什么以及何时应该创建图表?

如果我创建图表,我会获得哪些优势?

1 个答案:

答案 0 :(得分:0)

ArangoDB中的

Creating or registering a 'graph'是可选的。其目的是在修改期间保持图形持久性。

您可以在集合中使用文档要素和图遍历的组合,而无需参考图表。

但是,上面图形定义的一个主要目的是在修改边或顶点时使用它。顶点集合中的顶点文档可以从多个边集合中的多个边缘文档中引用,这些边集合在术语中属于多个图形。

当你现在remove a vertex via a graph API时,查询所有这些图形定义是否允许边指向这个非常特殊的顶点集合。随后搜索并移除所有可能边集合中的所有边。所有这些都是通过事务安全来完成的。

通过这样做,可以保持所提到的图形持久性。图形持久性意味着您没有指向先前删除的顶点的悬空边缘。

Plesae请注意,您应该使用pattern matching traversals;人们可以改写

FOR p IN TRAVERSAL(person, knows, "person/person3", "outbound", {
  paths: true, filterVertices: [{_id: "person/person2"}],
  vertexFilterMethod: ["exclude"]}) RETURN p.path.vertices[*].name

像这样使用更现代的模式匹配:

FOR v, e, p IN 1..20 OUTBOUND "person/person3"
  FILTER v._ID != "person/person2"
  RETURN p.vertices[*].name