边集合与图的比较

4

在ArangoDB中有一件事情我不太明白:

边集合和图之间有什么区别?在哪些情况下应该选择哪个?

2个回答

7

ArangoDB中的图形是建立在文档和边缘之上的。

边缘集合在_from_to上有自动索引,可以高效地检索任何连接的文档。因为数据仍存储在常规(文档和边)集合中,所以您也可以在非图查询中使用这些集合。

图形添加了一些功能(例如查询方法、遍历)来处理数据。在ArangoDB中,您可以拥有多个图形。将“图形”视为对部分或全部数据进行分组并使其在查询中可访问的一种方式。


2
这是一个边缘:
{
  "_id": "edges/328701573688",
  "_from": "nodes/150194180348",
  "_to": "nodes/328668871224",
  "_rev": "3680146597",
  "_key": "328701573688",
  "type": "includes"
}

这是一份文档:

{
  "_id": "nodes/328668871224",
  "_rev": "3610088613",
  "_key": "328668871224",
  "name": "Gold-edged Gem",
  "type": "species"
}

你可以看到,它们之间没有根本性的区别。它们都是文档。边缘集合仅在您使用Arango数据库的图形功能时才有用。
据我理解,将集合的类型设置为“edge”告诉Arango应确保所有存储在其中的文档至少具有_to和_from属性,以便文档可以作为连接器连接两个其他文档。
一旦您拥有了一个文档集合,其文档由许多边缘文档在边缘集合中连接...现在您就有了一个图形。

我不同意“边集合仅对[...]图形有用”的说法。例如,有AQL函数可以跟随边,但它们直接使用集合,而不需要通用图形。如果您想要高效地遍历高度互连的图形并使用某种算法,则确实需要通用图形。使用什么取决于您的数据结构和用例。 - CodeManX
我想表达的是,Arango可以像MongoDB一样直接用作文档存储。对于使用它这种方式的人来说,边缘集合可以安全地忽略。 - mikewilliamson
边缘集合也是文档 :) 唯一的区别是它们具有_to_from属性,并且这些属性上有索引。 - CodeManX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接