OrientDB 2.2:未继承E/V的类能否用于图查询及添加关联?
我来帮你理清这两个疑问,结合OrientDB 2.2的特性给你说明:
问题1:未继承自E或V的类是否仍可用于图查询?
答案是不能直接参与图引擎的查询操作。OrientDB的图查询(比如MATCH语法、TRAVERSE的图模式、或者基于路径的遍历)是完全围绕顶点(V)和边(E)的拓扑结构设计的。那些没有继承自V或E的普通文档类,OrientDB不会把它们当作图的一部分来处理——你没法用图查询语法来遍历它们之间的关联,也不能把它们和标准图类一起构建图路径。
不过你依然可以用普通的SQL查询来操作这些类,比如SELECT * FROM MyNonGraphClass,只是这和图查询的逻辑完全不同。
问题2:无继承的文档类能否添加关系/链接并用于图查询?
你确实可以给这类文档类添加LINK、LINKLIST、LINKSET这类关联属性,用来指向其他类(包括V、E或者其他文档类),但这些链接不会被图引擎识别为图的边。
举个例子:假设你有个无继承的类KeyValueStore,给它加了个LINK属性指向User(继承自V),你可以用普通SQL查询SELECT linkedUser FROM KeyValueStore WHERE key = 'xxx'来获取关联的用户,但没法用图查询的MATCH {class:KeyValueStore} --> {class:User}来遍历这个关联,因为OrientDB的图遍历只认E类定义的边。
如果后续你需要做复杂的图式查询,这种非图类的链接会让你陷入困境——你没法利用OrientDB的图优化特性,只能靠普通SQL的关联查询来处理,不仅语法繁琐,性能也会打折扣。
给你的建议
如果现在只是用它做简单键值存储没问题,但如果已经明确后续要做图相关的复杂查询,最好趁早重构:
- 如果这个类的实例是需要参与图拓扑的实体,直接修改类让它继承自
V; - 如果只是辅助存储,可以把需要关联的部分拆分到标准的图类(
V/E)中,保留这个类作为附属存储,用普通关联查询配合使用。
内容的提问来源于stack exchange,提问作者lpil

