DynamoDB 기초 지식과 boto3에서의 간단한 사용법
기사 정보
DynamoDB를 사용하기 위해 배운 내용 요약
DynamoDB
NoSQL 데이터베이스 서비스
DB 구조, 용어
NoSQL 데이터베이스 서비스
DB 구조, 용어
RDS의 테이블
RDS에서의 레코드
RDS의 열
item간에attribute는 일치하지 않아도 된다
이하 Partition Key, Sort Key가 되는 attribute 이외는 table 생성시에 설정 불필요
DynamoDB에서 Item을 고유하게 결정하는 키
기본 키라고도하는 것 같다
테이블 생성시 설정(필수)
단독으로 Primary Key로 사용 가능
테이블 생성시 설정
Partition Key + Sort Key에서 Primary Key로 사용 가능
Partition Key의 값이 동일하고 Sort Key의 값이 다른 경우 Partition Key + Sort Key로 Item을 고유하게 결정
Primary Key
table 생성시 Primary Key를 이하 2패턴에서 선택
1의 경우, Partition Key가 같은 데이터는 등록 불가
2의 경우, Partition Key, Sort Key가 모두 같은 데이터는 등록 불가
색인
Key(Partition Key, Sort Key)로 설정한 것 이외의 attribute로 좁혀 검색(쿼리)을 실시하기 위해서,
Partition Key, Sort Key를 다른 attribute로 설정한 것
로컬 보조 인덱스 (LSI)와 글로벌 보조 인덱스 (GSI)의 두 가지 유형이 있습니다.
로컬 보조 인덱스(LSI)
아래와 같이 Sort Key만 다른 Attribute로 변경한 것
※Primary Key를 Partition Key + Sort Key로 한 경우에만 작성 가능
※LSI를 설정하는 경우, table 작성시에 설정할 필요가 있으며, 설정 방법은 후술
글로벌 보조 인덱스(GSI)
아래와 같이 Partition Key, Sort Key를 다른 attribute로 변경한 것
LSI 설정 방법
아래와 같이 테이블 설정 열의 기본 설정 사용을 선택 취소하고 색인 추가를 클릭합니다.
LSI로 설정하는 경우 파티션 키는 테이블의 파티션 키를 지정합니다.
정렬 키로 필터링 검색에 사용할 속성을 설정하고 로컬 보조 인덱스로 만들기 확인
GSI 설정 방법
아래와 같이 색인 탭에서 색인 만들기를 클릭합니다.
데이터 획득 패턴
아래와 같이 색인 탭에서 색인 만들기를 클릭합니다.
데이터 획득 패턴
Primary Key를 사용한 검색
검색할 수 있는 Item이 고유하게 결정되는 경우에만
Primary Key = Partition Key + Sort Key 설정 시 Partition Key로 필터링 검색
LSI, GSI에서 필터링 검색
키 설정 및 데이터 획득 가능/불가
키 설정
스캔
get item
query
Primary Key (Partition Key)
〇
〇
×
Primary Key (Partition Key + Sort Key)
〇
〇
〇
LSI
-
-
〇
GSI
-
-
〇
boto3을 사용한 데이터 검색 예
테이블 정의
【테이블】
Partition Key(SerialNumber) + Sort Key(BuildingId)
【GSI】
데이터 취득 코드
import boto3
import json
from boto3.dynamodb.conditions import Key, Attr
dynamodb = boto3.resource("dynamodb", region_name='ap-northeast-1')
table = dynamodb.Table("EdgeTable")
# Primary Key(SerialNumber + BuildingId)を使用した検索
def get_item(SerialNumber, BuildingId):
response = table.get_item(
Key={
'SerialNumber': SerialNumber,
'BuildingId': BuildingId
}
)
return response['Item']
# Partition Key(SerialNumber)での絞込検索
def query_SerialNumber(SerialNumber):
response = table.query(
KeyConditionExpression=Key('SerialNumber').eq(SerialNumber)
)
return response['Items']
# Partition Key + Sort Key(SerialNumber + BuildingId)での絞込検索
def query_SerialNumber_BuildingId(SerialNumber, BuildingId):
response = table.query(
KeyConditionExpression=
Key('SerialNumber').eq(SerialNumber) & Key('BuildingId').eq(BuildingId)
)
return response['Items']
# GSI(Maker-index)のPartition Key(Maker)での絞込検索
def query_Maker_index(Maker):
response = table.query(
IndexName='Maker-index',
KeyConditionExpression=Key('Maker').eq(Maker)
)
return response['Items']
response = get_item('abdc-000002', 'zyxw-00987')
# response = {'BuildingId': 'zyxw-00987', 'DeviceType': '2', 'Maker': 'CCC', 'ProductionDate': '2019/10/2', 'SerialNumber': 'abdc-000002'}
response = query_SerialNumber('abcd-000001')
# response[0] = {'BuildingId': 'zyxw-12345', 'DeviceType': '1', 'LastMaintenanceDate': '2019/10/5', 'Maker': 'AAA', 'ProductionDate': '2015/10/1', 'SerialNumber': 'abcd-000001'}
# response[1] = {'BuildingId': 'zyxw-12399', 'DeviceType': '5', 'Maker': 'BBB', 'ProductionDate': '2018/1/5', 'SerialNumber': 'abcd-000001'}
response = query_SerialNumber_BuildingId('abcd-000001', 'zyxw-12399')
# response[0] = [{'BuildingId': 'zyxw-12399', 'DeviceType': '5', 'Maker': 'BBB', 'ProductionDate': '2018/1/5', 'SerialNumber': 'abcd-000001'}]
response = query_Maker_index('AAA')
# response[0] = {'BuildingId': 'zyxw-12378', 'DeviceType': '3', 'LastMaintenanceDate': '2017/5/7', 'Maker': 'AAA', 'ProductionDate': '2012/4/5', 'SerialNumber': 'abcd-000003'}
# response[1] = {'BuildingId': 'zyxw-12345', 'DeviceType': '1', 'LastMaintenanceDate': '2019/10/5', 'Maker': 'AAA', 'ProductionDate': '2015/10/1', 'SerialNumber': 'abcd-000001'}
데이터 추가
import boto3
import json
from boto3.dynamodb.conditions import Key, Attr
dynamodb = boto3.resource("dynamodb", region_name='ap-northeast-1')
table = dynamodb.Table("EdgeTable")
def put_item():
table.put_item(
Item={
'SerialNumber': 'abcd-000001',
'BuildingId': 'zyxw-12399',
'DeviceType': '5'
}
)
참고
htps : // 이 m / 우파 l에 ght / ms / 15367 또는 883 d4588c05
htps // d1. 아 wss c. 이 m / 우비나 rs / jp / pdf / 세르 r / s / 20181225_ 아 WS-B ck belt_Dy도 DB. pdf
Reference
이 문제에 관하여(DynamoDB 기초 지식과 boto3에서의 간단한 사용법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/takmot/items/f5015e5a5d28adc01080
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import boto3
import json
from boto3.dynamodb.conditions import Key, Attr
dynamodb = boto3.resource("dynamodb", region_name='ap-northeast-1')
table = dynamodb.Table("EdgeTable")
# Primary Key(SerialNumber + BuildingId)を使用した検索
def get_item(SerialNumber, BuildingId):
response = table.get_item(
Key={
'SerialNumber': SerialNumber,
'BuildingId': BuildingId
}
)
return response['Item']
# Partition Key(SerialNumber)での絞込検索
def query_SerialNumber(SerialNumber):
response = table.query(
KeyConditionExpression=Key('SerialNumber').eq(SerialNumber)
)
return response['Items']
# Partition Key + Sort Key(SerialNumber + BuildingId)での絞込検索
def query_SerialNumber_BuildingId(SerialNumber, BuildingId):
response = table.query(
KeyConditionExpression=
Key('SerialNumber').eq(SerialNumber) & Key('BuildingId').eq(BuildingId)
)
return response['Items']
# GSI(Maker-index)のPartition Key(Maker)での絞込検索
def query_Maker_index(Maker):
response = table.query(
IndexName='Maker-index',
KeyConditionExpression=Key('Maker').eq(Maker)
)
return response['Items']
response = get_item('abdc-000002', 'zyxw-00987')
# response = {'BuildingId': 'zyxw-00987', 'DeviceType': '2', 'Maker': 'CCC', 'ProductionDate': '2019/10/2', 'SerialNumber': 'abdc-000002'}
response = query_SerialNumber('abcd-000001')
# response[0] = {'BuildingId': 'zyxw-12345', 'DeviceType': '1', 'LastMaintenanceDate': '2019/10/5', 'Maker': 'AAA', 'ProductionDate': '2015/10/1', 'SerialNumber': 'abcd-000001'}
# response[1] = {'BuildingId': 'zyxw-12399', 'DeviceType': '5', 'Maker': 'BBB', 'ProductionDate': '2018/1/5', 'SerialNumber': 'abcd-000001'}
response = query_SerialNumber_BuildingId('abcd-000001', 'zyxw-12399')
# response[0] = [{'BuildingId': 'zyxw-12399', 'DeviceType': '5', 'Maker': 'BBB', 'ProductionDate': '2018/1/5', 'SerialNumber': 'abcd-000001'}]
response = query_Maker_index('AAA')
# response[0] = {'BuildingId': 'zyxw-12378', 'DeviceType': '3', 'LastMaintenanceDate': '2017/5/7', 'Maker': 'AAA', 'ProductionDate': '2012/4/5', 'SerialNumber': 'abcd-000003'}
# response[1] = {'BuildingId': 'zyxw-12345', 'DeviceType': '1', 'LastMaintenanceDate': '2019/10/5', 'Maker': 'AAA', 'ProductionDate': '2015/10/1', 'SerialNumber': 'abcd-000001'}
import boto3
import json
from boto3.dynamodb.conditions import Key, Attr
dynamodb = boto3.resource("dynamodb", region_name='ap-northeast-1')
table = dynamodb.Table("EdgeTable")
def put_item():
table.put_item(
Item={
'SerialNumber': 'abcd-000001',
'BuildingId': 'zyxw-12399',
'DeviceType': '5'
}
)
참고
htps : // 이 m / 우파 l에 ght / ms / 15367 또는 883 d4588c05
htps // d1. 아 wss c. 이 m / 우비나 rs / jp / pdf / 세르 r / s / 20181225_ 아 WS-B ck belt_Dy도 DB. pdf
Reference
이 문제에 관하여(DynamoDB 기초 지식과 boto3에서의 간단한 사용법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/takmot/items/f5015e5a5d28adc01080
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(DynamoDB 기초 지식과 boto3에서의 간단한 사용법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/takmot/items/f5015e5a5d28adc01080텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)