我已经研究了Tinkerpop技术栈很长一段时间。我认为我对它的功能以及它适用的数据库有很好的了解。我目前考虑了几个不同的数据库,但还没有决定使用哪一个。因此,我决定纯粹地按接口编写代码,暂时不考虑任何具体实现。在我所看的数据库中,它们都实现了
我有不同的顶点类。使用Blueprints,我认为最好的方式是在每个顶点中添加一个包含类名的字段来表示。这样,我就可以像
但是,假设我想基于两个属性检索一个顶点。该顶点必须具有
FYI- 我目前正在考虑的数据库是OrientDB、Neo4j和Titan,但我还没有最终决定。我目前也计划使用Gremlin,如果这有所帮助。
TransactionalGraph
和KeyIndexableGraph
。我认为这已经足够满足我的需求了,但我有一个问题。我有不同的顶点类。使用Blueprints,我认为最好的方式是在每个顶点中添加一个包含类名的字段来表示。这样,我就可以像
graph.getVertices("classname", "User")
这样做,并获取所有用户顶点。由于getVertices
函数指定一个实现应该利用索引,所以我可以保证快速查找(如果我对该字段进行索引)。但是,假设我想基于两个属性检索一个顶点。该顶点必须具有
className=Users
和username=admin
。最好的方法是什么?是否可能对这两个属性都建立索引,即使并非所有顶点都有username
字段呢?FYI- 我目前正在考虑的数据库是OrientDB、Neo4j和Titan,但我还没有最终决定。我目前也计划使用Gremlin,如果这有所帮助。
g.V('classname','user').has('username','admin')
和g.V('username','admin').has('classname','user')
。第一个必须获取所有用户(可能有成千上万个),然后循环查找“admin”。第二个更好,即使在图中存在多个'username',它也不太可能返回数千个结果,因此您只需扫描少量内容即可找到'user'类别。 - stephen mallette