2012-10-09 2 views
1

내 문제를 해결할 수있는 기술 (예 : HBase, Raiku, Cassandra 등)을 제안하면 Stackoverflow 커뮤니티에서 도움이 될지 궁금합니다. 우리가 업데이트 및 쿼리10s 테라 바이트의 순서로 실시간으로 쿼리하려는 큰 데이터 집합이 있습니다. 우리의 데이터 세트는 사용자 ID와 하나 이상의 기능 (일반적으로 약 10)을 포함하는 픽셀 스트림입니다. 가능한 모든 기능 번호는입니다. > {사용자 ID 해시, 사용자 ID 해시, ...}스트리밍 카운팅, 스케치 및 대형 세트 교차를 지원하는 아키텍처 찾기

FEATUREID_TO_COUNTER_TABLE - 기능 ID : 기능 ID를 -

FEATUREID_TO_USER_TABLE :

우리는 같을 것이다 우리의 데이터 모델을 상상하는 > {서사시 이후 시간 -> HyperLogLog byte blob}

사용자 ID의 해시로 정렬 된 정렬 된 사용자 ID 집합을 유지하고 싶습니다. 새로운 ID의 해시 값이 낮 으면 이전 ID를 삭제하는 각 FEATUREID_TO_USER_TABLE 항목에 대해 ~ 200k를 유지하는 것이 좋습니다.

우리는 (반드시 SQL로 표현되지 않음) 다음과 같은 작업을 지원하기 위해 가게를하고 싶은

는 :

select FeatureID, count(FeatureID) from FEATUREID_TO_USER_TABLE where UserID in 
(select UserID from FEATUREID_TO_USER_TABLE where FeatureID = 1234) 
    group by FeatureID; 

그리고

update FEATUREID_TO_COUNTER_TABLE set HyperLogLog = NewBinaryValue where FEATUREID_TO_COUNTER_TABLE.id = 567 

우리는 기계를 통해이 데이터에 의해입니다 샤딩하는 가장 쉬운 방법을 생각 사용자 ID. 어떤 아이디어에 대한

감사합니다, 마크

답변

0

카산드라는 데이터를 지속하기위한 좋은 선택입니다,하지만 당신은 실시간으로 그것을 처리하는 다른 뭔가를 할 것입니다. 비교적 쉬운 실시간 스트리밍 데이터 처리를 제공하므로 Storm을 확인하는 것이 좋습니다. 동시성과 병렬 처리를 처리하는 오픈 소스 프레임 워크입니다. JVM에 작성되었지만 다양한 비 JVM 언어에 대한 언어 바인딩이 있습니다.

0

나는 당신의 전체적인 설명을 이해할 지 모르겠다. 그래서 나는 어둠 속에서 문맥 상 사격을하고있다.

파티션을 쿼리 할 수 ​​있도록 데이터를 분할하는 방법이 있습니까? 이렇게하면 확장성에 따라 확장 성과 쿼리가 가능해집니다. 일반적으로 toooo 큰 테이블을 쿼리하여 파티션에 쿼리하지 않으려합니다.

즉. PlayOrm은 cassandra에 파티션 기능을 제공하므로 하나의 파티션을 쿼리 할 수 ​​있습니다.

PlayOrm에도 join 쿼리가 있지만 현재는 subselect를 수행하지 않지만 일반적으로 클라이언트는 nosql 저장소에 대한 첫 번째 호출을 수행 한 다음 결과를 집계하고 두 번째 쿼리를 수행하며 여전히 매우 빠릅니다 카산드라조차도 내부적으로 다른 서버에 두 번 전화를해야하므로 한 번의 전화를 거는 것만 큼 빠르게).

흠, 내가 귀하의 게시물을 읽을수록, 기본 키로 모든 것을 할 수 있기 때문에 SQL을 작성해야할지 모르겠지만 100 % 확실하지는 않습니다. 그 SQL은 혼란 스럽습니다. 행에있는 모든 사용자 ID를 가져 와서 계산합니다.그것은 select와 subselect에서 같은 테이블이기 때문에?

데이터를 샤딩하는 한, cassandra가 자동으로 처리하므로 아무 것도 할 필요가 없습니다.

+0

답변 해 주셔서 감사합니다. 나는 원래 SQL 예제를 약간 망쳤다 - 나는 단지 그것을 바로 잡았다. 기본적으로 FeatureID A를 가진 사용자는 FeatureID B를 가진 사용자와 교차로를 할 수 있기를 원합니다. 복잡한 부분은 일종의 해시로 사용자 ID 집합을 스케치하고 싶습니다. 많은 수의 기능을 교차시킵니다. – Mark

관련 문제