2012-02-15 4 views
4

우리는 Cassandra에 세션 ID와 URL을 저장하여 웹 사이트에서 클릭 한 링크를 추적하려고합니다. 지난 10 명의 방문자 (세션 ID)를 한 페이지에 표시하고 페이지를 통해 시간순으로 목록을 작성하려고합니다. 다음과 같이카산드라 : 지난 10 명의 사용자 방문

은 "스키마"입니다 : URL을 클릭 할 수 있기 때문에

세션 ID가 각 행은 타임 스탬프가 이름입니다 열을 포함하고 URL이 값 키 행입니다 (우리는 이렇게 여러 번 따라서 키 자체가 고유하지 않습니다)

우리는 행 키 "lastseen"을 포함하는 다른 열 패밀리가 있습니다. 여기서 컬럼 이름은 시간 소인이며 값은 sessionId입니다. 웹 사이트에 표시되는 세션 ID를 연대순으로 정렬해야하므로이 작업을 수행했습니다.

따라서 사용자가 링크를 클릭하면 lastseen 행에 timestamp/sessionid 키 값 쌍이 저장됩니다. 그리고 사용자 세션 ID에 대한 행에 타임 스탬프/URL이있는 또 다른 항목입니다.

아이디어는 lastseen 행의 마지막 10 개 항목을 쿼리 한 다음 해당 세션 ID 행에서 해당 세션 ID가 클릭 한 URL을 조회한다는 것입니다. 그러나 마지막으로 본 행에 중복 값이 ​​있습니다. 즉, 마지막 10 회의 클릭을 한 동일한 사용자가 동일한 세션 ID를 다시 10 번 가져옵니다.

세션 ID 행에 마지막으로 본 열 이름이있는 다른 스키마를 시도하고 인덱스를 추가하고 현재 시간 인덱스 표현식을 적게 설정했지만 cassandra는이 순간을 지원하지 않습니다.

이 문제를 효율적으로 해결하는 방법에 대한 아이디어가 있으십니까? 우리는 삽입물과 유사한 것들에 대해 중복을 검사 할 수 있습니다. 그러나 그것은 단지 추한 것처럼 보이고 높은 하중 하에서 어떻게 행동 할 것인지는 불확실합니다. 중복이 존재하는 경우 수동으로 100 개의 행과 필터를 검색 할 수 있지만 추악한 점이 있습니다.

누락 된 부분이 있습니까?

톰은

답변

3

는 내가 가장 간단한 해결책은 당신이 이미 생각을 한 것을 생각 -는 "최근 활동"가 그 열 이름 활동 시간이며, 값은 세션 ID이며, 스캔 CF 10 개의 고유 한 값을 얻을 때까지 거꾸로됩니다.

카산드라가 고유화를 수행하려면 클라이언트 측 정렬을 수행해야합니다. 대신 많은 수의 사용자가 확장되지 않습니다.

+1

답장을 보내 주셔서 감사합니다. 나는 다음과 같이 두려워했다./지난 24 시간 (고정 된 시간 프레임, 삽입시 알고있는)의 사용자 수를보고하고 런타임 정의 매개 변수 (즉, 관리자가 시간 범위를 정의)를보고 싶다면이 방법이 동일합니까? – TomWollert

관련 문제