TIL - SQL and RDB
๐ย ๊ณต๋ถ ๋ด์ฉ
SQL
SQL : Structured Query Language
- DDL(Data Definition Language) : ํ ์ด๋ธ schema ์ ์
- DML(Data Manipulation Language) : ํ ์ด๋ธ ๋ฐ์ดํฐ(๋ ์ฝ๋) ์กฐ์๊ณผ ์ง์
1. SQL ํน์ง
๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ
๋ฅผ ๋ถ์ํ๋ ์ฝ๊ณ ๊ฒ์ฆ๋ ์ธ์ด- ๋น
๋ฐ์ดํฐ ๋ฑ์ฅ -> SQL ํ๋ฝ? ->
๋น ๋ฐ์ดํฐ ๋ํ ๊ตฌ์กฐํ
๋ ๋ถ๋ถ์ด ์๊ธฐ ๋๋ฌธ์ SQL์ด ํ์ -> SQL ์ฌ๊ธฐ - ๋ชจ๋ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค (Redshift, Snowflake, BigQuery ๋ฑ) SQL ๊ธฐ๋ฐ
- ๋ฐ์ดํฐ ์ง๊ตฐ : ๋ฐ์ดํฐ ์์ง๋์ด, ๋ฐ์ดํฐ ๋ถ์๊ฐ, ๋ฐ์ดํฐ ๊ณผํ์ ๋ชจ๋ SQL์ด ์ค์
2. ๋จ์
- ๋น๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๋ฐ ์ ํ์
- ์ ๊ทํํ์์ ํตํด ์ด๋์ ๋๋ง ๊ฐ๋ฅ
- Spark, Hadoop ๊ฐ์ ๋ถ์ฐ ์ปดํจํ ํ๊ฒฝ ํ์
- ๋ง์ RDB๋ ํ๋ซํ ๊ตฌ์กฐ๋ง ์ง์(JSON์ฒ๋ผ nested ๊ตฌ์กฐ X)
RDB
Relational Database
๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ง์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ ์ฅ ์ฅ์น
1. Table Schema?
- table format
- ํ ์ด๋ธ์ ๊ตฌ์ฑํ๋ ์ปฌ๋ผ์ ์ด๋ฆ๊ณผ ํ์
2. RDB ํน์ง
- ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ : RDB์ ์ ์ฅํ๊ธฐ ํธํจ
- But, ๊ตฌ์กฐํ๋์ง ์์ ํํ์ ๋ฐ์ดํฐ๋ ๋ง์ (text, image, video, streaming, …)
3. data modeling
- RDB์์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ํํํ ๊ฒ์ธ๊ฐ? ์ ๋ํ ๊ณ ๋ฏผ
ํ๋ก๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค Production Database
OLTP (Online Transaction Processing)
๋น ๋ฅธ ์๋ต ์๋, ์๋น์ค์ ํ์ํ ๋ฐ์ดํฐ ์ ์ฅ
์น, ์ฑ ์๋น์ค ๋ฑ์ ์ฌ์ฉ๋๋ฉฐ FE, BE ๊ฐ๋ฐ์๋ค์ด ์ฃผ๋ก ์ฌ์ฉ
Star schema
- ๋ฐ์ดํฐ๋ฅผ ๋ ผ๋ฆฌ์ ๋จ์๋ก ๋๋์ด ์ ์ฅํ๋ฉฐ, ํ์ํ ๊ฒฝ์ฐ JOIN
- ์คํ ๋ฆฌ์ง์ ๋ญ๋น๊ฐ ๋ํ๋ฉฐ, ๊ณ์ฐ ์๋๊ฐ ์๋์ ์ผ๋ก ๋๋ฆฌ์ง๋ง ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ๊ฐ ํธํจ
๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค Data Warehouse
OLAP (Online Analytical Processing)
ํฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ๋ฐ์ดํฐ ๋ถ์ ๋๋ ๋ชจ๋ธ ๋น๋ฉ์ ์ํ ๋ฐ์ดํฐ ์ ์ฅ
๋ฐ์ดํฐ ์ง๊ตฐ ๋ฐ ๋ฐ์ดํฐํ์ด ์ฃผ๋ก ์ฌ์ฉ
Denomalized schema
- ๋จ์ ํ ์ด๋ธ๋ก ๋๋์ด ์ ์ฅํ์ง ์์ผ๋ฉฐ, ๋ณ๋์ JOIN์ด ํ์ํ์ง ์์
- ์คํ ๋ฆฌ์ง๋ฅผ ๋ ์ฌ์ฉํ์ง๋ง, ๋น ๋ฅธ ๊ณ์ฐ์ด ๊ฐ๋ฅ
RDB 2๋จ๊ณ ๊ตฌ์กฐ
- db folder(schema)
- tables
|
|
table ๊ตฌ์กฐ
- records(row)
- ํ๋ ์ด์์ field(column)์ผ๋ก ๊ตฌ์ฑ
- field๋ name, type, primary key ์ฌ๋ถ๋ก ๊ตฌ์ฑ๋จ
column name | type | pk? |
---|---|---|
userId | int | |
sessionId | varchar(32) | Yes |
channel | varchar(32) |
Data Warehouse
๋ฐ์ดํฐ ๋ถ์ ๋ฑ ํฐ ๋ฐ์ดํฐ์ ์ฒ๋ฆฌ๋ฅผ ์ํด ๋ณ๋๋ก ์กด์ฌํ๋ DB
ํ๋ก๋์ DB์ ์๋ ์ ํ๋ฅผ ๋ง๊ณ ์๋น์ค์ ์ํฅ์ ์ฃผ์ง ์๊ธฐ ์ํด ๊ตฌ์ฑ
- ๊ณ ๊ฐ์ด ์๋ ๋ด๋ถ ์ง์์ ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ํ๋ก๋์ DB๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ณต์ฌํ์ฌ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค์ ์ ์ฅ
- ํ๋ก๋์
DB์ ๋ค๋ฅด๊ฒ
primary key uniqueness๋ฅผ ๋ณด์ฅํ์ง ์์
1. ์๋น์ค ๋ณ ๋น์ฉ ์ต์ ๋น๊ต
ํ์ฌ | Data Warehouse | ๋น์ฉ ์ฒญ๊ตฌ ์ต์ |
---|---|---|
AWS | Redshift | ๊ณ ์ ๋น์ฉ |
GoogleCloud | Big Query | ๊ฐ๋ณ๋น์ฉ |
Snowflake |
- ์ค์ ์ฌ์ฉ์ ๊ฐ๋ณ๋น์ฉ์ ์จ์ดํ์ฐ์ค ์ฌ์ฉ ์ถ์ฒ
2. ETL(๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ)
- ์ธ๋ถ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ Data Warehouse๋ก ์ ์ฅํ๋ ์ฝ๋
๋ฐ์ดํฐ ์ธํ๋ผ
- ๋ฐ์ดํฐ ์์ง๋์ด๊ฐ ๊ด๋ฆฌ
- ETL, Data Warehouse
- (๋น ๊ตฌ์กฐ์ ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋ ๊ฒฝ์ฐ )Spark ๋ฑ ๋์ฉ๋ ๋ถ์ฐ์ฒ๋ฆฌ ์์คํ
Cloud & AWS
Cloud
์ปดํจํ ์์์ ๋คํธ์ํฌ๋ฅผ ํตํด ์๋น์ค ํํ๋ก ์ฌ์ฉํ๋ ๊ฒ
1. ์ปดํจํ ์์
- ์ด๊ธฐ์๋ ์๋ฒ ๋ฑ ํ๋์จ์ด์ ๊ตญํ๋์ด ์๋น์ค๋จ
- ์ต๊ทผ์๋ mysql ๋ฑ ์ํํธ์จ์ด ๋ํ ์๋น์ค๋๊ณ ์์
2. ํ๋ ฅ์ ์์
“No Provisioning”, “Pay As You Go”
- ์์์ ํ์ํ๋งํผ ์ค์๊ฐ์ผ๋ก ํ ๋นํ์ฌ ์ฌ์ฉํ๋งํผ ์ง๋ถ
- ํ์ํ๋งํผ์ ์์์ ์ ์งํ๋๊ฒ์ด ์ค์
3. ํด๋ผ์ฐ๋ ์ปดํจํ ์ด ์๋ค๋ฉด?
- ์๋ฒ,๋คํธ์ํฌ, ์ ์ฅ์ ๋ฑ ๊ตฌ๋งค์ ์ค์ ใ ์ง์ ์ํ
- ํ์ฅ์ด ํ์ํ๋ฉด ๊ณต๊ฐ๋ถํฐ ํ๋ณดํด์ผํจ
- ์๋ฒ ๊ตฌ๋งค ๋ฐ ์ค์น์ 2~3๋ฌ ์๋ชจ
- Peak time ๊ธฐ์ค์ผ๋ก Capacity planning -> ์์์ด ๋๊ฒ ๋๋ ํ์ ๋ฐ์
- ์ง์ ์ด์ ๋น์ฉ๊ณผ ํด๋ผ์ฐ๋ ์ปดํจํ ๋น์ฉ -> ๊ธฐํ๋น์ฉ (์ง์ ์ค์น์ ์์๋๋ ์๊ฐ์ ๋น์ฉ์ผ๋ก ํ์ฐํ๋ค๋ฉด?)
4. ํด๋ผ์ฐ๋ ์ปดํจํ ์ฅ์
- ์ด๊ธฐ ํฌ์ ๋น์ฉ์ด ํฌ๊ฒ ์ค์ด๋ฌ -> ์ด์ ๋น์ฉ์ด ์ฆ๊ฐ
- ์์ ์ค๋น ๋ฐ ์ค์ ์ ์ํ ๋๊ธฐ์๊ฐ ๋ํญ ๊ฐ์
- ๋ ธ๋ ๋ฆฌ์์ค ์ ๊ฑฐ๋ก ๋น์ฉ ๊ฐ์
AWS
๊ฐ์ฅ ํฐ ํด๋ผ์ฐ๋ ์ปดํจํ ์๋น์ค ์ ์ฒด ํ์ฌ Amazon์์ ์ ์ผ ํฐ ์ด์ต์ ๋ด๊ณ ์์ Netflix, Zynga ๋ฑ ์์ฅ ์ ์ฒด๋ค๋ ์ฌ์ฉ์ค
AWS ์๋น์ค
- EC2: ์๋ฒ ํธ์คํ ์๋น์ค
- S3: ๋์ฉ๋ ํด๋ผ์ฐ์ค ์คํ ๋ฆฌ์ง ์๋น์ค
- Redshift : Data Warehouse ์๋น์ค
- ๊ธฐํ DB ์๋น์ค, AI&ML ์๋น์ค ๋ฑ
Redshift
Scalable SQL ์์ง
- OLAP
- Columnar storage : ์ปฌ๋ผ๋ณ ์์ถ ๊ฐ๋ฅ, ์ปฌ๋ผ ์ถ๊ฐ ๋ฐ ์ญ์ ๊ฐ ๋น ๋ฆ (๋ ์ฝ๋ ๊ธฐ์ค X)
- ๋ฒํฌ ์
๋ฐ์ดํธ ์ง์: insert ์ปค๋งจ๋๋ก๋ ์ถ๊ฐํ๊ธฐ ์ด๋ ค์ด ๋ง์ records๋ฅผ ๊ฐ๊ณ ์๋ ๊ฒฝ์ฐ์
copy
์ปค๋งจ๋๋ฅผ ํตํด ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์ผ๊ด ๋ณต์ฌ ๊ฐ๋ฅ - Postgresql 8.x์ SQL (๋๋ถ๋ถ)ํธํ๋จ
Redshift Schema
|
|
SQL command
|
|
๐ย CHECK
(์ด๋ ต๊ฑฐ๋ ์๋กญ๊ฒ ์๊ฒ ๋ ๊ฒ ๋ฑ ๋ค์ ํ์ธํ ๊ฒ๋ค)