profile image

L o a d i n g . . .

728x90

이전 포스팅에서는 DBMS가 데이터를 file, page, tuple의 형태로 디스크에 저장하는 방법에 대해 살펴봤습니다. 이번 포스팅에서는 튜플에 대해 더 자세하게 알아보고 메타데이터는 어떻게 저장하는지와 칼럼형 데이터베이스에 대해 간략히 살펴보겠습니다. 

튜플 속성(attribute)

데이터베이스에서 튜플은 데이터베이스의 개별 행을 나타내는 것으로, 각 튜플은 여러 개의 속성을 가질 수 있습니다. 예를 들어 고객 정보 테이블의 튜플은 "이름", "전화번호", "주소" 등의 속성을 가질 수 있습니다. 이러한 튜플 속성은 데이터베이스의 테이블 컬럼과 대응됩니다. 

튜플 속성이 가질 수 있는 대표적인 데이터 형식은 다음과 같습니다. 

  • INTEGER / BIGINT / SMALLINT / TINYINT 
  • FLOAT / REAL / NUMERIC / DECIMAL 
  • VARCHAR / VARBINARY / TEXT / BLOB 
  • TIME / DATE / TIMESTAMP 

자칫 실수하기 쉬운 소수점과 관련된 데이터 형식에 대해 살펴보겠습니다.  

FLOAT, REAL, NUMERIC, DECIMAL 

FLOAT / REAL 은 부동소수점 데이터 형식입니다. 즉 100% 정확한 데이터 형식이 아닙니다. 그와 반대로 NUMERIC / DECIMAL은 100% 정확도를 보장합니다. 정확한 숫자를 저장해야 할 때 NUMBERIC / DECIMAL 형식을 사용합니다. 

MySQL 소스코드 decimal type 자료구조
MySQL float / decimal 연산 비교

대용량 데이터 

대부분의 DBMS는 튜플의 크기가 페이지 크기보다 큰 것을 허용하지 않습니다. 만약 튜플의 크기가 페이지보다 크다면 overflow 페이지를 활용합니다. 

DBMS별로 Overflow 페이지에 대한 명칭과 사용하는 기준이 다릅니다.  
- Postgres: TOAST (튜플의 크기가 2KB 이상인 경우 사용) 
- MySQL: Overflow (튜플의 크기가 페이지 크기의 절반 이상인 경우 사용) 
- SQL Server: Overflow (튜플의 크기가 페이지 크기 이상인 경우 사용) 

Overflow Page

몇몇 DBMS는 대용량 데이터를 DBMS 외부에 파일 형태로 저장할 수 있도록 지원합니다. 외부의 파일이기 때문에 DBMS는 해당 데이터를 조작할 수 없습니다. 조작할 수 없기에 지속성(durability)을 보장할 수 없고 트랜잭션 기능을 사용할 수 없습니다. 

 

메타데이터  

DBMS는 데이터베이스와 관련된 메타데이터를 저장합니다. 메타데이터는 DBMS가 관리하는 데이터베이스에 함께 저장합니다. 

메타데이터에는 다음과 같은 정보가 저장됩니다. 
- Table, Column, Index, View와 관련된 정보 
- User, Permissions 
- Internal statistics 

 

유저가 이 메타데이터에 접근하기 위해서는 INFORMATION_SCHEMA를 참조하면 됩니다. 

INFORMATION_SCHEMA는 데이터베이스와 관련된 메타데이터를 저장하는 읽기 전용 뷰입니다(ANSI 표준) 

 

칼럼형 데이터베이스 (Column Store Database) 

데이터베이스를 활용하는 작업은 크게 OLTP(On-Line Transaction Processing)과 OLAP(On-Line Analytical Processing)로 분류할 수 있습니다. OLTP형 DBMS는 비교적 적은 수의 데이터에 대한 단순 CRUD 작업에 적합합니다. 이와 다르게 OLAP형 DBMS는 대용량의 데이터를 읽고 처리하는 복잡한 작업에 적합합니다. 

여태까지 살펴본 데이터 저장 방식은 하나의 튜플에 속한 속성을 디스크의 연속된 공간에 저장하는 방식이었습니다. 이는 주로 튜플 단위로 작업하는 OLTP에 적합합니다. 하지만 이 방식이 OLAP에도 적합할까요?

OLTP에 적합한 데이터 저장방식

예를 들어보겠습니다. 위의 테이블에서 전체 튜플의 age에 대한 평균을 구하는 OLAP 작업이 있을 때 디스크에 저장된 데이터를 어떻게 읽어야 할까요? 테이블 내 모든 튜블에 접근해서 age를 구해야 할 겁니다. 만약 모든 튜플의 age 속성이 연속된 공간에 있다면 더 효율적으로 읽을 수 있지 않을까요?

Column Store Database 데이터 저장 형태

칼럼형 데이터베이스는 데이터를 위와 같이 저장합니다. 테이블 내의 동일한 칼럼에 속한 attribute는 모두 디스크의 연속된 공간에 저장합니다. 위에서 얘기했던 age에 대한 평균을 구하는 OLAP 작업은 더 이상 불필요한 영역을 스캔할 필요가 없습니다. Age 속성이 저장된 연속된 디스크 페이지만 탐색하면 되기 때문입니다. 

 

마무리 

이번 포스팅에서는 속성(attribute)의 저장 형식, 메타데이터 저장 방식 및 칼럼형 데이터베이스에 대해 간략히 알아봤습니다. 다음 포스팅에서는 디스크에 저장된 데이터를 메모리에 어떻게 적재해서 처리하는지 살펴보겠습니다. 

728x90
복사했습니다!