OrientDB:边缘与链接列表与链接映射

OrientDB : Edges vs LinkList vs Linkmap

使用 linklistlinkmapedge 来存储顶点之间的关系有哪些优点和缺点?

边定义了两个顶点之间的关系。例如,您定义了两个顶点,Person 和 Car。然后定义边缘驱动器。这条边将两个顶点连接在一起。 "Jane" 驱动器 "Ford"。

链接列表是 class 与另一个 class 关联的列表。汽车 class 可能有零件 class 的零件链接列表。一辆汽车由多个部分组成。

链接映射是键映射,class 值与另一个 class 关联。汽车 class 可能具有 PartType、Part 的链接映射。一辆汽车由多个部分组成,可以按发动机、车身、底盘等进行分组

来的有点晚,不过最近也在找这个答案,想明白了一些。

OrientDB 中的链接提供相当于关系数据库世界中的 foreign-key 关系。如果您将表视为 类,则 link 连接两个 类

在他们的 3.0 手册中 http://orientdb.com/docs/3.0.x/sql/SQL-Introduction.html 和 No JOINS 部分,他们声明

  SELECT * FROM Employee WHERE city.country.name = 'Italy'

他们在手册中没有告诉你的是,这些来自 linked 表而不是图形关系。

为了在图形技术中发挥作用,首先您需要创建一条边。我会把它标记为 locatedIn 所以

  Employee => `locatedIn` => City

而且还来自城市记录

 City => `ofCountry` => Country

那么基于图形的 OrientDB 查询可能是。

 SELECT * FROM Employee WHERE out(“locatedIn”).out(“ofCountry”) = “Italy”

你可能会想,这看起来要复杂得多。它是。但是只是在稍后的某个时候说另一个名为 salesTerrotiry 的 Edge 关系用于该员工 被其他人添加然后可以这样遍历和发现

 TRAVERSE * FROM Employee MAXDEPTH = 2

在那里你会发现新的 salesTerritory 边会被发现。这就是 ad-hoc 几乎任何深度的关系发现都非常容易使用图形数据库。如果您已在关系数据库中实现此功能,则需要探索新 FK 的架构。可行,但要复杂得多。