티스토리 뷰

개요

  • RocksDB의 특징과 장단점, 응용 사례를 간단히 설명하고자 한다.

RocksDB 특징

  • RocksDBFacebook이 개발하여 오픈 소스로 공개한 고속의 쓰기와 읽기에 최적화된 Key-Value 저장소이다. 멀티 코어 환경의 SSD 저장 장치 기반 서버 환경에서 상당한 성능을 보장하는 것이 특징이다.
  • RocksDB는 네트워크 연결을 통한 원격 접속을 지원하지 않는다. 오직 로컬 컴퓨터에서만 접근 가능하며 특정 언어 환경에서 라이브러리를 통해서만 접근과 제어가 가능하다. 현재 라이브러리를 제공하는 언어는 C++, Java가 있다. (Java 버전의 경우 내부적으로 C++로 구현된 JNI 코드를 호출한다.) 태생부터 분산형 저장소보다는 고성능의 단일 노드 저장소를 지향한다.
  • RocksDB 저장소는 기본적으로 비휘발성이다. 따라서 데이터를 영구적으로 저장하는데 적합하다. 고성능의 IO 성능과 더불어 데이터 압축률을 제공하여 저장 장치의 공간을 절약할 수 있다.

MariaDB + RocksDB

  • MariaDB 10.2.5 이상부터 MyRocks라는 이름의 RocksDB 기반 스토리지 엔진을 제공한다. InnoDB 스토리지 엔진 대비 상당한 성능 향상과 공간 절약이 가능하다. 하지만 갈레라 클러스터를 지원하지 않는 점에 유의해야 한다. 드라마틱한 성능 향상과 세계 굴지의 IT 서비스 기업인 페이스북이 주축이 되어 개발하고 있기 때문에 머지 않은 미래에 기본 스토리지 엔진인 InnoDB를 대체할 가능성이 높다고 판단된다.
  • MariaDBMyRocks 스토리지 엔진을 적용하는 방법은 아래와 같다.
# MyRocks 스토리지 엔진 설치
$ sudo yum install MariaDB-rocksdb-engine

# MyRocks 플러그인 활성화
$ sudo nano /etc/my.cnf
[mariadb]
plugin-load-add=ha_rocksdb.so

# MariaDB 재시작
$ sudo service mysql restart

# MyRocks 스토리지 엔진 적용 확인
$ mysql -u root -p
MariaDB [(none)]> SELECT * FROM information_schema.engines;
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
| ENGINE             | SUPPORT | COMMENT                                                                          | TRANSACTIONS | XA   | SAVEPOINTS |
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
| ROCKSDB            | YES     | RocksDB storage engine                                                           | YES          | YES  | YES        |
| CSV                | YES     | CSV storage engine                                                               | NO           | NO   | NO         |
| MRG_MyISAM         | YES     | Collection of identical MyISAM tables                                            | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables                        | NO           | NO   | NO         |
| Aria               | YES     | Crash-safe tables with MyISAM heritage                                           | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                                            | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                                               | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, foreign keys and encryption for tables | YES          | YES  | YES        |
| SEQUENCE           | YES     | Generated tables filled with sequential values                                   | YES          | NO   | YES        |
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.000 sec)
  • MariaDBMyRocks 스토리지 엔진을 적용한 테이블 생성 예는 아래와 같다.
CREATE TABLE meal
(
  id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  meal_member_group_id INT(11) UNSIGNED NOT NULL,
  mealtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  meal_member_id INT(11) UNSIGNED NOT NULL,
  paid_amount INT(11) NOT NULL,
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (id) COMMENT 'cf_meal_pk',
  KEY (mealtime) COMMENT 'rev:cf_meal_mealtime'
)
ENGINE=RocksDB
COMMENT "ttl_duration=3600;"
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_unicode_ci;
  • MyRocks는 하나의 로우를 컬럼 패밀리라 불리우는 인덱스 단위로 나누어 저장한다. 인덱스의 정의는 COMMENT 구문을 사용하여 지정할 수 있으며 별도로 지정하지 않을 경우 하나의 로우는 default 컬럼 패밀리에 저장된다.
  • MyRocks 스토리지 엔진의 차별화되는 특징 중 한가지는 바로 테이블 단위의 TTL의 지원이다. 테이블 생성시 COMMENT "ttl_duration=3600;"와 같이 명시하면 생성된지 3600초가 경과된 로우는 자동으로 삭제된다.

Redis + RocksDB

  • Redis는 극단적으로 빠른 응답을 제공하는 인메모리 Key-Value 저장소이지만 저장소의 공간이 물리 메모리에 의해 제한되는 한계가 있다. LedisDBRocksDB와의 결합으로 Redis의 장점을 크게 잃지 않으면서 저장소 공간의 한계를 극복한 새로운 원격 저장소를 제공한다. Redis 프로토콜을 그대로 따르기에 애플리케이션의 수정도 필요하지 않다. 향상된 백업과 레플레이션 기능 또한 제공된다.

참고 글

댓글
댓글쓰기 폼