입문6분 분량

DynamoDB에서 여러 항목을 삭제하는 방법

DynamoDB에는 DELETE FROM table WHERE …가 없습니다. 모든 삭제 대상은 하나입니다. 전체 기본 키로 항목 — API에는 대량 삭제 작업이 없습니다. 잘라내고 DELETE 문은 각 항목당 정확히 하나의 항목을 제거합니다. 성명. 따라서 "여러 항목 삭제"는 항상 2단계 작업입니다. 를 선택한 다음 키당 하나의 삭제를 실행하고 처리량을 위해 일괄 처리합니다.

이 가이드에서는 일괄 처리 옵션, 전부 아니면 전무 트랜잭션을 다룹니다. 변형, 모두 삭제 사례 및 동일한 작업을 수행하는 방법 GUI에서 선택 및 두 번의 키 입력.

DynamoDB에서 여러 항목을 삭제하려면 어떻게 해야 합니까?

없애고 싶은 항목의 기본 키를 수집합니다(Query 또는 Scan를 통해). 그런 다음 일괄 삭제합니다. BatchWriteItem는 최대 25 DeleteRequest초가 소요됩니다. 호출당 TransactWriteItems는 최대 100개의 항목을 원자적으로 삭제하고 PartiQL은 DELETE 문은 BatchExecuteStatement로 한 번에 25개씩 일괄 처리할 수 있습니다. DynoTable에서 행을 선택하고 ⌘⌫를 눌러 단계를 지정합니다. 삭제한 다음 검토하고 커밋합니다.

  • 대량, 최선의 노력: 9 — 호출당 25개 삭제, 남은 항목을 다시 시도합니다.
  • 전부 아니면 전무: 10 — 함께 성공하거나 실패하는 최대 100개의 작업.
  • SQL식 구문: PartiQL 11 + 12 — 동일한 키별 규칙, 익숙한 철자법.
  • 표의 모든 내용: truncate strategies — 일반적으로 테이블을 삭제하고 다시 만드는 것이 더 저렴합니다.
  • 시각적 선택: staged deletes in DynoTable — 행 선택, 단계화, 빨간색 diff 검토, 커밋.

0단계: 키 수집

삭제하려면 전체 기본 키가 필요합니다. — 테이블에 파티션 키 정렬 키 (AWS: "각 기본 키에 대해 모든 키 속성을 제공해야 합니다.") 당신 임의의 속성으로 삭제할 수 없으므로 "모든 항목을 삭제하세요. status = 'archived'"은 읽기로 시작합니다:

  • 조건이 키(또는 GSI 키)에 있는 경우, 타겟 Query은 키를 저렴하게 수집합니다.
  • 그렇지 않으면 필터가 있는 Scan입니다. 이는 전체를 읽고 청구합니다. 테이블, 필터 여부; query vs scan를 참조하세요.

주요 속성만 반환하는 ProjectionExpression를 사용하고 다음을 따르세요. LastEvaluatedKey 끝까지(pagination) 그렇지 않으면 처음 1MB 페이지 분량만 자동으로 삭제합니다.

방법 1: BatchWriteItem(호출당 최대 25개 삭제)

BatchWriteItem 번들 최대 25 넣기/삭제 요청 또는 호출당 16MB (AWS API reference: "BatchWriteItem에 한 번 전화하면 최대 16MB의 데이터를 전송할 수 있습니다. 최대 25개의 항목 넣기 또는 삭제 작업으로 구성된 네트워크').

aws dynamodb batch-write-item --request-items '{
  "Orders": [
    {"DeleteRequest": {"Key": {"PK": {"S": "ORDER#1001"}, "SK": {"S": "META"}}}},
    {"DeleteRequest": {"Key": {"PK": {"S": "ORDER#1002"}, "SK": {"S": "META"}}}},
    {"DeleteRequest": {"Key": {"PK": {"S": "ORDER#1003"}, "SK": {"S": "META"}}}}
  ]
}'

일괄 여행의 세 가지 속성 - 모두 바로 API reference:

  • 원자 아님: "개별 PutItemDeleteItem 연산 BatchWriteItem에 지정된 것은 원자입니다. 그러나 전체적으로 BatchWriteItem 그렇지 않다." 일부 삭제는 착륙할 수 있지만 다른 삭제는 그렇지 않습니다.
  • UnprocessedItems를 다시 시도해야 합니다. 제한된 요청이 UnprocessedItems 응답 맵, 요청과 동일한 모양 — "일반적으로 루프에서 BatchWriteItem을 호출합니다", AWS는 "강력하게" 재시도 사이에 지수 백오프 알고리즘을 사용하는 것이 좋습니다.
  • 조건 없음. "개별적으로 조건을 지정할 수 없습니다. 삭제 요청" — 조건부 삭제는 DeleteItem 또는 대신 거래하세요. 일괄 처리는 동일 키에 대한 두 가지 작업도 거부합니다. 한 번의 통화로.

루프 모양(25개 단위로 청크 전송, 백오프를 통해 남은 항목 다시 대기열 지정)은 다음과 같습니다. batch operations에서 다루는 것과 동일합니다.

방법 2: TransactWriteItems(원자적 삭제)

일련의 삭제가 함께 성공하거나 실패해야 하는 경우 — 상위 항목 제거 항목과 그 항목의 하위 항목, 예를 들어 — TransactWriteItems 사용: 최대 100개 작업(삭제, 넣기, 업데이트, 조건 확인)이 원자적으로 적용됩니다. 항목당 가 허용됩니다. 거래: 거래 쓰기 비용은 일반 쓰기 쓰기 용량의 두 배입니다. 전체 역학 (멱등성 토큰, TransactionCanceledException, 비용 수학)이 DynamoDB transactions.

방법 3: PartiQL DELETE, 일괄 처리

PartiQL은 키별 규칙을 해제하지 않고 단지 다시 철자할 뿐입니다. 개발자 가이드가 명시적이다 (PartiQL DELETE): "한 번에 하나의 항목만 삭제할 수 있습니다. 단일 DynamoDB를 발행할 수 없습니다. 여러 항목을 삭제하는 PartiQL 문" 및 WHERE 조건 "단일 기본 키 값으로 확인되어야 합니다."

여러 항목을 삭제하려면 단일 항목 문을 일괄 처리합니다. 3 배치당 최대 25개의 문을 실행합니다(모든 읽기 또는 모든 쓰기, 혼합되지 않음).

[
  {"Statement": "DELETE FROM \"Orders\" WHERE PK = 'ORDER#1001' AND SK = 'META'"},
  {"Statement": "DELETE FROM \"Orders\" WHERE PK = 'ORDER#1002' AND SK = 'META'"}
]
aws dynamodb batch-execute-statement --statements file://statements.json

전체 키를 고정하지 않은 WHERE은 실패합니다.

DELETE FROM Orders WHERE status = 'archived'. 더 많은 PartiQL 패턴(그리고 그 뒤에 있는 한계) PartiQL examplesPartiQL vs SQL.

모든 항목 삭제 중(잘림)

DynamoDB에는 잘림 없음이 있습니다. 귀하의 옵션(선호도 순):

  1. 테이블을 삭제하고 다시 생성합니다. 전체 테이블을 항목별로 삭제합니다. 항목당 하나의 청구서를 작성합니다. DeleteTable + CreateTable는 옆으로 비켜갑니다. 전체 쓰기 청구서. 테이블 설정 - 인덱스, TTL, , 용량 모드, 태그 — 저절로 돌아오지 않습니다. 당신은 그것을 다시 선언합니다 생성(코드형 인프라로 인해 이벤트가 발생하지 않음)
  2. 로 항목을 만료합니다. "X보다 오래된 모든 항목 삭제"가 실제로는 TTL는 만료된 항목을 삭제합니다. 쓰기 용량을 소모하지 않는 백그라운드 — 슬로우 모션 대량 삭제 비용이 전혀 들지 않습니다.
  3. 스캔 + 일괄 삭제 (Method 1) 테이블이 라이브 상태로 유지되어야 하고 일부만 진행되는 경우 — 읽기당 비용을 지불합니다. 검색된 항목과 항목당 쓰기가 삭제되었습니다.

DynoTable에서 여러 항목 삭제

위의 선택 후 삭제 흐름(쿼리, 키 수집, 청크, 재시도)은 다음과 같습니다. 정확히 GUI가 소유해야 하는 바쁜 업무입니다. DynoTable에서는 그리드입니다. 선택:

  1. 쿼리를 실행하거나 filter하여 행이 당신이 가고 싶은 것은 화면에 있습니다.
  2. 이를 선택하고 ⌘⌫를 누릅니다. 선택한 모든 행은 단계화됩니다. 삭제. 아직 DynamoDB에 영향을 미치지 않았습니다. 그리드에서 행이 빨간색으로 표시됩니다. 준비 패널에 검토 가능한 카드로 표시됩니다.
  3. 검토한 다음 커밋합니다. 다음을 사용하여 TransactWriteItems 배치로 배송을 약속합니다. 낙관적 잠금 조건 - Stage된 삭제는 다음과 같은 경우에만 진행됩니다. 항목이 여전히 존재하며 큰 단계는 자동으로 청크되어 유지됩니다. DynamoDB의 트랜잭션 한도 내에서. ⌘⇧⌫는 검토를 건너뛰고 하나의 코드에서 선택 항목을 삭제하고 커밋합니다.
DynoTable의 스테이징된 삭제 — 그리드에서 빨갛게 표시된 선택 행들이, 커밋 전 스테이징 패널에서 각각 검토 가능한 카드가 됩니다.
DynoTable의 스테이징된 삭제 — 그리드에서 빨갛게 표시된 선택 행들이, 커밋 전 스테이징 패널에서 각각 검토 가능한 카드가 됩니다.

범위는 정직합니다. 선택한 행을 삭제합니다. 커밋할 때까지 복구 가능한 작업 — 블라인드 전체 테이블 자르기가 아닙니다. 에 대한 전체 테이블을 지우고 삭제한 후 다시 생성합니다(위).

삭제에 손으로 직접 작성해야 하는 경우(attribute_exists, 버전 확인), 정확한 ConditionExpression + 자리 표시자 맵을 빌드하세요. DynamoDB Expression Builder 그리고 부착하세요 대신 DeleteItem 또는 거래로 전환하세요.

FAQ

한 번의 DynamoDB 호출로 여러 항목을 삭제할 수 있습니까? 예 — BatchWriteItem로 최대 25개(최선의 노력, UnprocessedItems 재시도) 또는 TransactWriteItems를 사용하여 원자적으로 최대 100개까지 가능합니다. 둘 다 전체 기본 과정을 수강합니다. 항목별 키; 둘 다 항목을 선택하기 위해 "위치" 조건을 허용하지 않습니다.

DynamoDB 어디에 DELETE가 있나요? 아니요. 하위 수준 API나 PartiQL 모두 조건에 따라 삭제할 수 없습니다. — PartiQL의 DELETE에는 "단일 기본 키 값으로 해결"되는 WHERE이 필요합니다. 먼저 키를 쿼리하거나 스캔한 다음 각 키를 삭제합니다.

DynamoDB 테이블의 모든 항목을 삭제하려면 어떻게 해야 합니까? 전체 지우기의 경우 테이블을 삭제하고 다시 생성하면 한 번의 쓰기 비용이 발생하지 않습니다. 항목당. 연령 기반 정리의 경우 TTL를 사용하여 삭제합니다. 쓰기 용량을 소모하지 않고 만료된 항목. 스캔 + 일괄 삭제는 테이블이 라이브 상태로 유지되어야 하는 경우 대체.

일괄 삭제 후 항목이 다시 나타나는 이유는 무엇입니까? 거의 항상 재시도되지 않음 UnprocessedItems: 조절된 BatchWriteItem 응답에서 실패한 삭제와 그렇지 않은 코드를 자동으로 반환합니다. 테이블에 아직 항목이 있는 상태에서 "완료"를 반복합니다. 재시도 맵이 다시 비워질 때까지 지수 백오프.

항목 삭제 비용은 얼마입니까? 각 삭제는 표준 쓰기입니다(1KB당 하나의 WCU, 트랜잭션), 키를 찾는 데 드는 비용도 읽습니다. 피해 추정 pricing calculator.

무엇을 삭제하고 있는지 먼저 확인하고 싶으신가요? DynoTable 다운로드 — 행을 선택하고, ⌘⌫로 삭제를 준비하고, 차이점을 검토하고, 확실할 때 커밋하세요.

업데이트됨