프로덕션 데이터베이스
데이터 웨어하우스
프로덕션 데이터베이스만 쓸때 발생하는 문제점
보통 회사가 작은 경우 프로덕션 데이터베이스만 존재한다. 프로덕션 데이터베이스은 서비스와 연동되어 사용되어진다. 만약 이러한 데이터베이스에 큰 쿼리를 날리게되면 서비스의 속도가 느려지게되는 문제가 발생할 수 있다. 그래서 서비스에 영향을 주지 않는 데이터 웨어하우스가 필요하다. (프로덕션 데이터베이스는 메모리, 데이터웨어하우스는 디스크와 비슷한역할을 하는듯?)
보통 관계형 데이터베이스는 2단계로 구성된다. 테이블들은 가장 및단에 존재하며, 테이블
은 데이터의 목적, 특징 등에 맞게 여러 폴더에 나뉘어 저장된다. 이러한 폴더를 데이터베이스 or 스키마
(데이터베이스에 따라 다르게 부름)라고 부른다.
기본적으로 각 테이블은 테이블의 각 열에 대한 정보를 담는 테이블 스키마를 가지고 있다. 테이블 스키마
는 이름, 타입, 속성
으로 구성된다. 이때 속성에 해당하는 Primary key는 하나이상의 필드로 구성되며 그 필드의 조합으로 유일성을 보장해준다. 즉, Primary key로 지정된 필드에 테이블에 이미 존재하는 값을 저장하려고 하면 테이블에서 reject한다.
Structured Query Language 라고 불리며, 관계형 데이터베이스에 있는 데이터(테이블)를 질의하거나 조작해주는 언어이다. SQL은 두 종류의 언어로 구성된다.
DDL(Data Definition Language)
: 테이블의 구조를 정의하는 언어DML(Data Manipulation Language)
: 테이블에서 원하는 레코드들을 (읽어오는 질의 언어/추가,삭제,갱신해주는 언어)SQL은 구조화된 데이터를 다루는한 데어터 규모와 상관없이 쓰인다. 모든 대용량 데이터 웨어하우스는 SQL기반이다.(Redshift, Snowflake, BigQuery, Hive) Spark(SparkSQL), Hadoop(Hive) 에도 SQL이 쓰인다.
SQL의 단점
또한 존재한다. 구조화된 데이터를 다루는데 최적화되어 있다는 점이다.
데이터를 어떻게 표현할 것인가에 관한 것이 데이터 모델링
이다. 데이터 모델링을 하는 방법은 크게 2가지가 있다. Star schema, Denormalized schema 가 있다. Star schema
는 데이터를 논리적인 단위로 나누어 포멧을 만들어 데이터를 관리하는 형태이다. 스토리지 낭비가 덜하고 업데이트가 쉬운 장점이있다. 보통 production database에서 많이 사용한다. Denormalized schema
는 반대로 단위 테이블로 나눠 저장하지 않아 별도로 조인이 필요 없는 형태를 말한다. 이는 스토리지를 더 사용하지만 조인이 필요 없기에 빠른 계산이 가능하다는 장점이 있다. 데이터 웨어하우스에서 사용하는 방식이다.
데이터 웨어하우스는 큰 쿼리로 인한 서비스 장애를 막기 위해 생겨난 데이터베이스이다. 여전히 SQL 기반의 관계형 데이터베이스이며 회사에 필요한 모든 데이터를 저장하는 곳이며 고객이 아닌 내부 직원을 위한 데이터베이스이다.
AWS 의 Redshift, Google Cloud의 Big Query, Snowflake등이 대표적이다. 참고로 Redshift보다 Big Query, Snowflak가 더 scalable하고 좋은 데이터 웨어하우스이다. Redshift는 고정비용, Big Query Snowflake는 가변비용이다. 가변비용의 경우 사용량에 따른 비용이 청구되어 지나친 사용을 하게되면 큰 비용이 청구되는 위험이 있다. 하지만 이러한 비용관리를 잘 하게 되면 Big Query, Snowflake를 쓰는 것이 더 좋은 방법이다. 하지만 사용법 자체에는 큰 차이가 없다.
외부에 존재하는 데이터를 읽어다가 데이터 웨어하우스로 저장해주는 과정이 필요해지는데 이를 ETL혹은 데이터 파이프라인이라고 부른다. 이러한 과정은 데이터 엔지니어가 관리하며 시스템이 발전하게되면 비구조화된 데이터들이 생겨 Spark와 같은 대용량 분산처리 시스템이 추가될 수 있다.