2010-12-11 6 views
5

HBase에 속성 그래프를 기꺼이 저장할 수 있습니다. 속성 그래프는 그래프 노드와 가장자리에 속성이 있으며 가장자리가 다른 유형에 속하는 한 여러 개의 가장자리가 같은 터플의 노드를 연결할 수 있습니다.HBase/Cassandra 이상의 속성 그래프에 대한 Datamodel

내 쿼리 패턴은 속성 및 인접 영역을 요구하거나 그래프를 가로 지르도록 요청합니다. 예를 들면 다음과 같습니다. Vertex [name = claudio] => OutgoingEdge [knowows] => Vertex [gender = 여성], 클라우디오가 좋아하는 모든 여성들이 나에게 줄 것입니다.

나는 그래프 데이터베이스가이 작업을 수행한다는 것을 알고 있지만 대개 거대한 데이터 세트의 경우 여러 노드에서 확장되지 않습니다. 그래서 NoSQL ColumnStore (HBase, Cassandra ...)에서 구현할 의향이 있습니다.

내 데이터 모델이 다음과 같습니다.

정점 표 :
키 vertexid (UUID)
패밀리 "속성": < 속성 이름 > => < 속성 값 > ...
패밀리 "OutgoingEdges :"< 에지 키 > vertexid 다른 > => <, ...
가족 "IncomingEdges :"... 나가는 가장자리와 같은

이 표는 저를 가져올 수 있습니다 신속하게 버텍스의 속성과 인접성 목록. 다른 종단점 으로 vertexid를 사용할 수 없습니다. 여러 종류의 (다른 유형의) 여러 개의 엣지가 동일한 두 개의 개의 정점을 연결할 수 있기 때문입니다.

가장자리 표 :
키 : 에지 키 (복합 (< 소스, >는, < 대상 >을 vertexid < 에지 유형 이름 >) vertexid) (즉, vertexid1_vertexid2_knows)
가족 "속성": < 속성 이름을 > => < 속성 값 > ...

이 표를 사용하면 가장자리의 속성을 빠르게 가져올 수 있습니다.

가장자리 유형 :
키 : 복합 (< 소스, >을 vertexid "밖으로 |에서"< 에지 유형 이름 >) (즉, vertexid1_out_knows)
가족 "이웃 :"< 대상 vertexid > => null, ...

이 테이블을 사용하면 수신 이거나 정점에서 나가고 특정 유형에 속하는 가장자리를 검색/검색 할 수 있으며 트래커의 핵심 부분은 입니다. API의 능력 (G는 네트워크 입력/출력 (RPC), 디스크 I/O (탐색) 측면에서 모두 만큼 빠름. 또한 은 그래프의 크기를 "확장"해야합니다. 즉, 그래프의 크기가 증가하면 그래프의 크기가 이되고 에 해당합니다. 전체 숫자가 인 것은 아닙니다. 정점 및 가장자리. 위의 예에서는속성 이름을 가진 vertexid1 소스 버텍스를 고려할 것입니다. claudio 나는 vertexid1_out_knows를 스캔하고 버텍스 목록을 수신했습니다. 그 후 나는이 정점에서 "Properties : gender"열을 검색하여 "female"값을 가진 것들을 찾으십시오.

질문 :

1) 일반 : 당신은 내 작업을위한 더 나은 데이터 모델을 볼 수 있습니까?
2) 특정 키의 경우 일부 패밀리가 비어있을 수 있습니다 (즉, "OutgoingEdges :"가족이 가장자리를 감지하지 못합니다). 나는 당신이 모든 키를 볼 수 있듯이 이 vertexiduuid 접두사로 구성되어 있기 때문에 매우 작고 이며 대부분 동일한 regionserver에 맞을 것입니다.
3) 필자는 스캐닝을 위해 필터를 광범위하게 사용한다고 생각합니다. I guess regexp 필터가 내 친구가됩니다. 이 데이터 모델에 적용된 필터 성능이 일까?

답변

2

이 유형의 모델은 Cassandra (HBase에 대해 많이 알지 못함)를위한 합리적인 출발점처럼 보입니다. 그러나 모든 분산 저장소의 경우 트래버스가 여러 노드를 통과하기 때문에 트래버스 할 때 문제가 발생합니다.

이 때문에 Neo4J과 같은 전용 그래프 데이터베이스는 단일 노드 디자인을 사용하고 모든 데이터를 RAM에 유지하려고합니다.

특정 노드 또는 가장자리의 속성을 검색하면 잘 작동하고 수평 확장이 가능합니다. 트위터의 FlockDB (현재는 분명히 포기 됨)이 이에 대한 주목할만한 예입니다.

또한 ID 이외의 조회가 필요한지 (즉, 색인이 필요합니까) 고려해야 할 필요가 있습니까?

관련 문제