2012-02-18 2 views
4

나는 redis에서 dynamoDB로 이동하려고 노력하고 있습니다. 모든 것이 잘 작동합니다! 내가 알아 내야 할 유일한 것은 주요 만료입니다.Boto를 사용하여 dynamoDB에서 키를 만료하려면 어떻게합니까?

{ 
    "key" => string, 
    "value" => ["string", "string"], 
    "timestamp" => seconds since epoch 
} 

내가 생각하는 타임 스탬프는 특정 값보다 작은 경우에 대한 데이터베이스를 통해 검색을 수행 한 후, 명시 적으로 : 현재, 나는 하나의 기본 키와 같은 그래서 아무 범위 키를 내 데이터 설정을 가지고 그들을 삭제하십시오. 그러나 이것은 매우 비효율적 인 것으로 보이며 이유없이 읽기/쓰기 단위를 엄청나게 사용합니다! 그 중, 만료는 스캔을 실행할 때만 발생하므로 생각해 낼 수 있습니다.

누구나이 문제에 대한 좋은 해결책을 찾았습니까?

답변

1

인덱싱 될 범위 키로 타임 스탬프를 사용할 수 있으며 시간에 따라보다 쉬운 작업을 할 수 있습니다.

+0

이 정말 어떤 시간 기반 작동하지 않습니다 ... 그것은 데이터가 잠시 후 부실되고 나뿐만 아니라 그것을 제거 할 수 있습니다 단지입니다. 범위 필드로 타임 스탬프를 사용하는 것은 어떤 키가 부실 될 수 있으므로 실제로 도움이되지 않으므로 어쨌든'스캔 '으로 되돌려 야합니다! –

+1

그래, 나는 당신이 찾고있는 자동 만료 기능이 있다고 생각하지 않는다. 그래서 당신이하는 일은 일괄 작업으로 수행되어야한다. 가장 쉬운 방법은 테이블을 날짜별로 분할하거나 필요에 따라 정리하는 것입니다. – Nick

5

지연 만료를 요청하고 요청에 따라 삭제할 수 있습니다. 예를 들어

:

  • 가기 키 "A"의 속성을 가진 "만료"10 분 후에 만료.
  • 9 분 후에 가져오고 만료를 확인한 다음 반환하십시오.
  • 11 분 후에 가져옵니다. 만료를 확인하십시오. 그것이 지금보다 적기 때문에 엔트리를 삭제하십시오.

이것은 memcached가 몇 년 전 출처를 볼 때 수행 한 작업입니다.

이전 항목을 모두 삭제하려면 스캔을해야합니다.

영구 데이터 저장소가 아닌 캐싱을위한 Elasticache 사용을 고려해 볼 수도 있습니다.

7

또한 Redis를 사용하는 방식과 마찬가지로 DynamoDB를 사용하고 있습니다.

내 의견은 키를 다른 시간 조각 표에 쓰는 것입니다.

예를 들어, 당신은

  1. 이 기록의이 유형 매일 새 테이블을 만들고 오늘날의 테이블에 새 레코드를 저장할 수, 기록의 종류가 적은 대부분에 시간을 몇 분을 지속해야한다고 .
  2. 레코드를 읽을 때 읽기 치료 팁을 사용하십시오. 즉, 오늘의 테이블에서 레코드를 찾을 수 없으면 어제의 테이블에서 레코드를 찾아서 필요한 경우 오늘 테이블에 넣으려고합니다.
  3. 두 테이블에서 레코드를 찾으면 타임 스탬프로 확인하십시오. 현재 만료 된 레코드를 삭제할 필요는 없습니다.
  4. 작업에서 오래된 테이블을 모두 삭제하십시오.

유지 관리가 쉽고 비용 효율적입니다.

관련 문제