올바른 기본 정렬을 위해 내 Cassandra 키를 선택하는 방법은 무엇입니까?

sdgfsdh

내 테이블 samples은 다음과 같은 열로 구성됩니다.

id : uuid
created : timestamp
device : ascii
reading : float

내 쿼리의 대부분은 n모든 장치 에서 가장 최근 샘플 을 가져 오는 것이기 때문에 이것이 기본 정렬이되기를 원합니다.

SELECT * FROM samples LIMIT 1024

또한 n주어진 장치에 대한 최신 샘플 을 효율적으로 가져올 수 있기를 바랍니다 .

SELECT * FROM samples WHERE device = 'abc' LIMIT 1024

이를 위해 파티션 키를 어떻게 디자인해야합니까?

Aaron

Cassandra에서는 쿼리 기반 모델링 접근 방식을 사용하는 것이 좋습니다. 이를 위해 지원해야하는 각 쿼리에 대해 하나의 테이블을 갖는 것은 드문 일이 아닙니다.

SELECT * FROM samples LIMIT 1024

이 첫 번째 쿼리에서 내가 바로 보는 가장 큰 문제는 WHERE절이 없다는 것입니다 . 이로 인해 Cassandra는 결과 집합을 만들기 위해 모든 노드를 확인해야합니다. 확실히 그런 일이 일어나기를 원하지 않습니다. 그러나 최근 데이터 또는 특정 날짜의 데이터에 가장 관심이있는 것 같습니다. 이렇게하려면 날짜 / 시간 구성 요소를 기반으로 파티션 키 또는 "버킷"을 만들어야합니다.

여러 파티션에서 검색된 데이터를 정렬 할 수 없기 때문에이 작업도 필요합니다.

이를 위해 데이터의 카디널리티가 중요합니다. 당신은 상위 1024 개를 선택하고 있는데 하루에 그렇게 많이 얻는 것이 일반적입니까? 아니면 일주일 이상입니까? 지금은 "day"라고 가정하고 day_bucket열을 추가합니다 .

CREATE TABLE samples_by_day (
  id uuid,
  created timestamp,
  device ascii,
  reading float,
  day_bucket bigint,
  PRIMARY KEY (day_bucket,created,id)
) WITH CLUSTERING ORDER BY (created DESC, id ASC);

이 기본 키 정의는 데이터를 일별로 분할합니다 (예 : 20200710). 이러한 파티션 내에서 데이터는 created내림차순 으로 정렬됩니다 (최신 항목을 맨 위에 표시). id열 고유성을 보장하기 위해 추가된다. 이것은 다음 쿼리를 지원합니다.

SELECT * FROM samples_by_day
WHERE day_bucket = 20200710 LIMIT 1024;

며칠 동안 여러 쿼리를 실행할 수 있습니다. 20 억 셀 / 파티션 제한의 한계를 넘지 않는다고 가정하면 주 또는 월 단위로 "버킷"할 수도 있습니다.

이 쿼리 지원 :

SELECT * FROM samples
WHERE device = 'abc' LIMIT 1024;

... 훨씬 쉽습니다.

CREATE TABLE samples_by_device (
  id uuid,
  created timestamp,
  device ascii,
  reading float,
  day_bucket bigint,
  PRIMARY KEY (device,created,id)
) WITH CLUSTERING ORDER BY (created DESC, id ASC);

이 방법은 작동하지만 "제한되지 않은 행 증가"문제가 발생할 수 있습니다. 기본적으로 각 장치에 대해 장치 샘플이 계속 추가되면 파티션 크기가 결국 최대가됩니다. 따라서 추가 day_bucket파티션 키로 추가 (또는 작동하는 시간 버킷)가 필요할 수 있습니다.

PRIMARY KEY ((device,day_bucket),created,id)

이 변경으로 쿼리도 변경해야합니다.

SELECT * FROM samples_by_device
WHERE device = 'abc' AND day_bucket = 20200710 LIMIT 1024;

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

올바른 CSS 선택기를 정의하는 방법은 무엇입니까?

분류에서Dev

다른 레코드를 선택하기 위해 sqlite 명령을 작성하는 방법은 무엇입니까?

분류에서Dev

하위 선택을 수행하기 위해 querybuilder를 올바르게 사용하는 방법은 무엇입니까?

분류에서Dev

올바른 키맵을 선택하는 방법은 무엇입니까?

분류에서Dev

기본 키가 아닌 열에서 가장 높은 값을 선택하는 올바른 방법은 무엇입니까

분류에서Dev

올바른 문자를 표시하기 위해 잘못된 터키 문자로 문자열을 변환하는 방법은 무엇입니까?

분류에서Dev

JSON 직렬 변환기를 보내는 올바른 방법은 무엇입니까?

분류에서Dev

HMAC를 확인하기 위해 TAG 값을 올바른 형식으로 올바르게 변환하는 방법은 무엇입니까?

분류에서Dev

중복 오류를 피하기 위해 선택 + 삽입을 처리하는 올바른 방법

분류에서Dev

탭 키를 눌러서 입력 내용을 선택 해제하는 방법은 무엇입니까?

분류에서Dev

정확한 값을 얻기 위해 foreach를 사용하여 HTML에 ID / 클래스를 넣는 올바른 방법은 무엇입니까?

분류에서Dev

퍼그 반복에서 올바른 객체를 보내기 위해 모달 대화 상자를 얻는 방법은 무엇입니까?

분류에서Dev

Android에서 세션을 유지하기 위해 한 활동에서 다른 활동으로 쿠키를 보내는 방법은 무엇입니까?

분류에서Dev

특정 버전의 opencv를 선택하기 위해 파이썬을 만드는 방법은 무엇입니까?

분류에서Dev

올바른 출력을 얻기 위해 UNIX 구문을 변경하는 방법은 무엇입니까?

분류에서Dev

jQuery : ID를 얻고 다른 ID를 선택하기 위해 조작하는 방법은 무엇입니까?

분류에서Dev

반응에서 메모리 누수를 방지하기 위해 useEffect 후크 내에서 모든 비동기 / 대기 작업을 취소하는 올바른 방법은 무엇입니까?

분류에서Dev

tmux : 쉘 명령을 실행하기 위해 키를 바인딩하는 방법은 무엇입니까?

분류에서Dev

문제를 방지하기 위해 C에서 문자열을 읽는 올바른 방법은 무엇입니까?

분류에서Dev

rsnapshot으로 백업을 생성하기 위해 모든 것을 읽을 수있는`백업`사용자를 갖는 올바른 방법은 무엇입니까?

분류에서Dev

버전을 비교하기 위해 strtok를 올바르게 사용하는 방법은 무엇입니까?

분류에서Dev

X-path 또는 다른 방법을 사용하여 웹 요소 내에서 사용자 지정 선택기를 찾는 방법은 무엇입니까?

분류에서Dev

CodeIgniter에서 내 URL을 변경하기 위해 routes.php를 설정하는 방법은 무엇입니까?

분류에서Dev

XPath 선택기를 사용하여 범위 내에서 속성을 선택하는 방법은 무엇입니까?

분류에서Dev

Azure DevOps에서 kubernetes 클러스터를 배포하기 위해 올바른 yaml을 작성하는 방법은 무엇입니까?

분류에서Dev

Pelican에서 생성 한 html을 이미지에 연결하기 위해 경로를 표현하는 올바른 방법은 무엇입니까?

분류에서Dev

PHP에서 다른 루프없이 더 많은 요소를 처리하기 위해 foreach 내부의 배열을 수정하는 방법은 무엇입니까?

분류에서Dev

이와 같이 구성된 HTML에서 원하는 특정 요소를 얻기위한 올바른 선택기 문자열은 무엇입니까?

분류에서Dev

(PHP) 한 줄 출력으로 출력하기 위해 행 요소를 나누는 HTML 테이블 내용을 정렬하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    올바른 CSS 선택기를 정의하는 방법은 무엇입니까?

  2. 2

    다른 레코드를 선택하기 위해 sqlite 명령을 작성하는 방법은 무엇입니까?

  3. 3

    하위 선택을 수행하기 위해 querybuilder를 올바르게 사용하는 방법은 무엇입니까?

  4. 4

    올바른 키맵을 선택하는 방법은 무엇입니까?

  5. 5

    기본 키가 아닌 열에서 가장 높은 값을 선택하는 올바른 방법은 무엇입니까

  6. 6

    올바른 문자를 표시하기 위해 잘못된 터키 문자로 문자열을 변환하는 방법은 무엇입니까?

  7. 7

    JSON 직렬 변환기를 보내는 올바른 방법은 무엇입니까?

  8. 8

    HMAC를 확인하기 위해 TAG 값을 올바른 형식으로 올바르게 변환하는 방법은 무엇입니까?

  9. 9

    중복 오류를 피하기 위해 선택 + 삽입을 처리하는 올바른 방법

  10. 10

    탭 키를 눌러서 입력 내용을 선택 해제하는 방법은 무엇입니까?

  11. 11

    정확한 값을 얻기 위해 foreach를 사용하여 HTML에 ID / 클래스를 넣는 올바른 방법은 무엇입니까?

  12. 12

    퍼그 반복에서 올바른 객체를 보내기 위해 모달 대화 상자를 얻는 방법은 무엇입니까?

  13. 13

    Android에서 세션을 유지하기 위해 한 활동에서 다른 활동으로 쿠키를 보내는 방법은 무엇입니까?

  14. 14

    특정 버전의 opencv를 선택하기 위해 파이썬을 만드는 방법은 무엇입니까?

  15. 15

    올바른 출력을 얻기 위해 UNIX 구문을 변경하는 방법은 무엇입니까?

  16. 16

    jQuery : ID를 얻고 다른 ID를 선택하기 위해 조작하는 방법은 무엇입니까?

  17. 17

    반응에서 메모리 누수를 방지하기 위해 useEffect 후크 내에서 모든 비동기 / 대기 작업을 취소하는 올바른 방법은 무엇입니까?

  18. 18

    tmux : 쉘 명령을 실행하기 위해 키를 바인딩하는 방법은 무엇입니까?

  19. 19

    문제를 방지하기 위해 C에서 문자열을 읽는 올바른 방법은 무엇입니까?

  20. 20

    rsnapshot으로 백업을 생성하기 위해 모든 것을 읽을 수있는`백업`사용자를 갖는 올바른 방법은 무엇입니까?

  21. 21

    버전을 비교하기 위해 strtok를 올바르게 사용하는 방법은 무엇입니까?

  22. 22

    X-path 또는 다른 방법을 사용하여 웹 요소 내에서 사용자 지정 선택기를 찾는 방법은 무엇입니까?

  23. 23

    CodeIgniter에서 내 URL을 변경하기 위해 routes.php를 설정하는 방법은 무엇입니까?

  24. 24

    XPath 선택기를 사용하여 범위 내에서 속성을 선택하는 방법은 무엇입니까?

  25. 25

    Azure DevOps에서 kubernetes 클러스터를 배포하기 위해 올바른 yaml을 작성하는 방법은 무엇입니까?

  26. 26

    Pelican에서 생성 한 html을 이미지에 연결하기 위해 경로를 표현하는 올바른 방법은 무엇입니까?

  27. 27

    PHP에서 다른 루프없이 더 많은 요소를 처리하기 위해 foreach 내부의 배열을 수정하는 방법은 무엇입니까?

  28. 28

    이와 같이 구성된 HTML에서 원하는 특정 요소를 얻기위한 올바른 선택기 문자열은 무엇입니까?

  29. 29

    (PHP) 한 줄 출력으로 출력하기 위해 행 요소를 나누는 HTML 테이블 내용을 정렬하는 방법은 무엇입니까?

뜨겁다태그

보관