입문5분 분량

DynamoDB 데이터를 보고, 찾아보고, 편집하는 방법

DynamoDB 테이블에 대한 모든 "살펴보기" 또는 "변경"은 작은 테이블 세트 중 하나에 매핑됩니다. API 작업 — GetItem, Query, Scan, PutItem, UpdateItem, DeleteItem. 아래에는 관계형 테이블 뷰어가 없습니다. "테이블 탐색"은 말 그대로 Scan이고 "행 편집"은 에 대해 UpdateItem입니다. 어느 것을 아는가 각 클릭이 매핑되는 작업은 저렴한 읽기와 전체 테이블의 차이입니다. 스캔은 실행할 의도가 없었습니다.

DynoTable은 바로 이러한 작업에 대한 GUI입니다. 이는 귀하가 어떤 작업을 하고 있는지 보여줍니다. 곧 실행될 예정이며, 실행되기 전에 비용이 발생합니다.

DynamoDB 테이블을 탐색하는 방법

"그 안에 무엇이 있는지 보기" 위해 테이블을 여는 것은 Scan입니다. 테이블에 있는 모든 항목을 읽습니다. 테이블 또는 인덱스(AWS: "Amazon DynamoDB의 Scan 작업은 테이블이나 보조 테이블의 모든 항목을 읽습니다. 색인."). 작은 테이블에는 적합합니다. 큰 것에서는 고전적인 비용의 풋건입니다. query vs scan에 포함됩니다.

단일 Scan는 최대 1MB의 데이터를 반환하고 다음 사용자에게 LastEvaluatedKey을 전달합니다. 다음 페이지를 가져옵니다. 따라서 "전체 테이블 탐색"은 실제로 페이지 매김 루프입니다. (AWS: "단일 Scan 요청으로 최대 1MB의 데이터를 검색할 수 있습니다." 및 " Scan 응답의 LastEvaluatedKeyExclusiveStartKey로 사용되어야 합니다. 다음 Scan 요청을 위해"). 참조 커서 작동 방식과 오프셋 스타일 페이지가 필요한 이유에 대한 pagination 여기에는 숫자가 없습니다.

DynamoDB 데이터를 필터링/스캔하는 방법

은 스캔을 저장하지 않습니다. DynamoDB는 다음을 적용합니다. 읽기가 완료된 후_ 필터를 사용하면 스캔된 모든 항목에 대해 비용을 지불하게 됩니다. 당신이 유지하는 행.

필터 표현식은 Scan이 끝난 뒤, 결과가 반환되기 전에 적용됩니다. 따라서 Scan은 필터 표현식이 있든 없든 같은 양의 읽기 용량을 소비합니다. — AWS Scan 문서

응답은 이를 가시화합니다: ScannedCount는 "평가된 항목 수, ScanFilter이 적용되기 전"이고 Count는 필터에서 살아남은 것입니다. (AWS). 작은 Count가 있는 높은 ScannedCount는 비효율적인 스캔의 특징입니다.

DynamoDB 테이블을 쿼리하는 방법

Query은 저렴하고 대상이 지정된 읽기이지만 파티션 키가 필요합니다. 당 AWS: "파티션 키 속성의 이름과 단일 값을 제공해야 합니다. 그 속성. Query은 해당 파티션 키 값이 있는 모든 항목을 반환합니다. 선택적으로, 정렬 키 속성을 제공하고 비교 연산자를 사용하여 검색 결과."

따라서 Query는 하나의 파티션 키 아래 항목만 읽으며 선택적으로 정렬 키 조건 — 전체 테이블이 아닙니다. 파티션 키 없음, Query 없음: 당신은 Scan로 돌아갑니다. 그 선택은 비즈니스에서 가장 중요한 비용 결정입니다. 다이나모DB; 전체 분석은 query vs scan에 있습니다.

us-east-1에서 주문형으로 테이블을 열어 "탐색"하면 Scan 페이지가 실행됩니다. 검사한 항목별로 4KB당 0.5 RCU 최종 일관성을 청구함 - GUI 1KB 행의 10GB 테이블을 스크롤하면 2.5 정도입니다. 모든 것을 로드하는 경우 백만 RCU. 하나의 파티션 키에서 대상 Query을 읽습니다. 해당 항목 컬렉션만. 탐색과 쿼리를 추정해 보세요. pricing calculator.

KeyConditionExpression / FilterExpression를 손으로 쓰지 않고 조립하려면 자리 표시자 구문을 사용하려면 DynamoDB Expression Builder — 다음을 방출합니다. API가 예상하는 정확한 이름/값을 매핑합니다.

DynamoDB에서 항목을 편집하는 방법

한 항목을 편집하는 것은 전체 기본 키에 대해 UpdateItem입니다. 당신은하지 않습니다 전체 항목을 다시 작성합니다. — 항목 이름만 지정하는 __을 제공합니다. 변경하려는 속성:

UpdateItem
  Key:              { "PK": "USER#42", "SK": "PROFILE" }
  UpdateExpression: SET email = :e, updatedAt = :t

사람들을 놀라게 하는 두 가지 사실 AWS items docs:

  • 기본 키의 일부가 아닌 전체 기본 키를 지정해야 합니다. 파티션 키와 정렬 키가 있는 테이블입니다. "행을 편집"할 수 없습니다. 임의의 속성 - 먼저 키를 찾으려면 스캔이 필요합니다.
  • UpdateItem은 upsert입니다. "지정된 키를 가진 항목이 존재하지 않는 경우, UpdateItem은 새 항목을 생성합니다. 그렇지 않으면 기존 항목을 수정합니다. 속성." 키에 오타가 있으면 오류가 발생하지 않고 자동으로 새 항목이 생성됩니다.

항목 삭제 방법

A DeleteItem, 다시 전체 기본 키로 키 지정됨: "DeleteItem은 지정된 키를 가진 항목을 삭제합니다" (AWS). 편집과 동일한 규칙 — 전체 키가 필요하므로 "상태 =인 모든 행을 삭제합니다." 'open'"은 하나의 호출이 아닙니다. 스캔/쿼리하여 키를 찾은 다음 각 키를 삭제합니다. BatchWriteItem 최대 25개의 넣기/삭제 요청 번들 (AWS: "BatchWriteItem 작업에는 최대 25개의 개별 PutItemDeleteItem 요청"), 그러나 각각은 여전히 하나의 키를 대상으로 합니다. DELETE … WHERE은 없습니다.

중첩/JSON 데이터를 보는 방법

DynamoDB 항목은 유형 태그가 지정된 연결 형식(DynamoDB-JSON)으로 저장됩니다. 값은 한 글자 또는 두 글자 유형 설명자를 전달합니다(S, N, M, L, SS… — 전체 설명자 목록은 AWS data types docs). 일반 JSON에는 설정된 유형이 없으므로 배열은 목록(L)으로 왕복되며 문자열은 절대 사용되지 않습니다. set (SS) — 디스플레이 버그가 아닌 실제 변환 제한입니다. 전체 유형 지도는 다음과 같습니다. DynamoDB data types; DynamoDB-JSON Blob을 일반으로 변환하려면 JSON 및 그 반대인 경우에는 DynamoDB JSON converter을 사용하세요.

탐색 및 편집 그 이상: DynamoDB가 할 수 없는 쿼리

Scan/Query/UpdateItem 표지를 보고 편집했지만 _분석_할 수는 없습니다. — DynamoDB에는 JOIN, GROUP BY 또는 COUNT/SUM와 같은 집계 함수가 없습니다. PartiQL doesn't add them either: SELECT 문법은 다음과 같습니다. SELECT … FROM table [WHERE …] [ORDER BY …], 조인 또는 그룹화 절 없음 (AWS PartiQL SELECT reference), 따라서 각 문은 단일 Get/Query/Scan/Put/Update/Delete에 매핑됩니다. DynoTable의 SQL Workbench는 DynamoDB의 실제 쿼리를 통해 테이블을 구체화하여 이러한 격차를 메웁니다. 런타임 및 SQL 실행 — DynamoDB의 액세스 패턴 규칙 내의 SQL — 그러나 일상적인 탐색 및 편집의 경우 위의 작업은 전체 도구 상자입니다.

FAQ

AWS 콘솔 없이 DynamoDB 데이터를 보려면 어떻게 해야 합니까? 동일한 Scan/Query 호출을 발행하는 데스크탑 GUI를 사용하십시오. AWS 콘솔 페이징 스캔을 통해 테이블을 탐색합니다. DynoTable과 같은 전용 클라이언트도 동일하지만 소비된 용량과 실행 중인 작업을 표시합니다.

DynamoDB 항목을 어떻게 편집합니까? SET 업데이트로 항목의 전체 기본 키에 대해 UpdateItem를 발행합니다. 변경하려는 속성만 명명하는 표현식입니다. GUI에서 인라인 편집 셀 — UpdateItem로 컴파일됩니다.

필터링에 전체 검색 비용이 드는 이유는 무엇입니까? DynamoDB는 스캔에서 항목을 읽은 _후_에 필터를 적용하기 때문입니다. 필터링됨 항목은 계속 읽고 측정됩니다. 비용을 절감하려면 파티션 키(또는 GSI)을 스캔하는 대신.

한 번에 여러 항목을 업데이트할 수 있나요? UPDATE … WHERE가 없습니다. 각 UpdateItem/DeleteItem는 단일 기본을 대상으로 합니다. 열쇠. 하나의 원자성 요청으로 여러 항목을 변경하려면 TransactWriteItems가 적용됩니다. 모두 성공하거나 모두 롤백되는 100개의 쓰기 작업(Update 포함). 그렇지 않으면 당신은 스캔/질의하여 키를 수집한 후 각각 기록합니다(BatchWriteItem당 최대 25개).

DynamoDB 로컬 테이블을 동일한 방식으로 탐색할 수 있습니까? 예 — 로컬 엔드포인트에서 동일한 GUI를 가리킵니다. 참조 DynamoDB Local.

DynamoDB 테이블을 탐색, 필터링, 인라인 편집하고 SQL PartiQL을 실행하고 싶음 할 수 없어? Download DynoTable.

업데이트됨