我需要知道我的数据库中哪些用户是活动的,哪些不是。第一种方法是将典型的Property Active 设置为true或false,但在查询中返回活动用户必须经过所有节点。我认为它可以通过多种方式进行优化。第一个是创建活动节点,以便活跃用户拥有关系MATCH (u:User)-[:IS]-> (Active) return u
,另一个是创建标签:活动,以便返回它将是MATCH (u:Active) RETURN u
。与答案类似:Neo4j node property type。我个人认为分配标签更有效率,我不知道如何返回不活跃的用户,我不想为Inactive创建第二个标签。你觉得怎么样?
答案 0 :(得分:1)
您给每个User
一个布尔active
属性,并在其上创建一个doc,如下所示:
CREATE INDEX ON :User(active);
然后,您可以快速获得所有活跃用户:
MATCH (u:User)
WHERE u.active
RETURN u;
以及所有非活跃用户:
MATCH (u:User)
WHERE NOT u.active
RETURN u;
答案 1 :(得分:0)
为了进行更深入的测试,我添加到数据库 240'014 他们 120'000 的用户被标记为活动,做3种类型查询:
财产有效:
match(c:User) where c.active=true return c.name
延迟 285ms
match(c:User) where c.active=true return count(c)
延迟 75ms
:有效:
match(c:Active) return c.name
延迟 271ms
match(c:Active) return count(c)
延迟 1ms
节点有效:
match(c:User)-[:IS]->(:Active) return c.name
延迟 433ms
match(c:User)-[:IS]->(:Active) return count(c)
延迟 167ms