2016-11-04 8 views
3

나는 시계열 데이터를 가지고있다. (대략 1-5 점 정도) ArangoDB를 사용하여 웹 애플리케이션에 신속하게 액세스 할 수 있어야한다. 데이터는 특정 프로파일과 연관되지만 모든 프로파일의 모든 데이터에 대해 하나의 콜렉션이 사용됩니다. 프로파일 노드와 데이터 노드 사이에는 보고서 노드와 이벤트 노드가 있습니다. 보고서는 주어진 이벤트의 데이터 요소 그룹입니다. 기존 그래프 구조는 다음과 같다 : I는 것 효과적으로 본하고자ArangoDB의 시계열 데이터 구성하기

profile =====> event1 ========> reportA =======> data1 
    \    \     \=======> data2 
     \    \ 
     \    \========> reportB =======> data3 
     \        \=======> data4 
     \ 
      \==> event2 ========> reportA =======> data1  
        \     \=======> data2 
        \ 
        \========> reportB =======> data3 
             \=======> data4 

차트 data1 순차적 이벤트의 속성으로 분류 연관된 이벤트에 의해.

I 효과적으로 시계열을 만들려면 해당 보고서의 모든 dataAttr이 쿼리를 실행할 것입니다
event  dataAttr  value 
------------------------------- 
event1  data1  42 
event2  data1  6 
event3  data1  7 
event4  data1  343 

dataAttr에 설정 결과 : 내가 원하는 결과 집합의 유사한 테이블 구조는 다음과 같습니다 지난 10-20 개의 이벤트에 대한 특정 프로파일.

Neo4J에서이 문제를 조사 할 때 순차적 이벤트를 서로 직접 연결하는 것이 좋습니다. 나는 이것이 ArangoDB에서 더 나은 접근법인지 궁금합니다.

이는 다음과 같이 보이는 추가 그래프를 만드는 의미 :

data1 (of event1) => data1 (of event2) => data1 (of event3) => data1 (of event4) 
data2 (of event1) => data2 (of event2) => data2 (of event3) => data2 (of event4) 

dataAttr이 때문에 가장 최근의 이벤트에 통과 한 후, 이전 이벤트에서 자사의 사촌에 연결을 첫 번째 그래프에서 두 번째 그래프는 n 층을 지난 이벤트 (실제로는 10-20)로 이동하는 데 사용됩니다.

아마도 이와 같은 쿼리의 데이터를 구성하는 가장 좋은 방법일까요? 성능에 중대한 영향을 미칠 수 있습니다.이 쿼리로 각 페이지에 20 개의 차트를로드 할 가능성이 있습니다.

이 쿼리는 그래프 순회가 아닌 인덱스가있는 문서 수집을 쿼리하는 것이 더 빠릅니까? 문서 수집 구조는 dataAttr에 해시 색인을 넣을 수 있으며 이벤트에 대한 skiplist (문자열 정렬로 순차적으로 정렬됩니다). 내가 다시 profile까지 event1data1, 아래로 통과하고, 다시 아래 것은 event2data1 등 매우 비효율적이 될 것이라고 믿고있어

.

답변

3

성능이 중요한 경우 인덱스를 사용하여 가능한 한 많이 처리하려고하면됩니다. 경로 길이가 알려지지 않은 경우 순회가 우수합니다. 이는 유스 케이스가 아닙니다.

데이터 노드에 저장된 데이터를 비정규 화하는 것이 좋습니다. profile에 속한 모든 데이터 노드를 반환하고 timeStamp 시간 스탬프로 정렬 된 주어진 dataAttr을 반환하겠습니까? 이 경우 적어도 데이터 노드에 프로필 식별자를 추가하고 profileId, dataAttrtimeStamp에 건너 뛰기 목록에있는 색인을 사용합니다.

+0

처음에는 원하는 데이터를 탐색 할 때 시계열 쿼리는 순전히 문서 검색입니다. 문서의 색인으로 인해 인접 데이터를 순회하는 것보다 빠릅니다. –

+0

예, 그 아이디어 것입니다. 기본적으로, Neo4J 접근법은 동일한 방향, 링크 된 목록을 사용하여 정렬 된 색인을 구현하는 빈곤층의 사람을 가리키고 있습니다. – fceller

+0

쿨! 이것은 우리를 위해 잘 작동하고 있습니다. 고맙습니다! ArangoDB의 다중 모델 기능의 또 다른 장점! –