2013-12-14 4 views
0

내 응용 프로그램에서는 사용자를 그룹에 할당하고 각 사용자는 관리자 (관리자도 있고 사용자도 관리자도있을 수 있음)가 필요합니다.사용자를위한 그래프 데이터베이스

앱에서 특정 관리자의 최대 깊이를 알 수있는 쿼리가 필요합니다 (즉, 관리자부터 관리자가 관리하는 모든 사용자까지의 최장 경로 길이). 또한 동일한 그룹에 속한 사용자를 찾을 수 있어야합니다 (한 그룹은 다른 그룹의 구성원 일 수도 있음).

이 시점까지 전체 응용 프로그램은 JPA로 MySQL 데이터베이스에서 모델링되었습니다. 그러나 SOA로 설계되었으므로 사용자 (사용자 서비스)를 처리하는 서비스의 기본 데이터 저장소를 변경하는 것이 그렇게 비싸지는 않을 것입니다.

그래프 데이터베이스가 필요하지 않은 방법이 있습니까? 그래프 데이터베이스가 필요한 경우 사용자 정보를 그래프에 저장해야합니까, 아니면 적절한 관계입니까? 당신의 기본 모델이

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

경우

+0

"그래프 데이터베이스"란 무엇을 의미합니까? 그룹을 범주 테이블로 매핑하고 관계를 다 대다 테이블로 매핑 할 수 있습니다. 별도의 데이터베이스가 필요하지 않습니다. –

답변

2

당신은 할 수 있습니다 :

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 

두 번째 쿼리 그럴 필요 없어. 귀하의 유스 케이스에 가장 적합하고 쉬운 것을하십시오.

그래프 데이터베이스가 없으면 무거운 JOIN SQL 쿼리 esp를 작성해야합니다. 가변 길이 관계.

+0

응답 해 주셔서 감사합니다. 기본 사용자의 모든 엣지 노드 (가변 길이 지정 경로 포함)를 찾으려면 어떤 성능이 좋을 것이라고 생각하십니까? 그리고 가장 긴 길의 길이를 세는 것에 대해서도? –

관련 문제