Apache Druid is a high performance real-time analytics database.
아파치 드루이드 소개
아파치 드루이드는 기존의 데이터 처리 및 쿼리에 대한 관념을 180도 바꿔주는 OLAP 데이터베이스 입니다. OLAP란 Online Analytical Processing의 약자로써 사용자가 적재한 데이터를 다양한 방식(다차원)으로 적재하고 분석하도록 도와주는 시스템을 뜻합니다. 다차원 정보라는 것은 기존에 1차원 정보(row단위)를 몇개의 필드들(드루이드에서는 디멘젼)을 사용하여 지표들(메트릭)으로 만들어 보여주는 것입니다.
흥미롭게도 아파치 드루이드는 이러한 다차원 데이터를 빠른 쿼리속도를 제공하기 위해 세그먼트 단위로 데이터를 인덱스하여 저장합니다. 이렇게 세그먼트를 만드는 것은 지정한 시간(time interval) 단위 이고 쿼리를 수행할 때가 아니라 데이터를 적재할때 함께 인덱싱합니다.
- 전통적인 데이터베이스 : 데이터 적재 → 쿼리 → 프로세싱 → 결과 확인
- 아파치 드루이드 : 데이터 적재 → 프로세싱(인덱싱) → 쿼리 → 결과 확인
이러한 특징으로 인해서 드루이드는 전통적인 데이터베이스들에 비해서 쿼리 시간이 엄청나게 빠르다는 장점을 가집니다. 예를 들어 전통적인 데이터베이스에 1억건의 데이터가 있다고 가정할 때 sum()에 대한 결과를 가져오는데 O(n)의 시간 복잡도가 걸립니다. 반면에 드루이드 경우에는 미리 디멘젼(Dimension)을 지정해놓으면 데이터를 넣을 때 마다 인덱싱이 일어나므로 sum()결과는 O(1)의 시간이 걸립니다. 빠르게 데이터를 취합해야하고 결과값을 통해 비즈니스의 발전을 창출해야할 경우에는 이전에 발생한 이벤트들에 대한 쿼리를 최대한 빠르게 가져오는 것이 중요합니다. 그러므로 드루이드는 빅데이터의 이벤트처리에 있어 엄청난 장점을 가지게 되는 것이죠.
여기에 추가적으로 적재된 데이터에 대해 다음과 같은 연산을 제공합니다.
- roll-up : 집계
- drill-down : 집계된 데이터를 다시 펼침
- slicing and dicing : 일부 차원에 대해서만 분석
상기와 같은 장점을 통해 드루이드는 다음과 같은 목적으로 사용됩니다.
- 클릭 스트림 로그 분석
- 부정 결제 방지 시스템
- 네트워크 퍼포먼스 지표 분석
- 서버 지표 분석
- 애플리케이션 퍼포먼스 지표 수집 및 분석
반면에 드루이드를 사용하면 안되는 곳이 있는데, 바로 정확한 값을 가져오는 용도입니다. 드루이드는 전체적인 지표의 흐름을 알기 위해 사용 되는 것이지 정확한 값을 위해 사용하면 안됩니다. 예를 들어 통장 잔액같은 것은 드루이드에서 사용하는 것을 피해야합니다. 또한 드루이드는 데이터를 검색하는 데에 특화되어 있지 않고 이미 적재된 데이터를 업데이트할 수 없습니다. 그러므로 업데이트가 빈번히 일어나는 데이터나 일부 단어를 검색하는 용도로는 사용해서는 안됩니다. 마지막으로 적재된 데이터를 조인하여 보는 것도 불가합니다.
결과적으로 드루이드는 다음과 같은 특징을 조합했다고 볼 수 있습니다.
1. Column-oriented DB
2. Search Systems
3. Timeseries DB
드루이드 아키텍처
Integration(데이터 통합)
아파치 카프카, 하둡, 플링크와 같이 여러 데이터 소스로 부터 드루이드에 적재하여 사용할 수 있습니다.
Ingestion(적재)
드루이드는 스트리밍 또는 배치 적재를 지원합니다. 이벤트 스트림 도구로 널리 사용되는 카프카를 사용하여 스트림 데이터를 적재할 수 있고 HDFS에 쌓인 정적인 데이터를 배치형태로 적재할 수 도 있습니다.
전체 아키텍처
드루이드는 마이크로아키텍처로 여러 애플리케이션들의 조합으로 이루어집니다. 각각의 핵심 애플리케이션들은 필요할때는 연동하여 사용하는 형태로 느슨하게 연결되어 있기 때문에 개별 애플리케이션에 장애가 발생하더라도 영향이 퍼지지 않습니다.
관련 정보
드루이드 공식페이지 : https://druid.apache.org/
'빅데이터' 카테고리의 다른 글
prometheus 자바 클라이언트로 지표 수집하기 (2) | 2021.06.29 |
---|---|
아파치 드루이드 tranquility로 데이터 추가시 MessageDroppedException 이슈 (0) | 2021.06.24 |
Tranquility를 사용한 아파치 드루이드 실시간 데이터 적재 (0) | 2021.06.10 |
프로메테우스, 그라파나 사용시 레이블 값 추출, Legend 선택, 여러 variable을 포함하는 쿼리 작성. (0) | 2021.05.04 |
alpine telegraf 도커 생성 (0) | 2021.04.22 |
mac에서 하둡 hdfs 설치 및 실행하기 (0) | 2020.08.19 |