서론
LSM 트리
키-값 저장소의 주요 데이터 구조
다양한 분야에 사용된다. 분산 로컬 저장서로 자주 활용되는 모습을 보이는데, 다른 인덱싱 구조에 비해 순차적 엑세스 패턴을 유지한다는 점이다. 이러한 방식은 솔리드 스테이트 저장 장치에서 효율적이다. 솔리드 스테이트 저장 장치는 쉽게 말해서 SSD 라고 생각하면 된다.
저자의 주장으로는 기존 연구에서는 범위 쿼리 성능을 동시에 개선한다는 연구는 없다고 한다.
현재 진행 중인 연구와의 연관성을 검토할 필요가 있다.
블록체인 시스템이 디스크 증폭을 발생시키는지 우선적으로 파악해야 한다. 그리고 얼마나 발생하는지 정도를 분석해야 한다.
현재로서는 동기화 과정과 스마트 컨트랙트 수행 단계에서 디스크 증폭이 발생할 가능성이 높다.
일단 다시 논문 내용으로 돌아와서, LSM 트리는 쓰기 증폭은 필연적으로 발생한다. 컴팩션이라는 과정 때문에 쓰기 증폭을 피할 수는 없다. 저자는 이러한 연구 과정에서 GHStore를 고안하고 제시한다.
주장 : GHStore의 GHMap은 최신 KV 쌍의 레벨을 기록하므로 읽기 작업에서 위에서 아래로 검색할 필요가 없고 쓰기 유도 압축 작업에서 오래된 레코드를 무시합니다. YCSB[ 7 ]를 사용하여 GHStore를 평가하고 널리 사용되는 키-값 저장소(예: RocksDB, Wisckey, PebblesDB)와 비교하여 업데이트 집약적 워크로드의 경우 GHStore가 읽기 대기 시간을 10%~50%, 범위 쿼리 대기 시간을 15%~60% 줄이는 동시에 쓰기 처리량을 4%~55% 증가시킨다는 것을 보여줍니다. GHStore는 읽기 증폭을 3배, 쓰기 증폭을 1.5배, 공간 증폭을 1.5배 줄입니다.
논문의 Configuration
-
GHmap은 “God-view”의 역할을 하는 효율적인 글로벌 세그먼트 해시맵이다. 최신 KV 쌍의 레벨을 기록하여 오래된 KV 쌍을 적시에 제거하고 레벨별로 데이터를 검색하는 것을 방지한다.
-
GHStore는 GHmap 기반의 키-값 저장소다. 업데이트 집약적 워크로드에서 GHStore는 쓰기, 읽기 및 범위 쿼리에서 동시에 전반적인 성능을 개선한다.
-
실험 결과 GHStore는 널리 사용되는 여러 키-값 저장소(예: RocksDB, Wisckey 및 PebblesDB)보다 성능이 더 우수한 것으로 나타났습니다.
배경
로그 구조 병합 트리(LSM-tree) 현재 LevelDB를 연구하고 있지만, 해당 논문은 RocksDB를 다룬다. 물론 둘 다 LSM 트리를 사용한다.

이전 연구 참고에 따르면 쓰기 증폭은 최대 50배, 읽기 증폭은 최대 300배 라고 한다. 참고한 논문은 usenix 2017에 실린 꽤 좋은 논문이다.
워크로드
심각한 읽기 증폭이 발생한다는 사실이 있다. 또한 여기서 증명을 위해 100만 개의 get 요청이 있는 70GB의 락스디비에서 실험을 진행한다.
핵심적으로 살펴봐야 할 부분은 아래 이미지에서 살펴본다.

그림을 보면 대부분의 KV 쌍은 높은 수준에 있다. 높은 SSTable에 키-값 데이터가 몰려 있지만, 더 낮은 수준의 SSTable에 더 자주 엑세스되고 있다. 이러한 문제는 낮은 레벨에서 높은 레벨까지 자주 접근해야 하기 때문에 읽기 증폭으로 디스크 엑세스를 증가시킨다고 한다.
이 주장을 토대로 geth에서도 이러한 분포를 보이는지 확인할 필요가 있다.
전역 분할 해시맵(GHmap)

GHStore의 아키텍처는 볼 수 있다. SSTable 대신 레벨을 기록하는 GHmap을 통해 메모리 소비를 더 제어한다. 이것은 R 계층과 NR 계층으로만 구분되는 LSM 트리에서 R계층의 최신 키값 레벨만 GHmap에 기록한다.
GHStore의 range 쿼리는 RocksDB와 유사하게 처리된다. 이 부분은 복잡하지만,
간단히 말하면 데이터를 업데이트하거나 읽을 때 GHmap도 함께 갱신하거나 메모리로 함께 읽어들인다는 의미다.
get같은 경우는 GHmap을 먼저 탐색해서 레코드를 찾고 없을 경우 NR 계층에서 SSTable을 탐색한다.
데이터베이스 시스템이기 때문에 복구 프로세스 또한 존재하는데, 일종의 체크포인트를 두고, 전부 복구하는 프로세스를 수행하지 않는다. 최신 체크포인트로 GHmap을 초기화하는 구조로 프로세스를 수행한다.
평가

락스디비, Wisckey, Pebble 보다 좋은 성능을 보인다.
특히 주목해야 할 읽기 증폭 부분의 경우 40GB에서 300만 KV 쌍을 무작위로 읽는 워크로드에서 측정은 위 그림의 “e”번 항목에서 보는 것과 같이 데이터 레벨별 검색을 회피하기 때문에 가장 낮은 읽기 증폭을 보이는 것을 확인할 수 있다.
또한 블록체인 시스템의 성능과 가장 직관적으로 연관있는 읽기 증폭과 확장성을 위한 공간 증폭을 확인했을 때,
공간 증폭은 그림6의 (f)에서 볼 수 있듯이, 타 저장소보다 10~20퍼센트 정도 더 작은 공간 크기를 사용하는 것을 확인할 수 있다.