2012-05-21 5 views
2

두 가지 종류의 노드가있는 네트워크, 예를 들어 사용자와 장소가 "has been in"관계에 있다고 가정합니다. 이것은 bipartite 네트워크이며, 보통 networkx와 같은 모듈은 네트워크의 "투영"을 두 방향으로 제공하여 장소 네트워크를 생성 할 수 있도록합니다 (일반 사용자의 수를 가중하는 링크 포함) 또는 사용자들의 네트워크 (일반적인 장소의 수를 무게로 갖는 링크를 가진).그래프 DB는 bipartite 네트워크 투영과 동일합니까?

그래프 데이터베이스에서 이러한 네트워크를 생성해야하는 이유는 무엇입니까? OrientDB, Neo4j, FlockDB 등 가장 일반적인 오픈 소스 제품에 대한 예제를 제공 할 수 있습니까?

더 구체적으로 gremlin으로 어떻게 할 수 있습니까?

그런 경우 (gremlin) 나 자신이 답변을 붙여 넣었지만 살아남은 노드에서 시작합니다. 보통 첫 번째 단계는 예상대로 노드에서 시작하는 것이 더 효율적입니다. 일부 구간 세부 선택 우리가 같은 장소에서 특정 일, 또는 다른 간격 있었던 것으로 관련되어 사용자의 네트워크에만 관심이 너무

g.V.filter{it.date=='3/3/2003'}.filter{it.type=='place'}.... 

.

+0

'oetl.sh'벌크 로더를 사용하여 이분 그래프를로드 했습니까? 그렇다면 어떻게 공유하길 원하십니까? – tipanverella

답변

1

Marko Rodriguez's blog에는이 사용 사례에 대한 많은 예제가 포함되어 있기 때문에 제안 할 수 있습니다. Marko는 Gremlin의 저자이기도하며 OrientDB과 Neo4J는이를 준수합니다. 이 답변이므로 투사 노드에서 시작

+0

포인터 덕분에 블로그는 매우 흥미 롭습니다. ArXiV에서의 Marko의 작업은 훨씬 더 많습니다! – arivero

0

, 나는 자기 응답 날 오전 놈아 (게다가, OrientDB REST 인터페이스에서 작동)

g.V.filter{it.type=='user'}.as('a').out('checkedIn_at').in('checkedIn_at') 
.as('b').simplePath.select(['a','b']).groupCount(){it.name}.cap() 

의 방법을 발견했다 :-D

일부 상황에서는 그래프가 하위 선택 인 거대한 데이터베이스가 있습니다. 나는 내 생각 엔 여기에 현존하는 문제는 이러한 패턴은 임의의 프로젝션 기능을 허용하지 않는다는 것입니다

...sideEffect{x=it}.in.as('a').transform{x}.in.as('b').select(['a','b']) 
.groupCount(){it.name}.cap() 

입니다

g.V.filter{it.date=='3/3/2003'}.filter{it.type=='place'}.... 

으로 무언가에서 시작하는 대답을 선호하는 것이다. 해결책은, 내 생각, GROUPBY의 다양성과 재생, 사용자의 각 쌍에 대해 공통의 정점을 나열 할 수 : 후 처리를위한 세 번째 매개 변수로,

g.V.filter{it.type=='place'}.sideEffect{x=it}.out.as('a').transform{x}.out 
.as('b').select(['a','b']).groupBy{[it[0],it[1]]}{x}.cap 

GROUPBY, 맵리 듀스를 많이 허용 패턴.

+0

BTW, 나는 나의 expresions의 길이에 매우 행복하지 않다, 그들은 매우 쉽게 여러 줄로된다; 나는 빠진 일부 통사론이 있다고 생각한다. – arivero