캐시 쓰기 동작 - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

캐시 쓰기 동작

이 가이드에서는 처음 읽을 때 항목이 캐시되는 읽기-스루 캐시에 대해 설명합니다. 라이트스루 캐시는 쓰기 작업 중에 항목을 캐시로 푸시하지만이 가이드에서는 다음과 같은 두 가지 이유로이 작업을 수행하는 것을 권장하지 않습니다.

  • 항목이 작성되면 곧 언제든지 읽을 수 있다는 표시가 없으며 사용하지 않는 캐시 항목을 작성하는 것이 낭비됩니다.

  • 캐싱된 항목은 서로 다른 서명 키로 여러 번 캐싱될 수 있습니다. 예를 들어 프로젝션 표현식이 다르면 캐시 항목이 달라집니다. 따라서 요청이 수신되기 전에 항목을 저장해야 하는 서명 키는 명확하지 않습니다. 항목 전체를 한 번만 캐싱하는 것이 더 좋을 수 있으며, 요청이 ProjectionExpression 파라미터를 지정하는 경우 캐싱 래퍼 내에 프로젝션을 라이브로 적용합니다. 안타깝게도 이로 인해 사소한 문법을 구현해야 ProjectionExpression 하기 때문에 상당한 복잡성이 추가됩니다. 캐싱 래퍼를 매우 간단하게 유지하여 이전에 발생한 요청만 캐싱하고 가능한 한 새 응답을 생성하지 않도록 하는 것이 더 쉽습니다. 데이터베이스를가 ProjectionExpression 해석되는 유일한 장소로 둡니다. 이렇게 하면 간편한 라이트스루 캐시 모델이 제거됩니다.

그러나 쓰기 작업은 지능적일 수 있으며, 이전에 저장된 항목 캐시 항목 중 작성된 항목과 관련된 항목을 사전에 무효화할 수 있습니다. 이렇게 하면 TTL 만료를 기다릴 필요 없이 항목 캐시가 새로 유지됩니다. 캐시 항목은 다음 읽기 시 다시 채워집니다.

참고

비슷하게 설계된 관계형 데이터베이스 캐시 통합과 비교하여이 DynamoDB 통합의 주요 이점은 DynamoDB에 대한 모든 쓰기가 항상 작성 중인 항목의 기본 키를 지정한다는 것입니다. 읽기-스루 캐시는 쓰기 호출을 감시하고 정확하고 즉각적인 항목 캐시 무효화를 수행할 수 있습니다. 관계형 데이터베이스를 사용하는 경우 UPDATE 문은 영향을 받을 수 있는 항목을 식별하지 않으며 TTL을 통하지 않고 캐시된 행 항목을 무효화하는 수동적인 방법은 없습니다.

쓰기 호출은 다음 로직 흐름을 구현합니다.

  • 데이터베이스에 대해 쓰기 작업을 수행합니다.

  • 작업이 성공하면 쓰기를 위한 테이블 및 기본 키를 추출합니다.

  • 기본 키와 관련된 항목 캐시 항목을 무효화합니다.

이 마지막 단계를 가능하게 하려면 약간의 정리 작업이 필요합니다. 항목 캐시 항목은 서명의 해시 아래에 저장되므로 무효화할 키를 알아야 합니다. 캐시 내에서 항목 기본 키와 해당 기본 키와 연결된 저장된 서명 목록 간의 매핑을 유지하여이 작업을 수행할 수 있습니다. 무효화해야 하는 항목의 목록입니다.

이전의 표는 다음과 같습니다.

의사 코드

ElastiCache 키 계산

ElastiCache 값

get_item(t1, k1, p1)

hash('get', t1, k1, p1) = 0xad4c812a

{ 'Item': … }

get_item(t1, k1, p2)

hash('get', t1, k2, p2) = 0x045deaab

{ 'Item': … }

get_item(t1, k2, p1)

hash('get', t1, k2, p1) = 0x9cda78af

{ 'Item': … }

이전 정리 테이블은 다음과 같습니다.

Operation

ElastiCache 키 계산

ElastiCache 값

테이블 t1, 키에 대한 항목 목록 추적 k1

hash('list', t1, k1)

( 0xad4c812a, 0x045deaab )

테이블 t1, 키에 대한 항목 목록 추적 k2

hash('list', t1, k2)

( 0x9cda78af )

테이블에 쓰기 작업이 t1 있고 항목에 기본 키가 있다고 가정해 보겠습니다k1. 다음 단계는 해당 항목과 관련된 항목을 무효화하는 것입니다.

다음은 전체 로직입니다.

  • 데이터베이스에 대해 쓰기 작업을 수행합니다.

  • 작업이 성공하면 쓰기를 위해 테이블과 기본 키를 추출합니다.

  • 캐시에서 해당 기본 키와 연결된 저장된 해시 서명 목록을 가져옵니다.

  • 해당 항목 캐시 항목을 무효화합니다.

  • 해당 기본 키의 정리 목록을 삭제합니다.

항목 쓰기 작업의 일부로 쿼리 캐시 항목을 사전에 무효화할 수 있는 방법을 마련하는 것이 좋습니다. 그러나 이에 대한 설계를 개발하는 것은 매우 어렵습니다. 업데이트된 항목의 영향을 받을 캐시된 쿼리 결과를 효율적이고 안정적으로 결정하는 것은 거의 불가능하기 때문입니다. 따라서 쿼리 캐시 항목은 TTL 설정을 통해 만료되는 것보다 더 좋은 옵션이 없습니다.