관계형 데이터베이스
✏️ 관계형 데이터베이스
관계형 데이터베이스(RDBMS)는 행과 열을 가지는 표 형식 데이터를 저장하는 형태의 데이터베이스를 가리키며 SQL이라는 언어를 써서 조작합니다.
MySQL, PostgreSQL, 오라클, SQL Server, MSSQL 등이 있습니다. 참고로 관계형 데이터베이스의 경우 표준 SQL은 지키기는 하지만, 각각의 제품에 특화시킨 SQL을 사용합니다.
예를 들어 오라클의 경우 PL/SQL이라고 하며, SQL Server에서는 T-SQL, MySQL은 SQL을 사용합니다.
💡 SQL
SQL(Structured Query Language)는 구조화된 질의 언어로 번역됩니다. 이는 데이터베이스에서 데이터를 질의, 조작, 정의 및 제어하기 위해 설계된 특수 목적의 프로그래밍 언어입니다. SQL의 주요 기능은 다음과 같습니다.
- 질의 : 데이터베이스로부터 정보를 검색합니다.
- 데이터 조작 : 데이터를 삽입, 수정, 삭제합니다.
- 데이터 정의 : 데이터베이스 구조(테이블, 인덱스)를 정의하거나 수정합니다.
- 데이터 제어 : 사용자나 역할에 데이터 접근을 허용하거나 제한합니다.
🐬 MySQL
MySQL은 대부분의 운영체제와 호환되며 현재 가장 많이 사용하는 데이터베이스입니다.
MySQL은 C와 C++로 개발되었습니다. 이는 MyISAM 인덱스 압축 기술과 B-트리 기반의 인덱스를 제공하며, 매우 빠른 조인과 최대 64개의 인덱스 사용이 가능합니다. 대용량 데이터베이스를 위해 설계되어 있으며, 롤백, 커밋, 이중 암호 지원을 통한 보안 기능을 제공합니다. 많은 서비스에서 활용되고 있습니다.
데이터베이스의 핵심 구성 요소인 스토리지 엔진은 모듈식 아키텍처로 이루어져 있어 사용자가 필요에 따라 쉽게 스토리지 엔진을 바꿀 수 있습니다. 데이터 웨어하우징, 트랜잭션 처리, 고가용성 처리 등의 분야에서 강점을 보입니다. 스토리지 엔진 외에도, 커넥터 API 및 서비스 계층을 통해 MySQL 데이터베이스와 쉽게 상호작용할 수 있습니다.
MySQL은 쿼리 캐시 기능도 제공합니다. 이를 통해 사용자가 입력한 쿼리 문에 대한 전체 결과 집합을 저장하게 되며, 쿼리가 캐시에 존재할 경우 서버는 구문 분석, 최적화, 실행 과정을 건너뛰고 캐시 된 결과를 바로 출력하게 됩니다.
💡 MyISAM 인덱스 압축 기술
MyISAM 스토리지 엔진은 고유한 인덱스 압축 기술을 사용합니다. 이 기술은 대량의 데이터에 대한 인덱스를 효과적으로 압축하면서도 빠른 읽기 성능을 유지합니다.
MyISAM의 인덱스 압축은 특히 큰 테이블에서 인덱스의 크기를 크게 줄일 수 있어, 디스크 공간을 절약하고 조회 성능을 향상시킬 수 있습니다.
💡 B-트리 기반의 인덱스
B-트리(Balanced Tree)는 데이터베이스에서 인덱싱을 위해 널리 사용되는 자료 구조입니다. B-트리 기반의 인덱스는 데이터를 정렬된 형태로 저장하여 키의 범위나 특정 값을 빠르게 검색할 수 있습니다.
키 값의 삽입, 삭제 시에도 트리의 균형을 유지하기 때문에 항상 균등한 검색 성능을 보장합니다. MySQL의 InnoDB 스토리지 엔진과 같은 많은 RDBMS들이 B-트리 인덱싱 기술을 사용하여 효율적인 데이터 접근을 제공합니다.
🐘 PostgreSQL
PostgreSQL은 MySQL 다음으로 개발자들이 선호하는 데이터베이스 기술로 널리 인정받고 있습니다.
디스크 조각이 차지하는 영역을 회수할 수 있는 장치인 VACCUM이 특징입니다. 최대 테이블의 크기는 32TB이며 SQL뿐만 아니라 JSON 및 JSONB 형식으로 데이터를 저장하고 검색하는 기능을 제공합니다.
JSONB 형식은 이진 형식으로 데이터를 저장하여 인덱싱과 검색 속도가 향상됩니다. 또한, 지정 시간에 복구하는 기능, 로깅, 접근 제어, 중첩된 트랜잭션, 백업 등을 할 수 있습니다.
💡 VACUUM
VACUUM은 PostgreSQL의 중요한 유지 관리 작업으로, 주요 기능으로는 다음과 같습니다.
- 불필요한 데이터 제거 : 업데이트나 삭제 후 남은 이전 버전의 데이터를 제거합니다.
- 디스크 공간 재활용 : 제거된 데이터의 공간을 재활용해 디스크 사용량을 최적화합니다.
- 인덱스 최적화 : 데이터베이스의 조각화를 줄여 인덱스 성능을 개선합니다.
- 통계 업데이트 : 쿼리 최적화를 위한 통계 정보를 갱신합니다.