반응형

AWS DynamoDB에서 데이터를 가져오는 방법으로 주로 Query, GetItem, 그리고 BatchGetItem 작업을 사용합니다. 이 중 Query는 테이블에서 하나 이상의 항목을 검색하는 데 사용되며, GetItem은 특정 항목을 직접 검색하는 데 사용됩니다. 여러 GetItem 요청을 병렬로 실행하기 위해 Promise.all을 사용할 수도 있습니다.

 

 

성능과 비용 차이

  1. Query
    • 성능: Query는 단일 요청으로 여러 항목을 검색할 수 있기 때문에 네트워크 지연 시간이 줄어들고, 전체적으로 더 빠른 성능을 제공할 수 있습니다.
    • 비용: Query는 읽기 용량 단위(RCU)를 기반으로 비용이 청구됩니다. 반환된 데이터의 양에 따라 비용이 달라질 수 있습니다.
      const AWS = require('aws-sdk');
      const dynamoDB = new AWS.DynamoDB.DocumentClient();
      
      const params = {
          TableName: "테이블명",
          KeyConditionExpression: "PartitionKey = :value",
          ExpressionAttributeValues: {
              ":value": "원하는 파티션 키 값"
          }
      };
      
      dynamoDB.query(params, function(err, data) {
          if (err) {
              console.error("Error", err);
          } else {
              console.log("Query succeeded:", data.Items);
          }
      });​
  2. GetItem with Promise.all
    • 성능: 각 GetItem 요청은 별도의 네트워크 호출을 필요로 하므로, Query에 비해 네트워크 지연이 더 클 수 있습니다. 그러나 Promise.all을 사용하면 이러한 요청들이 병렬로 실행되므로, 단일 GetItem 요청보다는 빠를 수 있습니다.
    • 비용: GetItem은 요청된 각 항목에 대해 RCU를 소비합니다. 따라서, 가져올 항목 수가 많을수록 비용이 증가할 수 있습니다.
      let keys = [
          { "PartitionKey": "값1", "SortKey": "값2" },
          { "PartitionKey": "값3", "SortKey": "값4" },
          // 여기에 더 많은 키를 추가할 수 있습니다.
      ];
      
      let requests = keys.map((key) => {
          return dynamoDB.get({ TableName: "테이블명", Key: key }).promise();
      });
      
      Promise.all(requests)
          .then(results => {
              console.log("All items:", results);
          })
          .catch(error => {
              console.error("Error", error);
          });​

 

선택 기준

  • 데이터 양과 종류: 적은 양의 특정 항목을 가져와야 할 경우 GetItem이 더 적합할 수 있습니다. 반면, 특정 범위의 항목을 검색해야 하는 경우 Query가 더 효율적일 수 있습니다.
  • 응답 시간: Query는 일반적으로 더 빠른 응답 시간을 제공합니다.
  • 비용 예산: 많은 수의 항목을 가져와야 하는 경우, Query가 비용 효율적일 수 있습니다.

결론적으로, 어떤 방법을 사용할지는 사용 사례와 요구 사항에 따라 결정되어야 합니다. Query는 대체로 더 빠르고 비용 효율적이지만, 특정 항목만 필요한 경우에는 GetItem이 더 적합할 수 있습니다.

반응형