해시 및 범위 기본 키란 무엇인가?

2024-07-27

해시 키는 항목을 식별하는 데 사용되는 단일 속성입니다. 문자열, 숫자 또는 바이너리 데이터와 같은 다양한 데이터 형식을 사용할 수 있습니다. 해시 키는 항목을 DynamoDB 테이블 내의 분할로 매핑합니다. 분할은 테이블의 데이터를 작은 청크로 나누는 데 사용되는 논리적 그룹입니다.

범위 키는 해시 키와 함께 사용되는 추가 속성으로, 해시 키 내에서 항목을 정렬하는 데 사용됩니다. 범위 키는 문자열, 숫자 또는 날짜 시간 값과 같은 다양한 데이터 형식을 사용할 수도 있습니다. 해시 키와 범위 키를 함께 사용하면 DynamoDB에서 테이블 내의 특정 항목을 빠르게 검색할 수 있습니다.

해시 및 범위 기본 키를 사용하는 장점:

  • 빠른 검색: 해시 및 범위 키를 사용하면 DynamoDB에서 테이블에서 데이터 항목을 빠르고 효율적으로 검색할 수 있습니다. 이는 해시 키가 항목을 분할로 매핑하고 범위 키가 해시 키 내에서 항목을 정렬하기 때문입니다.
  • 확장성: 해시 및 범위 키를 사용하면 테이블을 수 페타바이트 규모까지 확장할 수 있습니다. 이는 DynamoDB가 데이터를 여러 분할에 분산하여 저장하기 때문입니다.
  • 유연성: 해시 및 범위 키를 사용하면 다양한 데이터 모델을 지원할 수 있습니다. 해시 키에는 하나 이상의 속성이 포함될 수 있으며 범위 키는 선택적으로 사용할 수 있습니다.

해시 및 범위 기본 키 사용 시 고려 사항:

  • 해시 키 선택: 해시 키는 신중하게 선택해야 합니다. 해시 키는 테이블에서 데이터 액세스 패턴에 큰 영향을 미치기 때문입니다. 균일하게 액세스 가능한 해시 키를 선택하면 테이블의 성능을 향상시킬 수 있습니다.
  • 범위 키 사용: 범위 키는 항상 필요한 것은 아닙니다. 해시 키만 사용하면 되는 경우 범위 키를 사용하지 않는 것이 좋습니다. 범위 키를 추가하면 테이블 스키마가 복잡해지고 유지 관리가 어려워질 수 있습니다.

DynamoDB에서 해시 및 범위 기본 키를 사용하는 방법:

DynamoDB에서 해시 및 범위 기본 키를 사용하려면 테이블을 만들 때 해시 키와 범위 키 속성을 정의해야 합니다. 또한 데이터 항목을 삽입, 업데이트 또는 삭제할 때 해시 키와 범위 키 값을 제공해야 합니다.

다음은 DynamoDB에서 해시 및 범위 기본 키를 사용하는 방법에 대한 예입니다.

// 테이블 만들기
CREATE TABLE Users (
    UserId INT HASH KEY,
    FirstName TEXT,
    LastName TEXT
);

// 데이터 항목 삽입
INSERT INTO Users (UserId, FirstName, LastName)
VALUES (101, 'John', 'Doe');

// 데이터 항목 검색
GET ITEM FROM Users WHERE UserId = 101;

// 데이터 항목 업데이트
UPDATE Users
SET FirstName = 'Jane',
    LastName = 'Doe'
WHERE UserId = 101;

// 데이터 항목 삭제
DELETE FROM Users
WHERE UserId = 101;

이 예에서는 UserId 속성이 해시 키이고 FirstName 속성이 범위 키입니다. UserId 값 101을 사용하여 특정 사용자 항목을 검색하고 업데이트 및 삭제할 수 있습니다.

결론




Amazon DynamoDB에서 해시 및 범위 키를 사용하는 예제 코드

예제 1: 테이블 만들기

이 예에서는 Products라는 테이블을 만들고 ProductId를 해시 키, ProductName을 범위 키로 정의합니다.

import boto3

dynamodb = boto3.resource('dynamodb')

table = dynamodb.create_table(
    TableName='Products',
    KeySchema=[
        {
            'AttributeName': 'ProductId',
            'KeyType': 'HASH'
        },
        {
            'AttributeName': 'ProductName',
            'KeyType': 'RANGE'
        }
    ],
    AttributeDefinitions=[
        {
            'AttributeName': 'ProductId',
            'AttributeType': 'N'
        },
        {
            'AttributeName': 'ProductName',
            'AttributeType': 'S'
        }
    ],
    ProvisionedThroughput={
        'ReadCapacityUnits': 5,
        'WriteCapacityUnits': 5
    }
)

print(table.table_status)

예제 2: 데이터 항목 삽입

이 예에서는 ProductId가 101이고 ProductName이 "Laptop"인 새 제품 항목을 삽입합니다.

import boto3

dynamodb = boto3.resource('dynamodb')

table = dynamodb.Table('Products')

table.put_item(
    Item={
        'ProductId': 101,
        'ProductName': 'Laptop',
        'Price': 1999.99,
        'InStock': True
    }
)

print('데이터 항목이 성공적으로 삽입되었습니다.')
import boto3

dynamodb = boto3.resource('dynamodb')

table = dynamodb.Table('Products')

response = table.get_item(
    Key={
        'ProductId': 101,
        'ProductName': 'Laptop'
    }
)

if 'Item' in response:
    item = response['Item']
    print(item)
else:
    print('해당 제품 항목을 찾을 수 없습니다.')



대체 키 사용 시 고려 사항

  • 복잡성 증가: 대체 키를 사용하면 테이블 스키마가 더 복잡해져 유지 관리가 어려워질 수 있습니다.
  • 성능 저하: 대체 키를 사용하면 인덱스를 추가해야 할 수 있으며 이는 테이블 성능에 영향을 미칠 수 있습니다.
  • 데이터 무결성 문제: 대체 키가 올바르게 유지 관리되지 않으면 데이터 무결성 문제가 발생할 수 있습니다.

따라서 대체 키를 사용하기 전에 장점과 단점을 신중하게 평가해야 합니다. 기본 키로 충분한 경우 대체 키를 사용하지 않는 것이 좋습니다.

대체 키 없이 데이터베이스 설계

대체 키 없이 데이터베이스를 설계하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법 중 두 가지는 다음과 같습니다.

  • 단일 기본 키 사용: 이 방법에서는 하나의 속성을 사용하여 각 데이터 항목을 식별합니다. 이 속성은 고유하고 null이 아닌 값이어야 합니다.

사용해야 할 방법은 특정 요구 사항에 따라 다릅니다. 단일 기본 키를 사용하면 테이블 스키마가 더 간단하지만 복합 기본 키를 사용하면 데이터를 보다 유연하게 검색할 수 있습니다.

결론


hash amazon-dynamodb primary-key

hash amazon dynamodb primary key