用户图表数据库

时间:2013-12-14 19:30:15

标签: database graph neo4j relational-database

在我的应用程序中,我需要将用户分配到组,并且每个用户都有一个经理(经理,也是用户,也可能有经理)。

应用程序将需要查询才能知道某个管理员的最大深度(换句话说,从管理员开始到该人管理的所有人的最长路径的长度)。此外,它需要能够找到属于同一组的用户(一个组也可以是另一个组的成员)。

到目前为止,整个应用程序已在MySQL数据库中使用JPA建模。但是,它被设计为SOA,因此更改处理用户(用户服务)的服务的基础数据存储不会那么昂贵。

有没有办法不需要图形数据库?如果需要图形数据库,我应该将所有用户信息存储在图表中,还是只存储适当的关系?

1 个答案:

答案 0 :(得分:2)

如果你的基本型号是

(group:Group)<-[:IN_GROUP]-(user:User)
(man:User)-[:MANAGES]->(sub:User)

你可以这样做:

MATCH (manager:User {name:"Colin"})-[:MANAGES*]->(u:User)
RETURN u

第二次查询

MATCH (manager:User {name:"Colin"})-[:MANAGES*]->(u:User)
      (u)-[:IN_GROUP]->(g)<-[:IN_GROUP]-(u2)
RETURN u.name as user, g.name as group, collect(u2.name) as colleagues

您可以将所有用户信息存储在图表中,但您不必这样做。为您的用例做最简单的事情。

如果没有图形数据库,您可以编写痛苦的重型SQL查询,尤其是对于可变长度关系。