2012-12-10 4 views
1

타임 스탬프 (해시) - 값 쌍으로 구성된 많은 데이터 테이블이 있습니다. 여기서 값은 온도 또는 다른 종류의 측정 데이터 일 수 있습니다.DynamoDB : 비교가 포함 된 키가 아닌 값 쿼리

특정 값의 타임 스탬프를 얻으려면 값 (해시) - 타임 스탬프 (범위)를 사용하여 보조 인덱스를 작성할 수 있지만 GT, LT, BETWEEN과 같은 비교 연산으로 값을 쿼리하여 값의 범위?

물론 스캔을 사용하지 않으려합니다. 내가 해왔 던 유일한 것은 더미 해시 키를 사용하고 범위 속성에 값 + 타임 스탬프를 넣는 것입니다. 그러나 이것에 문제가 있습니다 (스캔과 비교하여 좋든 나쁘든간에).

더 좋은 해결책이 있습니까, 아니면 DynamoDB를 사용하여 수행 할 수 있습니까?

답변

0

HASH를 알아야 RANGE에서 쿼리를 수행 할 수 있습니다. 이 문제를 해결하려면 표를 비정규 화해야합니다. 즉, 키를 반대로 복제합니다. 엉덩이에 약간의 고통이있는 것처럼 보이지만, 때때로 핵심 가치 저장소의 모든 성능 이점에 필요한 절충 사항 중 하나입니다.

이 경우의 예 : 두 키가 완전히 무작위 인 경우 행운입니다. HASH를 더미 값으로 설정하는 대신 해시 타임 스탬프를 대신 사용해 볼 수 있습니다. 이렇게하면 해시가 무엇인지 실제적으로 해결할 수 있습니다. 또한 범위를 하이픈 (예 : timestamp-value)으로 구분 된 값의 조합으로 설정 한 다음 비표준 테이블에서 값 타임 스탬프로 설정하여 성능이 저하되지 않는 비교 연산자를 사용할 수 있도록해야합니다 .

+0

비정규 화 (denormalization)는 "보조 색인 작성"에서 언급 한 것입니다. 그러나 이것은 값을 쿼리 할 수 ​​없으며 가져 오기만 허용합니다. 위에서 언급 한 것과 같이, 나는 쿼리를위한 범위 키의 모든 값 + 타임 스탬프를 가진 공통의 해시 키 ('더미')를 사용하려고 생각했지만 성능이나 다른 문제 (파티션)가 불투명하므로 나는 대안을 찾고있다. 비정규 화는 문제가되지 않습니다 (적어도 현재는). – user1597701

+0

둘 다 완전 무작위 인 경우 운이 없다고 생각합니다. 제안 : 해시 값을 더미 값으로 설정하는 대신 해시 값을 매달 사용하여 실용적인 방법으로 해시 값을 계산할 수 있어야합니다. 또한 범위를 하이픈 (예 : timestamp-value)으로 구분 된 값으로 설정 한 다음, 비정규 화 된 테이블에서 값 타임 스탬프를 사용하여 성능이없는 GT, LT, BETWEEN 연산자를 사용할 수 있어야합니다. 히트. – greg

+0

데이터를 분할하지 않아도되지만,이를 구현하기 위해서는 반드시 균형을 유지해야합니다. – user1597701

관련 문제