InfluxDB

오픈 소스 시계열 데이터베이스(Time series database)

InfluxDB 개요

InfluxDB는 오픈 소스 시계열 데이터베이스(Time series database)이다. 시계열 데이터베이스란, 로그 등의 시간을 축으로 한 연속한 데이터를 축적, 검색하는 것에 특화된 데이터베이스이다. IoT 분야에서 발생하는 대량의 센서 데이터나 DevOps로 클러스터링된 서버군이 출력하는 각종 메트릭스나 로그를 축적하는 용도에 있어서 기존의 데이터베이스보다 높은 퍼포먼스를 발휘한다.

이전 InfluxDB는 다른 많은 시계열 데이터베이스와 마찬가지로 기존 제품을 스토리지 엔진으로 사용하였다(InfluxDB의 경우 LevelDB, RocksDB, BoltDB 등).
그러나 2015년 10월에 InfluxDB의 개발원인 InfluxData에 의해 오리지날의 스토리지 엔진 Time-Structured Merge Tree(TSM)가 개발되어 그 이후에는 TSM이 InfluxDB에 채택되고 있다.

TSM은 Apache HBase 등에서 사용되고 있는 LSM Tree(Log-structured merge-tree)의 구조와 비슷하지만, 보다 시계열 데이터의 축적에 적응한 스토리지 엔진이 되고 있다. 시계열 데이터 특유의 성질을 다루어서 최적화되어 있어, 이 스토리지 엔진을 이용함으로써 InfluxDB의 성능 향상 되었다.

또한, InfluxDB Cloud와 InfluxDB Open Source와 InfluxDB Enterprise의 차이점은 아래 URL에서 확인할 수 있다.
https://www.influxdata.com/products/editions/

InfluxDB의 주요 특징

  • 높은 쓰기 처리량
  • 높은 읽기 처리량
  • 대량 데이터 삭제(만료된 데이터 등)
  • 데이터 업데이트 및 삭제보다 등록 및 참조 성능이 우선한다.

퍼포먼스

InfluxData사는 자체 블로그에서 Elasticsearch, Cassandra, MongoDB 등 시계열 데이터베이스 이외의 제품과의 성능 비교에서 InfluxDB가 쓰기, 읽기, 데이터 압축 등의 항목에서 시계열 데이터를 다루는데 있어 어느 제품보다도 높은 퍼포먼스를 발휘하고 있다고 한다.

같은 시계열 데이터베이스의 OpenTSDB와의 성능 비교에서도 높은 성능을 발휘하고 있다고 한다.

클라이언트 인터페이스

InfluxDB를 조작하기 위해서 2개의 인터페이스가 준비되어 있다. 하나는 CLI(커멘드 라인 인터페이스)에서 쉘에서 influx 명령으로 호출한다.

CLI의 액세스 예시(시간 표시가 rfc3339를 준수하는 경우)

$ influx -precision rfc3339
Connected to http://localhost:8086 version 1.7.x
InfluxDB shell 1.7.x
>

또 다른 인터페이스는 HTTP로 액세스하는 REST API이다. InfluxDB는 기본적으로 8086 포트를 열어 HTTP 요청을 수락한다. 또한 요청의 쿼리 결과는 JSON 형식, CSV 형식으로 검색할 수 있다.

REST API의 액세스 예시

curl -i -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE mydb"

쿼리는 두 인터페이스 모두 InfluxQL이라는 SQL과 유사한 쿼리 언어를 사용하여 수행된다. InfluxQL 문법은 SQL과 거의 동일하기 때문에 기존 SQL에 대한 지식이 있으면 조작할 수 있다.

아래 URL에 InfluxQL에 존재하는 명령 목록이 있다.
https://docs.influxdata.com/influxdb/v1.7/query_language/spec/#queries

위 URL과 같이 SELECT, INSERT, DELETE는 있지만 UPDATE 명령은 없다. InfluxDB 문서에서도 CRUD는 CR-ud이며 ud에 대해서는 없다. Delete는 존재하지만 특정의 1 레코드의 삭제라고 하는 형태가 아니고, 만료된 데이터를 한 번에 대량으로 삭제하는 것 같은 사용법이 되는 것이 대부분이다.

GROUP BY 및 COUNT와 같은 함수를 사용할 수도 있다.
사용할 수 있는 함수 목록은 아래 URL과 같다.
https://docs.influxdata.com/influxdb/v1.7/query_language/functions#sidebar

Clustering (Enterprise 버전 전용)

InfluxDB의 버전 1.1까지는 클러스터링 기능을 알파 버전으로 제공하였다. 이는 클러스터링 기능이 프로덕션 환경에서 사용할 수 있을 정도로 성숙하지 않았기 때문이다.
1.2부터는 이 클러스터링 기능이 안정된 레벨에 도달해 프로덕션 환경에서 사용 가능한 위치가 되었지만, 클러스터링 기능은 enterprise(유료)에서만 제공되는 기능이 되어 버렸다.
InfluxData사(InfluxDB 개발사)는 오픈 소스 비즈니스를 존속시키기 위해 클러스터링 기능을 필요로 하는 대규모 시스템을 운영하는 기업으로부터 수익을 얻을 수 있는 옵션을 제공한다. Ver1.2에서는 독립형 버전만 무료로 사용할 수 있다.

InfluxDB의 유사 소프트웨어

InfluxDB와 같은 시계열 데이터베이스에는 다음과 같은 제품이 있다.

  • OpenTSDB
    • Hadoop/HBase에서 실행
  • KairosDB
    • OpenTSDB 포크, 스토리지 엔진에 Cassandra 사용
  • Prometheus
    • 시스템 메트릭스를 모와서 모니터링하는데 전용 도구
  • DalmatinerDB
    • 스토리지 엔진에 Riak 사용

InfluxDB 라이센스

InfluxDB는 MIT 라이센스의 오픈 소스 소프트웨어이다. MIT 라이센스의 소프트웨어는 무상으로 재배포, 상용 이용 등이 가능해지고 있어, 다른 오픈 소스 라이센스에 비해 제한이 매우 느슨한 라이센스가 이다.

InfluxDB의 운영 환경

InfluxDB는 Go 언어로 작성되었다. Go 언어의 컴파일러가 존재하는 OS로 컴파일 할 수 있다.

컴파일이 끝난 바이너리는 아래와 같은 OS 환경별로 제공되고 있다.

  • 다양한 Liunx
  • MacOSX
  • Windows

InfluxDB 문서

InfluxDB 문서는 아래 URL에서 참조하여라.

InfluxDB 다운로드

각종 OS용 InfluxDB 패키지는 아래 URL에서 다운로드 가능하다.
https://portal.influxdata.com/downloads

Github에서 소스 파일도 확인 가능하다.
https://github.com/influxdata/influxdb



최종 수정 : 2022-12-24