2016-09-01 3 views
1

LOGIN_USER (속성 : user_id)와 IP (속성 : IP)의 두 가지 유형의 꼭지점이 있다고 가정 해 봅시다. 이들 사이의 EDGE는 다음과 같습니다. LOGIN (속성 : session_id , login_time).Titan의 두 꼭지점 사이의 동일한 가장자리 레이블 수를 줄이는 방법

이 모델의 문제는 하나의 USER와 IP 사이에 두 개의 많은 엣지가 있다는 것입니다 (수천 개가 될 수 있음). 어쨌든 두 꼭지점의 엣지 수를 줄이는 동시에 속성을 유지할 수 있습니까 : sessionId 및 login_time? 우리는 일부 쿼리에 대해이 두 속성을 필터링하려고합니다. Edge 속성이 카디널리티를 지원하지 않습니다. 어떤 vertex 속성이 지원되는지 나열하십시오.

모든 가장자리 속성을 Vertex에 놓는다면 성능에 영향을 주어 Vertex를 가져 오지 않습니까? Vertex의 titan로드 속성은 ?? 버텍스를 탐색 할 때, g.V (1) .next()를 타이탄이 모든 버텍스 속성을로드합니까?

답변

1

사용자와 IP간에 "수천"의 가장자리를 말하면 실제로 "수백만 개"또는 "수천만 개"이상일 수 있다고 생각합니까? 그렇지 않다면, "수천"은 타이탄에 대해 문제가되지 않아야합니다. vertex centric indices. 가장자리 속성에 대한 색인을 생성하면 빠른 순서 및 순회가 이루어져야합니다.

"수백만"에 대해 깊이 생각하기 시작하면, titan-hadoop을 Vertex로 사용하여 전역 쿼리를 처리하고 그 에지를 메모리에 보유해야하는 몇 가지 문제가 생길 수 있습니다. 글로벌 분석을 수행 할 때 문제가 생길 수 있습니다. 운영 관점에서 Titan은 항상 정점에있는 수백만의 사람들에게 계속 글쓰기를 기꺼이 받아 들였지만, 나는 그것을 피하는 경향이 있습니다. 물론,이 내 경험의 대부분은 타이탄 1.0 vertex cutting 전에 온 :

정점을 절단하는 것은 그래프의 각 파티션에 그 정점의 인접 목록의 일부를 저장하는 것을 의미한다. 즉, 버텍스와 의 인접성 목록이 분할되어 부하를 클러스터의 모든 인스턴스에 단일 꼭지점에 효과적으로 배포하고 핫 스폿을 제거합니다.

수퍼 노드를 수백만 개로 늘리면 실험 할 수 있습니다.

수백만 개의 가장자리에있는 슈퍼 노드의 다른 옵션이 주위를 모델링한다고 가정합니다. 아마도 USER와 IP 사이에 어떤 구조를 도입했을 것입니다. 같이 그 사이에 시간 개념을 소개 수있는 몇 가지 정점/가장자리가 단일 로그인 가장자리를 변환 :

USER -> LOGIN_YEAR -> LOGIN_MONTH -> IP

그래서 지금, 대신 사용자 사이에 단지 하나의 가장자리를 작성하고 IP를 사용하면 LOGIN_YEAR 정점과 LOGIN_MONTH 정점을 만들 수 있습니다.

+0

감사합니다. 이제 DynamoDB를 테스트하고 있습니다. 어떤 저장소를 지금 사용하고 있습니까? 현재 우리는 두 정점 사이에 너무 많은 엣지가있는 것을 발견했습니다. 또한 gV ('userId') .out (LOGIN '). in(). values ​​()를 실행하면 중복 된 정점이 많이 보일 것입니다. 대부분의 가장자리가 동일한 경로로 전달되지만 Titan은 모든 가장자리의 inVertex를 반환합니다. 꼭지점. –

+0

내 경험은 카산드라와 같습니다. 나는 당신의 꼭지점 복제가 그 순회에 대해 기대된다고 생각한다. USER로부터 'out'을 횡단했지만 'in'을 지나가고 원래 건너 뛴 꼭지점이 그 경로에 있습니다. 시작점으로 다시 연결되는 경로를 필터링해야합니다. 나는 또한 당신이 중복을 제거하고 싶다라고 생각한다. 그래서 당신의 traversal은 다음과 같이 보일 것입니다 :'gV ('userId'). as ('x'). out ('LOGIN'). ' –

+0

경험 한 데이터 양은 얼마입니까? 10 억 수준? 'g.V ('userId '). ('x ') .out ('LOGIN ')과 같은 쿼리 대기 시간은 어떻습니까?in(). (neq ('x')). dedu p(). values ​​()'? –

관련 문제