2016-09-19 3 views
1

대용량 데이터를 시각화하기 위해 Crossfilter (DC.JS 및 D3)를 사용하고 있습니다. 도서관의 양방향 특성이 마음에 들지만 데이터가 빠르게 커지고 있습니다. 이 문제를 해결하는 가장 적합한 방법은 데이터가 너무 큰 경우 미리 집계하는 것입니다. Crossfilter가 이러한 종류의 데이터로 어떻게 작업 할 수 있는지 알아내는 데 어려움을 겪고 있습니다. 설명하기집계 결과의 교차 필터

는, 내가 가지고있는 데이터는

[ 
    {"date":"01-01-2016","food": "apple", "gender": "M", "country": "DE"}, 
    {"date":"01-01-2016","food": "pear", "gender": "M", "country": "DE"}, 
    {"date":"01-01-2016","food": "apple", "gender": "F", "country": "DE"}, 
    {"date":"01-01-2016","food": "apple", "gender": "F", "country": "UK"}, 
    {"date":"01-02-2016","food": "pear", "gender": "M", "country": "UK"}, 
    {"date":"01-02-2016","food": "pear", "gender": "M", "country": "UK"}, 
    {"date":"01-02-2016","food": "apple", "gender": "M", "country": "US"}, 
    ... 
] 

가 어떻게 날짜 필드 주변이 선회를 시각화하여 갈 것 같은 형태인가? 그래서 01-01에, 나는 3 명의 사람들이 DE (남자 1 명, 여자 1 명)로부터 2 명, 영국에서 1 명을 사 주었다.

[ 
    {"date":"01-01-2016","food": "apple", "gender": "M", "country": "DE", "count": 100000}, 
    {"date":"01-01-2016","food": "pear", "gender": "M", "country": "DE", "count": 72651}, 
    {"date":"01-01-2016","food": "apple", "gender": "F", "country": "DE", "count": 12345}, 
    {"date":"01-01-2016","food": "apple", "gender": "F", "country": "UK", "count": 9287164}, 
    {"date":"01-02-2016","food": "pear", "gender": "M", "country": "UK", "count": 291732743}, 
    {"date":"01-02-2016","food": "apple", "gender": "M", "country": "US", "count": 128176376} 
    ... 
] 

하지만이 설정에

, 나는 양에 많은 승리하지 않습니다

나는과 같이, 그것을 계산하고 각 조합에 대한 데이터 큐브의 종류를 계산에 의해 내가 이것을 할 수있는 생각 데이터의 CrossFilter가 데이터를 처리 할 수있는 방법/확실하지 않은 경우이 방법입니다.

답변

1

이 질문은 꽤 광범위하지만 여기에 있습니다.

크로스 필터에서이 문제를 처리하는 방법에는 여러 가지가 있습니다. 복잡성 순으로 순서대로 나열합니다 :

  1. 토큰 키와 값을 사용하여 레코드를 축소하십시오. 예를 들어 {"date":"01-01-2016","food": "apple", "gender": "M", "country": "DE"}{"d":"01-01-2016","f": "a", "g": "M", "c": "DE"}이 될 수 있으며 레코드 당 여러 바이트를 절약 할 수 있습니다.
  2. 설명대로 미리 레코드를 집계하십시오. 카운트 들어, 이것은 매우 쉽습니다. 사전 집계 레코드 수로 설명한 것처럼 미리 집계 한 다음 crossfilter.group.reduceSum(function(d) { return d.count; }) 또는 이와 유사한 방법으로 집계 합계를 계산합니다. 다른 유형의 집계의 경우 복잡해지고 사용자 정의 축소 기가 필요할 수 있지만 일반적으로 가능합니다. 특정 집계 문제에 문제가있는 경우 해당 문제에 대한 새로운 질문을 작성하고 문제를 정확하게 배치하십시오.
  3. 서버 측에서 Crossfilter 기반 API를 구동하기 만하면됩니다. 어떤 상호 작용을 잃을 지 모르지만 이는 단단한 접근입니다. 여기에 몇 가지 해결책이 설명되어 있습니다. https://github.com/dc-js/dc.js/wiki/FAQ#how-do-i-replace-crossfilter-with-a-server-side-solution
  4. 서버 측 사전 집계를 수행하지만 클라이언트 측 필터링 및 최종 집계를 처리하는 결합 된 방법을 사용하십시오. Crossfilter를 사용하여이 작업을 수행하는 유일한 예는 여기에 있습니다. http://lcadata.info (소스 코드는 https://github.com/esjewett/lcadata)입니다. 이것은 실제로 데이터에 의존하는 솔루션이며 여기에는 범용 라이브러리가 없습니다. 이 모든에

직교은 상호 작용에 도움을 줄 수 있지만 진정으로 데이터 볼륨 투쟁에 도움이되지 않는 웹 노동자에 Crossfilter을 움직이고있다.

내 권장 사항 : 위의 # 1을 수행하고 필요한 상호 작용 수준으로 지원할 수있는 레코드 수를 결정하십시오. 그런 다음 필요한 경우 # 2를 구현하십시오. 충분하지 않다면 # 3이 옵션인지 판단하고, 그렇다면 그렇게하십시오. 그렇지 않으면 # 4를 고려해보십시오. 그러나 당신이 꽤 진보 된 작업을 수행하고 있으며, 자신의 흔적을 크게 빗겨 나갈 것임을 이해하십시오.

* 특정 질문에 대답하려면 표시 유형의로드하려는 레코드 수, 실제로 필요한 차원, 필요한 그룹 유형 등 추가 정보가 필요합니다. 창조하는 등.

+0

설명해 주셔서 감사합니다. 사실 제 질문은 일반적인 질문이었고 귀하의 일반적인 대답은 제가 그것을 해결하는 데 도움이되었습니다. reduceSum을 잘못된 방식으로 사용하여 그렇게 보였습니다. 감사. –

관련 문제