应该顶点'类型'是一个属性还是另一个顶点?

时间:2014-10-23 20:43:31

标签: graph-databases gremlin titan

Here他们已将类型设置为每个顶点的属性。但是,如果我想给类型一些属性呢?在这种情况下,创建一个顶点来表示一个类型并让每个其他顶点都有一个“类型”边缘会不会更有意义?否则我最终会复制一个类型的属性。

如果我想要检索特定类型的所有顶点,这个额外的间接层会对性能产生重大影响吗?

2 个答案:

答案 0 :(得分:6)

我看到了泰坦标签,所以我要给出一个特定于泰坦的答案。

使用Titan,您可以向属性添加属性。因此,如果您使用属性而不是Vertex Labels标记类型,那么您肯定可以添加元属性。

也就是说,类型通常使用“顶点标签”和“边缘标签”进行建模。属性类型,顶点标签和边缘标签都实际存储为顶点。因此,如果您想将架构元数据或本体信息附加到Titan类型(顶点标签,边缘标签和属性类型),那么您也可以这样做。

答案 1 :(得分:2)

它取决于答案?

您可以使用链接键入节点。例如,如果你想模拟一个人拥有CS学位并且CS学位是BS学位的类型,而BS学位又是本科学位的类型,并且你希望能够作为你的查询的一部分参考,那么使用链接到类型以指示节点类型。

如果您不想在图表中建模类型层次结构,那么:

如果您的用例是使用特定类型的所有实体启动查询,并且您没有属性索引,那么您可以从已知的起点遍历“类型”节点到“特定类型”节点从那里到那种类型的所有节点。如果您有属性索引,您还可以在每个节点上放置一个type属性,并使用索引查找所需类型的节点。

如果用例是按类型mid-query过滤节点,则使用属性可以实现更清晰的过滤步骤。两种选项的替代方法是为每个源类型/目标类型对使用唯一关系标签。例如,如果一个人“拥有”朋友和一个人“有”东西,你可以通过将你的模型更改为“有朋友”的朋友和人“拥有”东西来保存节点类型的过滤器。

如果上述所有方法都无济于事,我建议您考虑如何查询模型并更自然地选择适合您问题的方法。