OrientDB:Edges vs LinkList vs Linkmap

时间:2015-07-01 16:22:35

标签: graph orientdb

使用linklistlinkmapedge来存储我的顶点之间的关系有什么优缺点?

2 个答案:

答案 0 :(得分:11)

边缘定义两个顶点之间的关系。例如,您定义两个顶点,Person和Car。然后定义边缘驱动器。该边缘将两个顶点连接在一起。 "简"驱动"福特"。

链接列表是与另一个类关联的类的列表。 Car类可能包含Part类中的部件链接列表。汽车由多个部分组成。

linkmap是键的映射,类值与另一个类相关联。汽车类可能有PartType,Part的链接映射。汽车由多个部件组成,可按发动机,车身,底盘等分组。

答案 1 :(得分:0)

到达的时间有点晚,但是我最近正在寻找这个答案,并弄清楚了一点。

OrientDB中的链接在关系数据库世界中提供了等效的外键关系。如果您将表视为类,则链接将在两个类之间连接

他们在http://orientdb.com/docs/3.0.x/sql/SQL-Introduction.html下的“ 3.0手册”和“没有加入”部分中声明

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

他们在手册中没有告诉您的是这些是来自链接表而不是来自图关系。

要使它在Graph技术中起作用,首先需要创建一个边。我会像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边。在这里,使用Graph DB可以轻松发现几乎任何深度的临时关系。如果已在关系数据库中实现了此功能,则需要探索新FK的架构。可行,但要复杂得多。