2016-08-24 2 views
0

우리의 요구 사항은 매우 간단합니다. 우리는 며칠 이상이면 안되는 센서 용 GPS 위치를 저장하려고합니다. 데이터의 전체 세분성은 최대 약 1 분 정도입니다.SimpleDB 또는 DynamoDB를위한 생존 시간

총 센서 수는 10 억 개를 초과 할 수 있으므로 직접 파티션 논리를 작성하지 않으면 SimpleDB를 사용할 수 없습니다. SimpleDB는 각 속성을 색인화하지만 2 일 이상 된 항목을 삭제하는주기적인 정리 스크립트를 한 번만 실행할 수 있습니다.

DynamoDB는 데이터 양에 제한이 없으므로 훨씬 뛰어납니다. sensorID + timestamp에 파티션 + 범위 기본 키를 사용할 수 있습니다. 그러나 오래된 데이터를 삭제하려면 타임 스탬프 필드에 글로벌 보조 인덱스가없는 한 스캔 쿼리가 필요합니다. 이 보조 글로벌 인덱스를 사용하면 검색어가 잠재적으로 더 빠를 수 있습니다.

더 나은 방법이있을 수 있다고 생각하는 사람은 저뿐입니까? 전체 배포가 AWS 환경에 있기 때문에 DynamoDB/SimpleDB를 사용하는 것이 더 좋으며 많은 작업에 투자하지 않으려합니다. Mongo DB와 같은 다른 NOSQL DB가이를 지원한다는 것을 알고 있습니다.

+0

GPS 위치가 ** 동일한 형식 ** 인 NOSQL DB에 더 잘 저장되는 것을 실제로 볼 수 없습니다. 이는 실제로 테이블에서 저장, 인덱싱, 검색 및 분석 할 수있는 데이터의 정의입니다. –

+0

수십억 개의 항목이 있기 때문에. 시스템을 자동으로 공유/파티션하고 싶지 않으므로 걱정하지 않으셔도됩니다. 유연한 스키마가없는 NOSQL을 사용하는 사람은 실수를 저지르고있는 것처럼 들리지만 그렇지 않습니다. – Ouroboros

+0

"수십억의 동일하게 구성된 항목"**은 스키마가없는 NOSQL이 아닌 관계형 데이터베이스를 사용해야하는 이유입니다. 수십억 개의 동일한 데이터 포인트가 있지만 키 - 값 쌍으로 저장하는 경우 (예 : 데이터베이스가하는 일을 이해하지 못하고 키 - 값 저장소를 분할하는 것이 왜 정렬 가능/인덱싱 가능 테이블을 파티셔닝합니다. –

답변

1

날짜 기반 표의 항목을 x 일 단위로 저장할 수 있습니다.

GPS_LOCATIONS_09052016 
GPS_LOCATIONS_09072016 
... 

은 그럼 당신은 모든 x일 (들) 된 테이블을 놓을 수 있습니다.

센서 당 몇 개의 GPS 위치가 있습니까? 예를 들어 5 억 개의 고유 한 센서가있는 경우 센서 ID를 분할하는 것이 효율적이지 않습니다. 날짜를 기준으로 테이블이 당신을 위해 작동하지 않는 경우

는, 당신은 timestampHash는 데이터의 크기에 따라 y-1 사이의 숫자, ytimestampHash 해시 키와 timestamp 범위 키에 GSI를 만들 수 있습니다. 그런 다음 timestampHashtimestamp이 이보다 작거나 퍼지 매개 변수를 설정하는 모든 것에 대해이 GSI에 대한 범위 쿼리를 수행 할 수 있습니다. timestampHash은 처리량을 돕기 위해 데이터를 분할하는 데 도움이됩니다.

1

DynamoDB에 새로운 기능이 추가되었습니다. 확인하십시오 TTL

이렇게하면 특정 항목의 TTL이 만료 된 후 항목이 삭제됩니다.