CUBRID의 특징

완벽한 트랜잭션 지원

트랜잭션의 원자성(atomicity), 일관성(consistency), 격리성(isolation), 지속성(durability)을 완벽하게 보장하기 위해 CUBRID는 다음의 기능을 충실하게 지원한다.

데이터베이스 백업 및 복구

데이터베이스 백업은 CUBRID 데이터베이스 볼륨, 제어 파일, 로그 파일을 저장하는 작업이고, 데이터베이스 복구는 백업 작업에 의해 생성된 백업 파일, 활성 로그, 보관 로그를 이용하여 특정 시점의 데이터베이스로 복구하는 작업이다. 이 때, 복구 환경은 백업 환경과 동일한 운영체제 및 동일 버전의 CUBRID가 설치되어야 한다.

CUBRID가 지원하는 백업 방식으로는 온라인 백업, 오프라인 백업, 증분 백업이 있고, 복구 방식으로는 증분 백업에 의한 복구, 부분 복구, 전체 복구가 있다.

테이블 분할 – 파티션

분할 기법(partitioning)은 하나의 테이블을 여러 개의 독립적인 논리적 단위로 분할하는 기법을 가리킨다. 각 논리적 단위를 분할(partition)이라 부르며, 각 분할을 서로 다른 물리적 공간에 나누어 저장하도록 하여 레코드를 검색할 때 해당 분할 만으로의 접근을 통해 성능 향상을 기대할 수 있다. CUBRID가 제공하는 분할 기법은 다음과 같다.

HA 기능

CUBRID는 하드웨어, 소프트웨어, 네트워크 등에 장애가 발생해도 지속적인 서비스가 가능하게 하는 HA(High Availability) 기능을 제공한다. CUBRID의 HA 기능은 shared-nothing 구조이며, CUBRID Heartbeat을 이용하여 시스템과 CUBRID의 상태를 실시간으로 감시하고 장애 발생 시 절체(failover)를 수행한다. CUBRID HA 환경에서 마스터 데이터베이스 서버로부터 슬레이브 데이터베이스 서버로의 데이터 동기화를 위해 다음 두 단계를 수행한다.

  1. 마스터 데이터베이스 서버에서 생성되는 트랜잭션 로그를 실시간으로 다른 node에 복제하는 트랜잭션 로그 다중화 단계
  2. 실시간으로 복제되는 트랜잭션 로그를 분석하여 슬레이브 데이터베이스 서버로 데이터를 반영하는 트랜잭션 로그 반영 단계
Java 저장 프로시저

저장 프로시저는 미들웨어에서 실행되는 로직과 데이터베이스에서 실행되는 로직을 분리하여 응용 프로그램의 복잡성을 줄이고, 재사용성, 보안성, 성능을 향상시킬 수 있는 기법이다. CUBRID는 범용 언어인 Java로 작성되고, Java 가상 머신(JVM, Java Virtual Machine)에서 구동되는 Java 저장 프로시저를 제공한다. CUBRID에서 Java 저장 프로시저를 실행하기 위해서는 다음과 같은 절차가 수행되어야 한다.

  1. Java 가상 머신 설치 및 환경 설정
  2. Java 소스 파일 작성
  3. 컴파일 및 Java 리소스 로딩
  4. 로딩된 Java 클래스를 데이터베이스에서 호출할 수 있도록 등록
  5. Java 저장 프로시저 호출
클릭 카운터

인터넷 환경에서의 데이터 검색 시 검색이력을 남기기 위한 조회수 등과 같은 카운터를 데이터베이스에 유지하는 시나리오가 보편적 이다.

일반적으로 위의 시나리오는 SELECT 문을 이용하여 데이터를 검색하고, 검색한 질의에 대한 조회수를 증가 시키기 위해 다시 UPDATE 문을 통해 구현하는 것이 일반적인 방식이었다.

이 방식은 한 데이터에 SELECT가 집중될 때 UPDATE에 대한 잠금(Lock) 경쟁이 가중되어 급격한 성능 저하가 발생하는 단점이 존재한다.

이에 CUBRID는 인터넷 환경에서 사용자 편의성 및 성능 측면에서 최적화된 기능을 제공하기 위해 클릭카운터(Click Counter) 라는 새로운 개념을 도입하고, 이를 위해 INCR 함수 및 WITH INCREMENT FOR 구문을 제공한다.

관계형 데이터 모델 확장

컬렉션

관계형 데이터베이스에서는 한 컬럼이 여러 개의 값을 가지는 것을 허용하지 않지만, CUBRID는 한 컬럼이 여러 개의 값을 가지도록 정의할 수 있다. 이를 위해 CUBRID에서는 컬렉션(collection)이라는 데이터 타입을 제공하는데, 컬렉션 타입은 집합 원소의 중복 허용 여부와 순서 유지 여부에 따라 크게 SET, MULTISET, LIST의 세 종류로 구분할 수 있다.

상속

상속은 부모 테이블에서 생성된 컬럼과 메소드들을 자식 테이블에서 재사용할 수 있게 하는 개념으로서, CUBRID는 상속을 지원함으로써 재사용성을 제공한다. CUBRID에서 제공하는 상속 기능을 이용하여 공통의 컬럼을 가지는 부모 테이블을 생성하고, 부모 테이블을 상속받아 고유한 컬럼을 추가한 자식 테이블을 생성함으로써, 필요한 컬럼 수를 최소화한 데이터베이스 모델링이 가능해진다.

컴포지션

관계형 데이터베이스에서는 참조하는 테이블이 참조되는 테이블의 기본 키를 외래 키로 가짐으로써 테이블 간 참조 관계가 정의되는데, 참조되는 테이블의 기본 키가 다수의 컬럼이거나 기본 키의 크기가 매우 큰 경우에는 테이블 간 조인 연산의 성능이 저하되는 문제가 있다. 그러나, CUBRID는 참조되는 테이블의 레코드가 위치하는 물리적인 주소값(OID)을 직접 이용할 수 있으므로 조인 연산 없이도 참조 관계를 정의할 수 있다.

즉, 객체형 데이터베이스에서는 참조되는 테이블의 기본 키 컬럼을 참조하는 대신에, 참조되는 테이블을 도메인(타입)으로 하는 컬럼을 통하여, 한 레코드가 다른 레코드의 참조값을 가지는 컴포지션 관계(composition relation)를 구성할 수 있다.