首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >neo4j计数节点在200 K节点上的性能及450 K关系

neo4j计数节点在200 K节点上的性能及450 K关系
EN

Stack Overflow用户
提问于 2012-08-02 16:52:10
回答 3查看 2.2K关注 0票数 1

我们正在开发一个基于neo4jphp的应用程序,其中包含大约200 k节点,每个节点都有一个属性(如type='user'type='company' )来表示应用程序的特定实体。我们需要得到图中特定类型的所有节点的计数。

我们为每个实体创建了一个索引,比如保存该属性节点的userscompanies。因此,在users索引中驻留130 K节点,其余位于companies上。

有了塞弗,我们就这样犹豫了。

代码语言:javascript
运行
复制
START u=node:users('id:*')
RETURN count(u)

结果是

代码语言:javascript
运行
复制
Returned 1 row.Query took 4080ms

服务器被配置为默认配置,只需稍作调整,但4秒也不能满足我们的需要。考虑到数据库将在一个月内增长到20K,所以我们非常需要这个查询。

还有其他方法可以做到这一点吗?也许是用Gremlin,还是用其他服务器插件?我将缓存这些结果,但我想知道是否可以修改这些结果。

非常感谢,为我糟糕的英语感到难过。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-24 03:41:48

最后,用Gremlin而不是Cypher,我找到了解决方案。

代码语言:javascript
运行
复制
g.getRawGraph().index().forNodes('NAME_OF_USERS_INDEX').query(
    new org.neo4j.index.lucene.QueryContext('*')
).size()

此方法使用lucene索引获取“接近”行。

再次感谢大家。

票数 3
EN

Stack Overflow用户

发布于 2012-08-02 17:27:56

嗯,这真的是关于Lucene指数的表现。如果您大部分时间只需要这个查询,那么为什么不更新一个整数,在某个节点上使用总计数,并可能将其与索引插入一起更新,以便更好地使用每晚以上的查询运行更新?

票数 1
EN

Stack Overflow用户

发布于 2013-07-03 10:32:37

如果希望获得最佳性能,请不要将实体类别建模为节点上的属性。相反,你要这样做:

公司1-:IS_ENTITY->公司实体

或者如果您正在使用2.0

公司1:公司

第二个功能还允许您在一个单独的后台线程中自动更新索引,顺便说一句,imo是2.0最好的新特性之一

第一种方法还应该证明效率更高,因为与从节点读取属性相比,创建一个“跃点”通常花费更少的时间。但是,它确实要求您为实体创建单独的索引。

您的查询如下所示:

v2.0

代码语言:javascript
运行
复制
MATCH company:COMPANY
RETURN count(company)

v1.9

代码语言:javascript
运行
复制
START entity=node:entityindex(value='company')
MATCH company-[:IS_ENTITIY]->entity
RETURN count(company)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11782197

复制
相关文章

相似问题

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