Apache Druid vs Key/Value 스토어

Apache Druid vs Key/Value 스토어 (HBase/Cassandra/OpenTSDB)

Druid는 스캔과 집계에 최적화된 엔진이고, key/value 스토어는 그와 다른 설계를 가져요. 이 문서는 key/value 스토어로 집계를 구현할 때의 한계와 Druid의 장점을 비교합니다.

출처: 문서

본문

Druid는 스캔과 집계에 고도로 최적화되어 있고, 데이터셋에 대해 원하는 만큼 깊이 drill-down을 지원합니다. 같은 기능을 key/value 스토어에서는 다음 두 가지 방식으로 구현할 수 있어요.

  • 사용자가 할 수 있는 모든 쿼리 조합을 미리 계산한다
  • 이벤트 데이터에 대해 범위 스캔(range scan)을 수행한다

결과를 미리 계산할 때, key는 쿼리의 정확한 파라미터가 되고 value는 쿼리 결과가 됩니다. 이 경우 쿼리는 매우 빠르게 반환되지만 유연성을 잃게 돼요. 모든 쿼리 조합을 미리 계산하면 임시(ad-hoc) 탐색 쿼리를 할 수 없기 때문입니다. 모든 임시 쿼리 조합을 미리 계산하다 보면 결과 집합이 데이터셋의 컬럼 수에 따라 기하급수적으로 늘어나고, 복잡한 실무 데이터셋의 쿼리를 미리 계산하는 데 몇 시간의 전처리 시간이 걸릴 수 있어요.

key/value 스토어로 집계를 구현하는 또 다른 방법은 이벤트의 차원(dimensions)을 key로, 이벤트의 측정값(measures)을 value로 사용하는 것입니다. 집계는 이 데이터에 대한 범위 스캔으로 수행돼요. OpenTSDB 같은 시계열 전용 데이터베이스가 이 방식을 사용합니다. 여기서 한계는 key/value 저장 모델이 접두어 범위(prefix range) 외에는 어떤 필터링을 위한 인덱스도 갖고 있지 않다는 점이에요. 접두어 범위로는 쿼리를 특정 메트릭과 시간 범위로 좁힐 수 있지만, 스캔할 정확한 데이터를 좁히기 위한 복잡한 조건(predicate)을 해석하지는 못합니다. 스캔할 행 수가 많아지면 이 한계가 성능을 크게 떨어뜨릴 수 있어요. 또 대부분의 key/value 스토어는 집계를 스토리지 계층으로 푸시다운(push down)하지 않기 때문에 좋은 locality를 달성하기도 더 어렵습니다.

임의의 데이터 탐색(유연한 데이터 필터링)을 위해 Druid의 커스텀 컬럼 포맷은 사전 계산 없이도 임시 쿼리를 가능하게 해요. 이 포맷은 또 컬럼에 대한 빠른 스캔을 지원해서, 좋은 집계 성능을 내는 데 중요합니다.

더 알아보기 (Learn more)

  • Druid의 컬럼 지향 스토리지 포맷은 segments 설계 문서에서 확인해 보세요.
  • 롤업을 통한 데이터 압축은 ingestion 문서를 참고하세요.