2014-07-22 2 views
1

사용자가 자신의 노드와 연결을 정의 할 수있는 시스템에서 작업하고 있으며 임의의 쿼리로 쿼리 할 수 ​​있습니다. 사용자는 SCM 시스템과 매우 유사하게 "분기"를 만들 수 있으며 나중에 변경 사항을 기본 그래프에 병합 할 수 있습니다.그래프 분기/병합을위한 Neo4j 데이터 모델링

Neo4j에서 효율적인 데이터 모델을 만들 수 있습니까? 최선의 접근 방법은 무엇입니까? 물론 우리는 DB에 수백만 노드가 있기 때문에 모든 브랜치에 대한 모든 그래프 데이터를 복제하고 싶지는 않습니다.

나는 이븐 로빈슨의 우수 논문 Time-Based Versioned Graphs과 톰 제펜 펠트의 대체 접근법을 Network versioning using relationnodes으로 읽었지만, 불행히도 그들은 다른 문제를 해결하고있다.

나는 당신이 생각하는 것을 알고 싶습니다.

답변

1

귀하의 경험 수준이 확실하지 않습니다. 그것에 대한 통찰력이 도움이 될 것입니다.

이 시스템이 노드의 태그에 크게 의존 할 것으로 추측됩니다. 어쩌면 이름과 몇 가지 핵심 속성을 포함하여 매우 광범위한 5-20 노드 유형을 제안 할 수 있습니다. 그런 다음 사용자가 해당 기본 범주에서 선택하고 태그를 추가하여 자체 분사를 만들도록 허용 할 수 있습니다. (: 것 {이름 : "", 장소 : ""})와

당신이 당신의 기본 범주했다 말 (: 오브젝트 {범주 : ""개수 : 4})

귀하의 사용자가있을 것입니다 "Thing"및 "Object"가있는 드롭 다운 또는 무언가. 그들은 예를 들어 "Thing"을 선택하고 새 레이블 ("Cool"이라고 말함), "Name"및 "Place"에 대한 값을 입력하고 사용자 정의 속성 (IsAwesome : True)을 추가합니다.

이제 새로운 노드가 생겼습니다. (: 이름 : "Rock", 장소 : "Here", IsAwesome : True}) 넓은 범주 또는 사용자가 범주를 작성하여 쿼리 할 수 ​​있습니다. 다행히도 이것은 각 범주를 전체 노드 수에 비례하는 비율로 유지할 수 있기를 바랍니다.

정확하게 이것이 필요한 것인지 확실하지 않습니다. 행운을 빕니다!

+0

우리는 4 년 넘게이 시스템을 시작했습니다. 현재이 시스템은 프로덕션 환경에서 사용되고 있습니다. 이것은 SQL을 기반으로하며 우리는 Neo4j를 차세대 대체품으로 평가하고 있습니다. 그래서 Neo4j에서 노드, 연결, 속성, 레이블 등을 만드는 법을 알고 있습니다. 이것은 협업 시스템이며 사용자가 자신의 별도 "분기"에서 그래프를 편집하고 소스 코드 관리 시스템 에서처럼 변경 사항을 기본 "분기"에 병합하도록합니다. 제 질문은 Neo4j에서 이러한 "지점"을 어떻게 모델링해야합니까? –

0

흠. 이것이 미친 것은 아니지만 먼저 교체 할 시스템의 유형에 대해 생각해보십시오. SQL. SQL 데이터베이스에서는 데이터 저장소이므로 분기를 사용하지 않습니다. 여러 소스에서 하나의 DB로 데이터를 가져 오려고한다면 CSV 파일로 모두 내보내고 Cypher에서 MERGE 문을 사용하여 모든 것을 한 번에 DB로 가져와야합니다.

병합 할 때 각 사람이 자신의 DB 복사본에서 스크립트를 실행하게함으로써 분기와 유사하게 나타날 수 있습니다. 모든 노드와 복사본을 복사본에 넣고 모두 CSV에 넣습니다. IE

그런 다음이 CSV를 최종 DB로 가져 와서 다른 사본의 내용을 확인하십시오. 당신이 이미 알고 노드 유형을 사용하고 있고 각 사람이 당신이 병합 될 때까지 모르는 새로운 데이터 구조를 생성하지 않는 한

IMPORT CSV WITH HEADERS FROM "file:\\YourFile.CSV" AS file 
MERGE (N:Node{Property1:file.Property1, Property2:file.Property2}) 
MERGE (N2:Node{Property1:file.Property1, Property2:file.Property2}) 
MERGE (N)-[E:Edge]-(N2) 

이 한, 작동합니다.

관련 문제