2016-12-30 2 views
2

카산드라를 처음 접해 보았습니다. 그래서 카스 Andra에 대한 12 개의 기사를 읽었으므로 기본을 알고 있습니다. 모든 자습서는 1 또는 2 열 및 시간 범위에 따라 효율적인 데이터 검색을 보여줍니다. 내가 찾을 수없는 것은 더 많은 조건이있는 경우 데이터를 올바르게 모델링하는 방법이었습니다.여러 조건의 카산드라 데이터 모델

  • 이벤트 유형
  • 시간
  • 이메일
  • User_age
  • user_country
  • USER_LANGUAGE
  • 을 :

    내가 말할 큰 이벤트가 꽤 많은 열이 데이터베이스를 정상화해야

  • 등등.

모든 열을 쿼리 할 수 ​​있어야합니다.

SELECT email FROM table WHERE time > X AND user_age BETWEEN X AND X AND user_language = 'nl'

가 나는 각 열에 대해 별도의 테이블을 만들 수 있습니다 알고,하지만 난 아직 결과를 결합해야합니다 : 그래서 RDBMS에서 나는 쿼리 것입니다. 아마 이것은 나쁜 접근이 아니지만 하위 쿼리가 없기 때문에 의심 스럽습니다.

제 질문은 분명히 카산드라에서 어떻게 이런 종류의 데이터를 올바르게 모델링 할 수 있습니까?

고맙습니다.

+0

잠재적 해결책은 다음과 같습니다. 이벤트 유형별로 별도의 테이블을 만듭니다. 파티션 키로 사용할 수있는 "merchant_id"열이 있습니다. 우리는 항상 하나의 파티션에 있으므로 timerange 및 merchant_id를 찾습니다. 나머지를 보조 색인으로 추가 할 수 있습니까? eventtype 테이블 + merchant_id + 시간 선택에서 여전히 수백만 개의 행이있을 수 있습니다. –

답변

4

모든 열을 쿼리 할 수 ​​있어야합니다.

바로 저기에 내버려 둡시다. Cassandra에서는 예상 쿼리 패턴을 기반으로 테이블을 만들고 일반적으로 테이블은 단일 쿼리를 지원합니다. 귀하의 경우에는 "꽤 많은"열이 있으며 가능한 각 쿼리를 지원하도록 설계된 테이블에 해당 데이터를 복제해야합니다. 그것은 크고 꼴 사나운, 아주 빨리 될 것입니다.

보조 색인으로 나머지를 추가 할 수 있습니까? eventtype 테이블 + merchant_id + 시간 선택에서 여전히 수백만 개의 행이있을 수 있습니다.

보조 인덱스는 중간로드 카디널리티 열에서 사용하기위한 것입니다. 따라서 매우 낮은 카디널리티 C 럼과 2 진 인덱스의 C 럼이 둘 다 2 차 인덱스에 적합하지 않습니다. 문제는 Cassandra가 노드 중 하나를 코디네이터로 선택하고 각 노드에서 색인을 스캔 (네트워크 시간이 많이 소요됨) 한 다음 결과 세트를 작성하여 반환해야한다는 것입니다. 이는 분산 데이터베이스 작업을위한 모범 사례의 면면에서 날아가는 성능 저하에 대한 처방입니다.

요약하면 Cassandra는 이와 같은 사용 사례에 대한 좋은 해결책이 아닙니다. OLAP 유형 쿼리를 수행 할 수 있기를 원하는 것처럼 들리 겠지만 그 목적을 위해 더 적합한 도구를 사용해야합니다.

+0

감사합니다 아론 사진 답변. Merchant 파티션 키와 timuuid를 사용하여 클러스터링 키를 사용하면 해당 파티션에 대한 인덱스가 생성되어 빠르게 유지되기를 바랬습니다. 나는 olap에 익숙하지 않지만 분석을위한 것으로 사용자 ID를 검색하지 않는 것 같습니다. (나는 apache kylin을 보았다). 더 나은 소송이 될 것이라고 생각하십니까? 아마도 hadoop? –

+0

우리는 이것을 위해 hadoop을 사용하려고합니다. –