RocksDB는 응용 프로그램 안에서 사용하는 키·값 저장 라이브러리이다. 독립적인 SQL 서버와 달리 저장 기능을 프로그램에 연결해 사용하는 구성 요소이며, LSM 계열 구조와 컴팩션을 중심으로 저장 성능을 조정한다.
분야 | 내장형 키·값 저장 라이브러리 |
|---|
내장형이라는 의미
응용 프로그램은 Put, Get, Delete와 같은 연산으로 키·값 데이터에 접근한다. 네트워크 프로토콜, 사용자 권한, 데이터 분산 같은 기능은 RocksDB를 사용하는 상위 시스템이 별도로 구성할 수 있다. RocksDB를 채택한 제품의 기능과 RocksDB 자체 기능을 구별해야 한다.
LSM 구조와 컴팩션
LSM 구조에서는 여러 정렬된 데이터 묶음을 유지하고 병합한다. 컴팩션 정책은 어떤 묶음을 병합할지, 조회 시 몇 개의 묶음에 접근할지에 영향을 준다. 병합으로 정리가 진행되지만 그 작업 자체에도 읽기와 쓰기 자원이 필요하다.
읽기 증폭·쓰기 증폭·공간 증폭은 함께 고려해야 하는 비용이다. 특정 설정이 쓰기 처리량을 높여도 읽기 지연이나 필요한 여유 공간에 불리할 수 있다. 따라서 한 수치만으로 엔진의 성능을 판단하기보다 키 분포와 갱신·삭제 비율을 포함한 부하를 사용한다.
WriteBatch와 동기화
WriteBatch는 여러 변경을 하나의 원자적인 묶음으로 적용하는 기능이다. 그러나 먼저 Get으로 값을 읽고 나중에 배치를 쓰는 전체 절차가 자동으로 하나의 격리된 트랜잭션이 되지는 않는다. 동시에 다른 작성자가 값을 바꾸는 상황은 별도로 다뤄야 한다.
기본 비동기 쓰기와 sync 옵션을 사용한 쓰기는 장애 시 보존 범위가 다를 수 있다. 운영체제에 전달된 쓰기가 영구 저장 장치에 동기화되었는지를 구별해야 하며, 프로세스 종료와 시스템 전체 장애를 같은 조건으로 보아서는 안 된다.
MyRocks와의 관계
MyRocks는 RocksDB의 키·값 구조에 관계형 테이블과 인덱스를 대응시키는 저장 엔진이다. RocksDB를 직접 사용하는 응용 프로그램과 MyRocks를 SQL로 사용하는 시스템은 노출되는 인터페이스와 운영 책임이 다르다.
함께 읽기
참고 자료