2011-08-05 3 views
1

다음과 같은 문제점이 있습니다. 시스템이 다른 사이트에서 매일 ~ 300M 히트를 수집합니다. 마다 시간, 사용자 ID, 유형 (광고 또는 평소), http 주소, 사이트 ID가 있습니다.빠른 웹 분석 (대용량 데이터 배열)을위한 DB, OLAP 솔루션 선택

성별, 연령대 및 국가가있는 ~ 200M 명의 사용자 배열이 있습니다.

히트 데이터를 기반으로하는 시스템을 설계하려면 다른 사용자 그룹의 히트에 대한 실시간 보고서를 제공해야합니다.

:-) OLAP 솔루션과 마찬가지로 예를 들어, 구축, 15 ~ 25 세, 영국의 10 월에서 9 월 여자를위한 명중에 2011 년

당신이 선택하는 것이 좋습니다 데이터베이스

및 솔루션을 그래프 플롯하기 OLAP 큐브?

HBase (+ zohmg 또는 계단식) Hypertable 또는 기타 (무료 DWH :-))와 같은 opensource 솔루션을 찾고 있습니다.

답변

1

엄청난 양의 데이터로, 일일 히트 수 300Mio는 일부 섹터에서만 사용 가능합니다. 1 년에 약 100 테라 (10e2 * 10e9) 히트입니다.

유료 솔루션을 고려해도 사전 집계없이 이러한 양의 데이터를 처리 할 수있는 OLAP와 같은 솔루션에 대해서는 알지 못합니다. 어쩌면 분석적 (일명 OLAP) 시스템의 정보를 줄이기 위해 노력하고 있습니다. 즉, 크기 user_id, http 주소 및 사이트 ID를 제거하거나 축소하는 것입니다.

궁금한 점은 무엇이 문제를 해결하고 200M 사용자의 성별, 나이 그룹을 어떻게 얻었습니까?

0

실시간으로 (근접) 수행 할 수 있습니다. 매일 미리 집계 할 수 있습니다. 다음은보기 구체화 상상 :

CREATE VIEW preAggregatedByDate 
SELECT gender, ageGroup, country, date, COUNT(*) AS dailyCount 
FROM myTable 
GROUP BY date; 

그래서 각 일자에 당신의 매개 변수 (성별, 연령 집단, 국가)의 각 조합의 수를 가지고있다. 쿼리를 들어, 같은 것을 할 거라고 : 분명히

SELECT COUNT(*) 
FROM preAggregatedByDate 
WHERE gender = 'Female' AND ageGroup = '15_25' AND country = 'UK' AND 
    date >= '20110901' AND date < '20111101'; 

를,이 간단하지 않을 것 (당신은 SQL을 사용하여 얻을 전망을 구체화하지 않을 수 있습니다)하지만,이 상상할 수있는 가장 좋은 방법이 될 수있다 만약 당신이 기존의 데이터베이스에 익숙하다면. 실제 쿼리는 크게 축소되고 사전 집계 된 데이터 소스에서 데이터를 가져 오는 것입니다.

하루가 끝난 후 몇 시간이 지난 후에도 쿼리를 실행하지 않아도된다면 가장 쉬운 해결책은 Hadoop을 사용하여 사전 집계 된 데이터를 계산하고이를 정상적인 상태로 두는 것입니다 데이터베이스를 사용하여 쿼리를 실행할 수 있습니다.

+0

언급하는 것을 잊었습니다. 데이터를 사전 집계 할 때 발생할 수있는 문제는 사용자의 정보가 변경 될 수 있다는 것입니다. 예를 들어 사용자가 다른 국가로 이전하면 사용자는 이미 수행 한 사전 집계에 대해 이전 국가에서 계산됩니다. 이는 비즈니스 규칙에 따라 바람직하거나 그렇지 않을 수 있습니다. – ajduff574

+0

또한 각 쿼리에 대해 * 고유 * 사용자 수 (총 조회 수보다)가 필요한 경우이 사전 집계가 작동하지 않습니다. – ajduff574