Django/orm

DynamoDB()

두잇 두두 2024. 2. 5. 15:50
728x90

https://yoo11052.tistory.com/174

 

[AWS] DynamoDB란

DynamoDB DynamoDB는 AWS에서 제공하는 서버리스 기반 Key-Value NoSQL 데이터베이스입니다. DynamoDB를 사용하면 높은 성능과 비용적인 측면에서 이점을 가져올 수 있습니다. DynamoDB 특징 NoSQL 데이터베이스

yoo11052.tistory.com

 

DynamoDB가 무엇인지는 위의 블로그에서 잘 나타내주고 있습니다

3줄 요약:

Key-Value 데이터베이스 입니다

서버리스이기에 요청한 만큼만 비용을 지불하면 됩니다.

 

 

 

Django에서 DynamoDB를 사용하기 위해 Amazon Web Services (AWS)의 파이썬 SDK인 boto3를 사용해야 합니다

pip install boto3

 

    def __init__(self, table_name: Optional[str] = None):
    session = boto3.session.Session()
    self.resource = session.resource('dynamodb')
    self.table = None
    if table_name:
        self.set_table(table_name)

    def set_table(self, table_name: str):
        self.table = self.resource.Table(table_name)
 
    def put_item(self, key: dict):
        return self.table.put_item(Item=key,)

    def execute_query(self, keys: Optional[str], condition):
    if keys:
    	return self.table.query(
                ProjectionExpression=keys,
                KeyConditionExpression=condition,
            )
    else:
    	else:
            return self.table.query(
                KeyConditionExpression=condition,
            )

 

init으로 dynamodb를 설정해주었고 set_table 함수를 만들어 table을 관리하게 만들었습니다.

또 key를 바탕으로 가져오는 작업을 하기 때문에 execute_query를 만들었습니다.

 

ProjectionExpression: 쿼리의 결과에서 어떤 속성을 가져올지를 정의합니다. Ex)key1, key2, key3 만 가져올 수 있습니다

KeyConditionExpression: 쿼리의 조건을 정의합니다. 이 조건은 주로 테이블의 파티션 키 및 정렬 키를 기반으로 합니다.

 

ex) Key('pk').eq('value')와 같이 사용합니다. 여기서 'pk'는 파티션 키, 'value'는 파티션 키의 값입니다.

범위 기반은 Key('sk').between('start_value', 'end_value') between을 사용해서 필터링 할 수 있습니다.

 

예시로 이렇게 사용 가능합니다.

query_result = dynamodb_client.query(
    ProjectionExpression='attribute1, attribute2',
    KeyConditionExpression=Key('pk').eq('pk로 만들었던 str') & Key('sk').begins_with('시작 변수')
)

 

 

 

GET

dynamodb_client = DynamoDBClient()
dynamodb_client.set_table('테이블 이름')

query_result = dynamodb_client.execute_query(
         Key('pk').eq('pk로 만들어둔 str')
        )
 
return [
            dict(
                item['해당 value'],
                item['해당 value'],
                item['해당 value'],
            )
            for item
            in sorted(query_result['Items'], key=lambda i: int(i.get('priority', 999)))
        ]

 

post

def post():
	dynamodb_client = DynamoDBClient()
    dynamodb_client.set_table('테이블 바라보게 만들기')
    dynamodb_client.put_item(dict(
    	pk='pk값',
        item_key='값',
        item_key='값',
        item_key='값',
    )