2020. 7. 2. 02:23ㆍ개발/aws
1. dynamo DB란?
aws에서 제공하는 NoSQL 데이터베이스. 하루에 10조개(!) 이상의 요청을 처리할 수 있고, 초당 2000만개 이상의 피크 요청을 처리할 수 있다고 한다. 기본 개념을 알아보자.
RDB와는 달리 connection에 대한 걱정을 할 필요가 없다. provision throughput 설정할 수 있고, on demand로 설정할 수도 있다. Request를 보내어 그에 대한 Response를 받는 방식. 다음 그림 참고.
2. 테이블 생성
python code로 설정해보겠다. 우선 local 기기가 aws cli를 통해 인증이 되어있는 상태로 계정에서의 dynamoDB 사용이 활성화되어 있어야 한다. 나는 mac을 써서 brew를 통해 boto3라는 패키지를 install하고, 다음과 같이 코드를 작성하였다.
import boto3
import sys
import pickle as pkl
from convert import *
from decimal import Decimal
def create_postcode_info_table(dynamodb=None):
if not dynamodb:
dynamodb = boto3.resource('dynamodb', endpoint_url="https://dynamodb.ap-northeast-2.amazonaws.com")
table = dynamodb.create_table(
TableName='Your_Info',
KeySchema=[
{
'AttributeName': 'your_primary_key_name',
'KeyType': 'HASH' # Partition key
},
],
AttributeDefinitions=[
{
'AttributeName': 'your_primary_key_name',
'AttributeType': 'S'
},
{
'AttributeName': 'attribute1',
'AttributeType': 'S'
},
{
'AttributeName': 'attribute2',
'AttributeType': 'S'
},
{
'AttributeName': 'attribute3',
'AttributeType': 'S'
},
{
'AttributeName': 'attribute4',
'AttributeType': 'N'
},
{
'AttributeName': 'attribute5',
'AttributeType': 'N'
},
],
ProvisionedThroughput={
'ReadCapacityUnits': 10,
'WriteCapacityUnits': 10
}
)
return table
endpoint_url 설정은 설정 region만 유의해서 변경하면 된다. 그리고 KeySchema가 정말 중요한데, key로 활용할 attribute들을 설정하면 된다. 이러한 key의 type은(KeyType) 2가지가 있는데, partition key와 sort key가 그것이다. primary key가 하나의 attribute로 딱 정해지면 해당 attribute를 partition key하나로 설정하여 KeyType에는 'HASH'라는 값을 대입하면 된다. RDB에서 그렇듯이 partition key가 하나로 정해지면 어떠한 항목도 동일한 partition key값을 가질 수 없다. partition key와 sort key가 정해지면 partition key 값이 같을수는 있되 sort key값까지 같을 수는 없다. 즉, partition key와 sort key의 조합은 테이블에서 유일해야 한다. sort key에 대한 KeyType은 'Range'로 하면 된다.
3. Item put
def store_info(infos, dynamodb=None):
if not dynamodb:
dynamodb = boto3.resource('dynamodb', endpoint_url="https://dynamodb.ap-northeast-2.amazonaws.com")
table = dynamodb.Table('info_table')
for info in infos:
postcode_info["float_attribute"] = Decimal(str(info["float_attribute"]))
postcode_info["float_attribute2"] = Decimal(str(postcode_info["float_attribute2"]))
table.put_item(Item=postcode_info)
item put은 위와 같이 하면된다. 해당 shema에 부합하는 dictionary의 array가 input이어야 한다. 그리고 attribute 값이 float일때는 Decimal을 활용하여 변환후 대입한다.
'개발 > aws' 카테고리의 다른 글
20201004 - AWS Certificate 공부중 (0) | 2020.10.04 |
---|