AWS 잡다한 것들

4300 단어 timestanpsgotchasaws

AWS 문제



AWS 문제를 찾는 대로 강조 표시하겠습니다.

다이나모드



TTL 필드는 초 단위입니다.



dynamodb의 TTL 필드는 레코드 삭제 표시와 실제 삭제 사이에 유예 기간을 허용하므로 훌륭합니다. 즉, 레코드 작업을 마치면 TTL 필드를 미래의 시간으로 설정할 수 있으며 AWS 내부 메커니즘은 해당 시간이 지난 직후 특정 시점에서 레코드를 제거합니다.


잡았다:

TTL 필드는 Unix epoch의 초 단위 정수이며 dynamodb의 명시적 날짜 필드를 포함한 다른 모든 날짜는 ISO 날짜로 저장되며 Unix epoch의 마이크로초 단위로 내부에 저장됩니다. 이것은 Using DynamoDB Time to Live (TTL) 에 문서화되어 있습니다. 그러나 이러한 문제가 발생한 이유를 잊어버리기 쉽습니다.


해결 방법:

표준 날짜 라이브러리를 사용하여 TTL을 계산하고 정수로 변환한 다음 1000으로 나누어 밀리초를 초로 변환합니다.
예를 들어

import { DocumentClient } from 'aws-sdk/clients/dynamodb'
const dynamoDb = new DocumentClient()

const hoursInTheFuture = 24

const getFutureTimeInSeconds = () => {
  const time = new Date()
  const hours = time.getHours() + hoursInTheFuture

  time.setHours(hours)

  return Math.round(time.getTime() / 1000)
}

export const deleteInTheFuture = async (id) => {
  const result = await dynamoDb.update({
    TableName: 'myDynamoDbTable',
    Key: {
      id
    },
    UpdateExpression: 'SET ttl = :t',
    ExpressionAttributeValues: {
      ':t': getFutureTimeInSeconds() //record will be deleted 24 hours from now
    }

  }).promise()

  return result
}

좋은 웹페이지 즐겨찾기