RDB : Related database
SQL : Structured Query Language
테이블 스키마(테이블 정의서)
DDL : Data Definition Language : 테이블 정의
DML : Data Manipulation Language : 테이블 crud, merge, join 등...
데이터 베이스는
프로덕젼 데이터 베이스(OLTP) / 데이터 웨어하우스(OLAP) 로 나뉘는데
OnLine Transaction Processing / OnLine Analytical Processing
빠른 속도, 서비스에 필요한 정보 / 처리 데이터 크기, 분석 혹은 모델 빌딩을 위한 데이터 저장
MySQL, PostgreSQL, Oracle / Redshift, Snowflake, BigQuery, Hive...
프로덕션 데베에 있는 값을 주기적으로 데이터 웨어하우스에 업데이트 할 수 있도록 해야하는데,
FE,BE와 DE,DA,DS는 다루는 데이터의 크기가 다르기 때문에 쿼리로 잘못 호출 시 처리 시간이 굉장히 길어져 프로덕션 운영에 지장을 줄 수 있음
그래서 별도의 데이터 웨어하우스를 마련해야함
그렇기에 DW, ETL 프로세스, 대용량 분산처리 환경등으로 회사의 데이터 인프라를 파악가능하겠다.
1차원 적으로 클래스만 선언하기보단 폴더같은 느낌으로 2단계구성,
대부분의 RDB는 2단계다. 이때 폴더를 데이터베이스, 혹은 스키마 라고 함
테이블> 레코드(행) > 필드(=컬럼)(열) > 이름, 타입, 속성
으로 구성되어 있는데 이때 primary key 속성은 그 값이 중복되지않고 유일해야한다.
1970 IBM에서 만든 데이터베이스 질의/조작 언어
DDL과 DML로 구성되어 있음
빅데이터 시장이 등장하긴 했지만
구조화만 가능하다면 문법자체는 동일하기에 모든 DB tool 은 SQL을 지원
그러나... 1. 비구조화 된 데이터를 다루는 데에는 한계가 있음, 정규표현식 등이 있기야 하지만 복잡하고 제약이 많으며
플랫한 구조만 지원(no nested, 중첩 X like JSON)
결국 필드 안 필드는 지원하지 않아서 spark, hadoop 같은 분산 컴퓨팅 환경이 필요해짐
-Star Schema
일단 프로덕션 DB는 스타 스키마(star scheme)형식이 보통.
한 스키마에 모든 클래스(필드)를 적재하지 않고 논리적으로 단위테이블로 나누고 테이블을 단위 테이블에 저장
장점 : 업데이트가 쉽고 스토리지 낭비가 덜 함.
단점 : 그러나 다른 데이터를 보려면 특정 키를 참고하여 계속 다른 테이블을 JOIN해줘야해서 시간이 더 걸림
데이터 웨어하우스에서는 이렇게 논리적으로 구분해 놓지 않고 그냥 클래스 1차적으로 나열
장점 : 조인을 안해서 처리는 빠른데
단점 : 스토리지 요구 크기가 큼
: 필요한 모든 데이터를 저장한다, 크기가 중요하며 보통 클라우드 기반의 데이터 웨어하우스를 사용
여전히 sql기반이지만 제품에 영향이 가는 프로덕션 DB와는 목적이 다르기에 속도보단 크기가 중요하며,
프로덕션 DB의 값+@들을 저장한다.
ex)
월 고정비용 : AWS의 Redshift
월 가변비용 : google cloud의 Big Query , Snowflake 가 대표적
가변 비용인 big query와 snowflake가 자주 쓰이는 듯
데이터 웨어하우스는 내부직원 대상,
처리 속도가 아닌 데이터의 크기가 중요
폴더를 만들고 폴더에 맞게 db적재하는게 ETL(데이터 파이프라인)임
이걸 구현하게 되면서 데이터 인프라를 생성하는데,
여기서 한 단계 더 발전하면 spark같은 분산처리 시스템이 추가됨
간접데이터>추출,변환,적재>데이터 웨어하우스
: 컴퓨팅 자원을 네트웤을 통해 사용
~할당만큼 반환도 잘 생각하여 효율적으로 자원을 관리하자~
운영 비용(OPEX)이 주 (operating expense)/ 비용은 가변이냐 고정이냐에 따라 다르다
리소스 준비를 위한 대기시간 감소
SW개발 시간 단축
그러나 이런 클라우드 컴퓨팅이 없다면?
서버/네트웤/스토리지 직접 구매, 직접 설정
데이터 센터 물리적 공간 확보
물리적 서버, 공간 구매 후 네트웤 설정 (최소 두 세달
Peak time 기준으로 planning, 그 외 시간엔 자원이 놀게 됨
초기 투자 비용(CAPEX)이 많이 듬 (capital Expenditure)
가장 큰 클라우드 컴퓨팅 서비스 업체
ex)
: 서버, os
ㄴ On-Demand(시간당)/ Reserved(1-3년, 40% 할인) / Spot Instance (남는 리소스 경매)
: 클라우드 저장소 서비스, 계층적 구조 제공, 디렉토리==버킷 디렉토리나 파일 별 접근 권한 설정 가능
그 외 RDS( MySQL, PostgreSQL, Aurora, Oracle, MS SQL Server
DynamoDB, Redshift, ElasticCache,MongoDB, Neptune(Graph database), ....
-> 직접 서버 설치, 할당 할 필요 없이 생성시 선언 만하면 환경 세팅 끝
Lex(conversation Interface),
Polly(Text to speech), Rekoginition(image recognition), Alexa... 등 API 서비스도 제공
+기타
Lambda : Event-driven, serverless computing engine
서비스 구현을 위한 EC2이용 필요X
(cloud에선 cloud Function 를 통해 서비스 구현
azure에선 azure Function으로 불린다)
: Data Warehouse, access by compatible DBMS(like SQL)
최대 2 PB(펜타 바이트) 까지 지원하는
still OLAP (~프로덕션 데베로는 XXX~)
컬럼별 압축이 가능, 컬럼 추가/삭제가 빠름
벌크 업데이트로 대용량 업데이트 지원 (자료가 있는 파일(css, json파일 등)을 S3으로 복사 후 COPY 커맨드로 일괄 복사
고정 비용,고정 용량
다른 데이터 웨어하우스처럼 Primary key uniqueness 보장 X
ㄴ데이터가 많아 pk의 유일성을 검토하기 힘듬 < 개발자가 별도의 코드를 작성해야함
PostgreSQL 8.x와 SQL이 호환되는데, 모든 기능을 지원하는 건 아님,
어쨌든 호환되니 Postgresql 8.x 툴/라이브러리로 redshift에 액세스 가능(==JDBC, ODBC로 접근 가능)
Postgresql, SQL : RDBMS
JDBC : Java DB Connective (SQL같은 명령문을 JAVA 와 연동된 DBMS에 맞춰 변환, 검색 시 Resultset반환)
ODBC : Open DB Connective (SQL 명령문 변환 표준 규격, 순서에 따라 프로그램 사용시 DBMS 신경쓰지 않고 검색 가능(별도의 모듈이 필요하긴 함))
storage종류가 여러개가 있는데....
vCPU, Memory, storage등에 따라 가격도 다름
Dense Storage (storage가 넓음)
ds2.xlarge
ds2.8xlarge
Dense Compute (컴퓨팅 자원이 좋음)
dc2.large
dc2.8xlarge
Managed Storage
ra3.4xlarge
ra3.16xlarge
폴더 구성 예시
DEV
ㄴraw_data CREATE SCHEMA raw_data; #기본 데이터
ㄴanalytics CREATE SCHEMA analytics; #분석한 데이터
ㄴadhoc CREATE SCHEMA adhoc; #test등 자유롭게 사용
위 폴더/ 혹은 CREATE SCHEMA는 admin만 가능
Postgresql 8.x 와 호환되는 모든 툴과 언어를 통해 접근 가능
SQL workbench(Mac, window), postico (Mac)
Psycopg 모듈(python)
Looker, Tableau, PowerBI 등 시각화 툴