首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tinkerpop蓝图顶点查询

Tinkerpop蓝图顶点查询
EN

Stack Overflow用户
提问于 2013-04-21 18:57:04
回答 2查看 2.2K关注 0票数 3

我已经研究了一段时间了。我想我很清楚它能做什么,以及它能很好地处理哪些数据库。我现在正在考虑几个不同的数据库,但还没有确定。因此,我决定将我的代码完全写到接口上,而不考虑任何实现。在我正在查看的数据库中,它们实现了TransactionalGraphKeyIndexableGraph。我认为这足以满足我的需要,但我只有一个问题。

我有不同的“类”顶点。使用蓝图,我相信在每个顶点中都有一个包含类名的字段,这是最好的表示。这样做,我可以做一些类似graph.getVertices("classname", "User")的事情,它会给我所有的用户顶点。由于getVertices函数指定实现应该使用索引,所以保证快速查找(如果我对该字段进行索引)。

但是假设我想根据两个属性检索一个顶点。顶点必须有className=Usersusername=admin。找到那个单顶点最好的方法是什么?是否可以对这两个属性进行索引,即使不是所有的顶点都有一个username字段?

FYI --我目前正在考虑的数据库是OrientDB、Neo4j和土卫六,但我还没有确定。我目前还计划使用Gremlin,如果这有帮助的话。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-21 21:10:41

  1. 如果图实现中没有打开自动索引,graph.getVertices()将遍历所有顶点,并查找具有该属性的顶点。如果您已经拥有数据,并且不能只打开自动索引器,则应该使用is index = indexableGraph.getIndex(),然后使用index.get('classname', 'User')
  2. 在多个对象上执行query是可能的,但是如果没有细节,就很难说了。对于Neo4j,他们使用Lucene,这意味着query()将接受lucene查询,例如className:Users AND username:admin,但我不能代表其他查询。

是的,在这些DB中,我个人认为neo4j是最容易使用的,只要您了解它们的授权结构,就不会有任何使用它们的问题。

票数 3
EN

Stack Overflow用户

发布于 2013-04-22 11:24:44

对顶点使用“类”或“类型”是分割顶点的好方法。做:

代码语言:javascript
复制
graph.createKeyIndex("classname",Vertex.class);
graph.getVertices("classname", "User");

这是一种非常常见的模式,通常会产生快速查找,尽管迭代数千万用户的索引可能不是很好(如果您打算将特定的classname扩展到非常大的大小)。我认为这就引出了你问题的第二部分,关于做两个属性查找。

以表面上的示例为例,两个元素查找类似于(使用Gremlin):

代码语言:javascript
复制
g.V('classname',"User").has('username','admin')

因此,将顶点缩小到只有一个键索引的“用户”顶点,然后为"admin“过滤这些顶点。但是,我会用不同的方式来做这个。这样做的代价就更低了:

代码语言:javascript
复制
graph.createKeyIndex("username",Vertex.class);
graph.getVertices("username", "admin");

或者在格里姆林

代码语言:javascript
复制
g.V('username','admin')

如果您知道您想要的用户名,就没有更好/更快的方法来建模了。只有当您想对所有“用户”顶点进行迭代时,才真正需要classname。如果您只想找到一个(或使用该username的一组顶点),那么对该属性进行键索引是更好的方法。

即使我没有在它上创建一个关键索引,我仍然在所有顶点上包含一个typeclassname属性。我发现它在全球操作中很有帮助,我可能关心速度,也可能不关心速度,但只需要一个答案。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16135011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档