DynamoDB
DynamoDB๋ ํ ์ด๋ธ, ํญ๋ชฉ, ์์ฑ์ ํต์ฌ ๊ตฌ์ฑ์์๋ก ๊ฐ์ง๋ค.
ํ ์ด๋ธ → ํญ๋ชฉ์ ์ปฌ๋ ์
ํญ๋ชฉ(์์ดํ ) → ์์ฑ์ ์ปฌ๋ ์ (RDB์ ๋ ์ฝ๋)
์์ฑ → (RDB์ ํ๋)
DynamoDB์ ํน์ง
- ๋ณดํต DB Resource๊ฐ TCP ๊ธฐ๋ฐ ์ฐ๊ฒฐ์ธ๋ฐ ๋นํด DynamoDB๋ HTTP์ฐ๊ฒฐ๋ก ๋น์ฐ๊ฒฐ์ฑ์ด๋ค.
- ์ด๋ ์์ฒญ์ด ์ฌ๋๋ง ์์ฑ๋์ด ์คํ๋๋ ์๋ฒ๋ฆฌ์ค ๊ธฐ์ ์ธ AWS Lambda์ ๋งค์ฐ ์ ์ด์ธ๋ฆฐ๋ค.
- key์ธ์ ์ ํด์ง schema๊ฐ ์๋ค.
DynamoDB๋ ๊ธฐ๋ณธ ํค(Primary Key)๋ฅผ ์ฌ์ฉํ์ฌ ํ ์ด๋ธ์ ๊ฐ ํญ๋ชฉ์ ๊ณ ์ ํ๊ฒ ์๋ณ
- ํํฐ์
ํค (ํด์ ์์ฑ)
- ํํฐ์ ํค ํ๋๋ง์ผ๋ก ๊ธฐ๋ณธ ํค๋ฅผ ๊ตฌ์ฑํ๋ฉด ์ด ํค๋ ์ ์ผํ ๊ฐ์ด๋๋ค.
- ๋ณตํฉ ๊ธฐ๋ณธ ํค ๋ก ๊ตฌ์ฑํ์ฌ ํํฐ์
ํค์ ์ ๋ ฌ ํค ๋๊ฐ๋ก ๊ตฌ์ฑํ ์ ์๋ค.
- ์ด ๊ฒฝ์ฐ์ ์ฌ๋ฌ ํญ๋ชฉ์ด ๋์ผํ ํํฐ์ ํค ๊ฐ๋ ๊ฐ์ง ์ ์๋ค
- (ํํฐ์ ํค, ์ ๋ ฌ ํค)๊ฐ ๋ชจ๋ ๊ฐ์ผ๋ฉด ์๋๋ค.
- ์ ๋ ฌ ํค๋ ‘๋ฒ์ ์์ฑ’์ด๋ฉฐ ์ด๋ ํํฐ์ ํค๊ฐ ๋์ผํ ํญ๋ชฉ๋ค์ ์ ๋ ฌ ํค ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ฐ๊น๊ฒ ์ ์ฅํ๋ ๊ฒ์ ๋ปํ๋ค.
GameScores ํ ์ด๋ธ ํญ๋ชฉ ๊ตฌ์ฑ ์์
- ๊ธฐ๋ณธ ํค๋ (ํํฐ์ ํค, ์ ๋ ฌ ํค) = (UserId, GameTitle) ๊ตฌ์ฑ
UserId๊ธฐ์ค์ผ๋ก ์๋ก ๊ฐ๊น๊ฒ ์ ์ฅ๋์ด ์์ผ๋ฉฐ GameTitle๋ก ์ ๋ ฌ๋์ด ์๋ค.
DynamoDB์ ๋ฐ์ดํฐ ํธ๋ค๋ง ๋ฐฉ์ 3๊ฐ์ง
- Item-based actions
- Item์ RDB์ Row์ ํด๋นํ๋ฉฐ Read์ด์ธ์ ‘Write, Delete, Update’๊ฐ ๊ฐ๋ฅํ๋ค.
- ์ฌ๋ฌ ๋์์ด ๋ถ๊ฐ๋ฅํ๊ณ Primary key๋ฅผ ์ ๊ณตํด์ ํ๋์ ๋์์๋ง ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- ex) GameScoresํ ์ด๋ธ์ userId 101๋ฒ ์์ด๋์ ์์ดํ ์ ํ๋ฒ์ ๋ชจ๋ ์ญ์ ํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ฉฐ ํ๋์ฉ ์ฒ๋ฆฌํด์ค์ผํ๋ค.
- Query
- ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ธฐ์ํ Read-only action
- ํํฐ์ ํค๋ฅผ ์ ๊ณตํด์ผํ๋ฉฐ ์ถ๊ฐ์ ์ผ๋ก ์ ๋ ฌํค์ ์ธ๋ถ ์กฐ๊ฑด์ ์ค์ ํ ์ ์๋ค.
- ex) userId 101๋ฒ์ GameTitle G, M์ผ๋ก ์์ํ๋ ํญ๋ชฉ์ ๊ฐ์ ธ์๋ฌ๋ผ๊ณ ์์ฒญ
- Scan
- ํ ์ด๋ธ์ ๋ชจ๋ ์์ดํ ์ ๊ฐ์ ธ์ค๋ ๊ธฐ๋ฅ
- ํ ์ด๋ธ์ ๋ค์ด์๋ ์์ดํ ์ด ๋ง๋ค๋ฉด ์ฑ๋ฅ์ด์๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ex) GameScores ํ ์ด๋ธ์ ๋ชจ๋ ์์ดํ ์ ๊ฐ์ ธ์ด
์ํ๋ ๋ฐ์ดํฐ๊ฐ ๊ธฐ๋ณธ ํค๋ฅผ ์ด์ฉํ ์ ์๋ค๋ฉด Query๋ก ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋ค. ํ์ง๋ง ์ํ๋ ์์ฑ์ ๋ํ ๋ฐ์ดํฐ๊ฐ ์๋ก ๋ค๋ฅธ ํํฐ์ ์ ์ํด์๋ค๋ฉด ๋ค๋ฅธ ๋ฐฉ์์ ์ฌ์ฉํด์ผํ๋ค.
๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ํ ์ด๋ธ์ Scanํ ํ Filtering Expression์ ํตํด ์ํ๋ ๋ฐ์ดํฐ๋ง ๊ฑธ๋ฌ๋ด๋ ๊ฒ์ด๋ค. ํ์ง๋ง ์ด๋ ์ฑ๋ฅ์ด ์ข์ง ์๋ค. (๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ์ต๋ ์ฉ๋์ด ํฌ์ง ์์์ ์ฌ๋ฌ๋ฒ ์์ฒญํด์ผํด์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆผ)
๋ฐ๋ผ์, ํ ์ด๋ธ์ด ํฌ๋ค๋ฉด scanํ์ง๋ง๊ณ ๊ธฐ๋ณธํค๋ ๋ณด์กฐ์ธ๋ฑ์ค๋ฅผ ํตํด์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค์.
๋ณด์กฐ์ธ๋ฑ์ค (Secondary Indexes)
- ํค๊ฐ ์๋ ์์ฑ์ ๋ํ ์ฟผ๋ฆฌ ์๋๋ฅผ ๋์ด๊ธฐ ์ํด์ ์ฌ์ฉ
- ์ธ๋ฑ์ค๋ ๊ธฐ๋ณธํ ์ด๋ธ์ ์ํด์์ผ๋ฉฐ ์ด ์ธ๋ฑ์ค๋ฅผ DynamoDB๊ฐ ๊ด๋ฆฌ(์ถ๊ฐ, ์ ๋ฐ์ดํธ, ์ญ์ )
- https://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/GSI.html [๊ณต์๋ฌธ์ ์ฐธ๊ณ ]
๋ณด์กฐ์ธ๋ฑ์ค ์ฌ์ฉ ์์
- ์์ GameScores ํ ์ด๋ธ์์ ‘ํน์ ๊ฒ์์ ์ต๊ณ ์ ์’๋ฅผ ์์๋ด๊ณ ์ถ์ ๋..
- ํค๊ฐ ์๋ ์์ฑ์ ์ฟผ๋ฆฌ ์๋๋ฅผ ๋์ด๊ธฐ ์ํด ์ธ๋ฑ์ค๋ฅผ ์ ์ฉ
- ๊ธฐ๋ณธ ํค๋(ํํฐ์ ํค, ์ ๋ ฌ ํค) = (GameTitle, TopScore)๊ตฌ์ฑ (์ ๋ ฌํค๋ ํ์ X)
- UserId๋ ๊ธฐ๋ณธ ํ ์ด๋ธ์ ํค ์์ฑ์ด๋ฏ๋ก ์ธ๋ฑ์ค์ ํจ๊ป ํ์๋จ
- ์ด์ GameTitleIndex๋ฅผ ์ฟผ๋ฆฌํ๋ฉด ํน์ ํ์ดํ์ ์ต๊ณ ์ ์๋ฅผ ์ฝ๊ฒ ์์๋ผ ์ ์๋ค.
DocumentClient
DynamoDB DocumentClient๋ ์์ฑ ๊ฐ์ ๊ฐ๋ ์ ์ถ์ํํ์ฌ ์์ ์ ๊ฐ์ํ
[AWS DocumentClient ๊ณต์๋ฌธ์ ์ฐธ๊ณ ]
https://github.com/Parkyunhwan/AWSLambda-crud-ex
ํ๋ก์ ํธ์ lambdaํด๋๋ก ๊ฐ์๋ฉด documentClient์ CRUD์์๋ฅผ ์ฐธ๊ณ ํ์ค ์ ์์ต๋๋ค.
'๐ญComputer Science๐ญ > ๋ฐ์ดํฐ๋ฒ ์ด์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DB] 1NF, 2NF, 3NF ๊ฐ๋จ ์ ๋ฆฌ (0) | 2021.04.04 |
---|---|
[DB] ํจ์์ ์ข ์์ฑ (Funtional Dependency) (0) | 2021.04.04 |
[DB] ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฝ์ , ๊ฐฑ์ , ์ญ์ ์ด์ ํ์ (Anomaly) (0) | 2021.04.04 |
[DB] ํธ๋์ญ์ ์ด๋? (0) | 2021.04.01 |