2.1

InfiniFlux의 기능 특징

InfiniFlux는 전통적인 데이터베이스가 가지고 있지 않은 아래와 같은 혁신적인 특성들을 가지고 있다.

Write Once, Read Many

로그성 머신 데이터는 일단 데이터베이스에 입력되면 변경 또는 삭제되는 경우가 거의 없다.

따라서, InfiniFlux는 머신 데이터에 대한 특성을 최대한 살리기 위해 한번 입력된 데이터에 대해서는 UPDATE가 발

생할 수 없도록 설계 되었다.

사용자는 한번 입력된 로그 데이터를 다른 악의적 사용자에 의해 변조되거나, 삭제될 위험성에 대해 걱정할 필요가 없

다.

MVCC(Multi Version Concurrency Control) 지원

로그성 머신 데이터 처리하는데 가장 중요한 것은 데이터의 입력, 변경, 삭제 연산과 읽기 연산이 서로 충돌하지 않고

가능한 독립적으로 처리되어야 한다는 것이다.

이 때문에 InfiniFlux는 SELECT 연산에 대한 어떠한 Lock도 할당 받지 않도록 설계되었고, 변경 연산인 입력 혹은 삭

제와도 서로 절대로 충돌하지 않는 고성능 구조로 설계되었다.

따라서 수십만 건의 데이터가 입력되고, 실시간으로 일부가 삭제되는 상황에서도 SELECT 연산은 수백만 건의 레코드

에 대한 통계 연산을 빠른 속도록 진행할 수 있다.

78 | InfiniFlux 특징

초고속 데이터 저장

InfiniFlux는 기존의 데이터베이스보다 수십배의 빠른 데이터 저장 성능을 제공한다. 특정 데이블에 인덱스가 다수 존

재하는 상황에서도 최소 초당 300,000 건에서 최고 2,000,000 만건까지 데이터를 받아들일 수 있다.

이것이 가능한 이유는 InfiniFlux가 시계열 데이터를 최적화하는 구조로 설계되었기 때문이다.

실시간 인덱스 구성

InfiniFlux는 인덱스가 많으면 많을수록 데이터 입력 성능이 비례적으로 느려지는 전통적인 데이터베이스 구조를 혁

신적으로 개선하여, 초당 수십만건의 데이터가 입력되더라도 거의 실시간으로 인덱스를 구성할 수 있다. 이 특징은 실

제 데이터가 발생하는 순간의 즉시 검색할 수 있는 강력한 기능적인 토대를 제공해 주기 때문에 머신 데이터와 같은

시계열 데이터 분석에 있어서는 핵심적인 기술이다.

실시간 데이터 압축

머신 데이터와 같은 시계열 데이터의 특징은 끊임없이 데이터가 발생한다는 것이다. 이 사실은 필연적으로 해당 데이

터베이스의 저장 공간이 언젠가는 부족해질 뿐만 아니라, 처리해야 할 데이터를 충분하게 보유하지 못한다는 의미이

다.

특히, 전통적인 데이터베이스는 데이터 뿐만 아니라 인덱스가 늘어남에 따라 차지하는 데이터 공간의 급격하게 증가

하기 때문에 머신 데이터의 저장과 분석에 매우 부적절한 구조이다.

InfiniFlux는 쏟아져 들어오는 데이터에 대해 혁신적인 실시간 압축 기술 2 가지를 통해 성능 저하 없이 적게는 수십배

에서 수백배까지 데이터를 압축하여 저장한다.

첫 번째로 InfiniFlux는 논리적 실시간 데이터 압축 기술을 지원한다. 이는 컬럼형 데이터베이스에서 유래한, 머신 데

이터의 데이터 중복성을 이용한 것으로서 동일한 값을 갖는 데이터가 많으면 많을수록 데이터의 중복을 코드화하여

데이터 저장공간을 혁신적으로 줄이는 기술이다. 이를 통해 데이터의 중복성이 높은 데이터에 대해 수백배까지 데이

터를 압축할 수 있다.

두 번째는 InfiniFlux의 특허 기술인 물리적 데이터 압축기술이다. 이는 디스크에 저장될 물리적인 데이터 블럭을 미

리 일정한 크기의 파티션으로 나누어 압축하여 디스크에 별도로 내림으로써 저장될 물리적 데이터의 량을 줄이고, 더

불어 시스템이 유발시키는 I/O 비용을 급격하게 낮추는 기술이다. 이를 통해 실제 논리적으로 압축된 데이터를 다시

한번 더 압축하여 저장 공간의 효율성을 높이는데 일조한다.

Copyrightc 2014 InfiniFlux All Rights Reserved.InfiniFlux의 기능 특징 | 9

탁월한 분석 성능

InfiniFlux의 혁신적인 기술적 우월성은 초당 수십만 건의 데이터를 입력하는 와중에도 이미 저장된 과거의 수백만 혹

은 수천만 건의 데이터에 대한 검색 및 통계 분석 성능이 매우 빠르다는 것이다.

삽입과 분석 모두에 탁월한 성능을 제공하는 InfiniFlux 만의 인덱싱 기술 때문에 가능한 것이며 실시간 비즈니스 의

사 결정에 핵심적인 역할을 수행할 것이다.

InfiniFlux 전통적인 데이터베이스와 달리 두 개 이상의 인덱스를 하나의 질의문에서 처리할 수 있기 때문에 병렬로

데이터를 처리할 경우 몇 배나 더 빠른 성능을 기대할 수 있다.

아래는 다음과 같은 질의문에 대해 두 개 이상의 인덱스를 활용하는 경우를 나타낸 것이다.

select * from table1 where c1 = 1 and c2 = 2;

시계열 데이터 특성 SQL 구문 지원

로그성 머신 데이터의 경우 최신 데이터가 예전의 데이터보다 몇 배 더 가치가 있으며 데이터의 접근 빈도도 최근 데

이터가 예전 데이터보다 몇 배 더 많은 특징이 있다.

이런 이유로 InfiniFlux는 아래와 같은 시계열 데이터 특징을 지원한다.

첫째, InfiniFlux는 레코드가 데이터베이스에 저장되는 순간 나노 세컨드 단위의 timestamp를 _arrival_time이라는

필드로 저장한다. 이 의미는 InfiniFlux가 저장하는 모든 레코드는 시간을 기준으로 검색하거나 조건을 줄 수 있다는

것이다.

둘째, 데이터 검색시 최근 시간이 예전 시간 보다 먼저 출력된다. 즉, SELECT를 수행할 때 최근 데이터가 먼저 출력된

다는 것이다. 앞에서 언급한 _arrival_time 컬럼 기준으로 descendant order by를 한 것과 같은 결과이다.10 | InfiniFlux 특징

셋째, DURATION 키워드를 제공한다. 머신 데이터 분석의 경우 특정 시간 범위를 지정하는 경우가 많기 때문에 SQL

레벨에서 이러한 특성을 제공한다. 이를 통해 복잡한 시간 연산자를 where 절에 주지 않더라도 편리하게 데이터를

분석할 수 있다.

사용 예1) 지금 부터 10분 전까지의 데이터 통계를 내어라.

select sum(traffic) from t1 DURATION 10 minute;

사용 예2) 지금 부터 1시간 전에 30분간의 데이터 통계를 내어라.

select sum(traffic) from t1 DURATION 30 minute BEFORE 1 hour;

텍스트 검색 기능 지원

로그성 시계열 데이터를 저장하고 활용하는 사용자의 가장 중요한 실제 용도 중 하나는 특정 시점에 특정 event 가 발

생했는지를 확인하는 것이다.

특정 시점의 경우 시계열 데이터 처리로 가능하지만, 특정 event가 발생한 것은 대부분의 경우 특정 컬럼에 저장된 te

xt field에서 특정 "단어"를 찾는 행위가 필요하다.

그러나, 전통적 데이터베이스에서는 특정 필드의 단어를 검색하기 위해서는 B+ Tree를 통해 exact match 혹은 LIKE

절을 통해 최초 일부 캐릭터의 조건을 검사하게 되는데, 대부분의 경우 이는 매우 느린 응답 결과를 초래한다.

그런 이유로 전통적인 데이터베이스에서 특정 단어에 대한 검색은 매우 취약하다.

반면, InfiniFlux에서는 실시간 검색을 위해 LIKE와 함께 SEARCH라는 SQL 키워드를 제공함으로써 실시간 단어 검색

이 가능하도록 하였다.

사용 예1) msg 필드에 Error 혹은 102를 포함하는 레코드를 출력해라.

select id, ipv4 from devices where msg search 'Error' or msg search '102';

사용 예2) msg 필드에 Error 그리고 102를 포함하는 레코드를 출력해라.

select id, ipv4 from devices where msg search 'Error 102';

선택적 삭제 지원

로그성 머신 데이터의 경우에는 삽입 이후에 삭제 연산이 거의 발생하지 않는 것이 현실이다.

그러나 embedded 장비의 경우에는 저장 공간의 제약이 분명히 존재할 뿐만 아니라, 사용자에 의해 주의 깊게 관리

되지 않는 것이 그 특징이다.

Copyrightc 2014 InfiniFlux All Rights Reserved.InfiniFlux의 기술 구성 | 11

이 경우 혹시나 머신 데이터에 의해 Disk full이 발생하거나 장애가 발생하는 것은 기업 입장에서 많은 손해를 감수해

야만 한다.

InfiniFlux는 이런 환경에서 주어진 특정 조건에 레코드를 삭제할 수 있도록 기능을 제공한다.

따라서 embedded 개발사는 CRON 혹은 주기적인 프로그램을 통해서 InfiniFlux가 일정 크기 이상의 데이터를 유지

하지 않도록 손쉽게 관리할 수 있다.

사용 예1) 가장 오래된 마지막 100건을 삭제하라.

delete from devices oldest 100 rows;

사용 예2) 최근 1000건을 제외하고 모두 삭제하라.

delete from devices except 1000 rows;

사용 예3) 지금부터 하루치를 남기고 모두 삭제하라.

delete from devices except 1 day;

사용 예4) 2014년 6월 1일 이전의 데이터를 모두 삭제하라.

delete from devices before TO_DATE('2014-06-01', 'YYYY-MM-DD');

자동화된 데이터 수집

InfiniFlux는 산재해 있는 머신 데이터 로그 파일로부터 데이터를 읽어 자동으로 전송해주는 기능인 "컬렉터" 기능을

제공한다.

이를 통해 syslog나 웹서버 로그 등의 이미 정형화된 데이터를 수집할 수 있을 뿐만 아니라 사용자가 임의로 정의한

로그 포맷의 경우에도 매우 쉽게 변환하여 자동으로 수집할 수 있는 기능을 제공한다.

2.2 InfiniFlux의 기술 구성

InfiniFlux는 위의 그림과 같은 3개의 기술 요소를 혁신적으로 조합한 초고속 시계열 데이터베이스이다.12 | InfiniFlux 특징

컬럼형 데이터베이스 기술

컬럼형 데이터베이스는 아래의 그림과 같이 레코드를 구성하는 컬럼 데이터가 물리적으로 모여 있는 특성을 가지는

OLAP(Online Analytical Processing)에 최적화된 데이터베이스이다.

컬럼 단위로 저장을 하기 때문에 컬럼의 값들을 서로 연속된 디스크 혹은 메모리 공간에 위치하며, 서로 다른 레코드

의 컬럼이라고 하더라도 시스템에 별도의 큰 부하를 발생시키지 않고 검색이 가능한 장점이 있다.

또한 이 구조에서는 데이터 분석 성능이 Row 기반에 비해 수십 배 빠르며 데이터의 압축도 용이하다.

이런 구조를 가지고 있기에 대량의 데이터를 분석하는 용도로 이 기술이 활용되며 InfiniFlux에서도 컬럼 구조로 레코

Copyrightc 2014 InfiniFlux All Rights Reserved.InfiniFlux의 기술 구성 | 13

드를 저장한다.

그러나, 전통적인 컬럼형 DBMS에서는 분석 성능을 최고로 올리기 위한 목적으로 사용하기 때문에 데이터이 실시간

입력 및 로딩에서는 매우 취약하여 시계열 데이터를 실시간으로 분석하기 위한 용도로서는 적절하지 않다.

메모리 데이터베이스 기술

메모리 데이터베이스는 초고속으로 데이터를 입력하고, 이를 다시 검색하는 OLTP(Online Transaction processing)

에 최적화된 고성능 데이터베이스이다.

이 메모리 데이터베이스는 금융, 통신, 제조 등의 실시간 데이터를 처리하는 곳에서 두각을 나타내고 있으며, 전세계

적으로 빠르게 성장하고 있는 분야이기도 하다.

그러나, 메모리 데이터베이스는 그 동작 특성상 모든 데이터가 메모리에 상주해야 하는 제약사항이 있기 때문에 데이

터가 무한히 발생하는 로그성 머신 데이터 처리에는 적합하지 않으며, Row 기반의 경우 데이터의 압축과 관리에도

상당한 제약사항이 존재한다.

InfiniFlux는 최근에 발생한 로그성 머신 데이터를 메모리에 적재하는 기술을 채택하여, 고성능의 데이터 처리를 가능

하게 하였다. 또한 일정 시간이 지났을 경우 해당 데이터를 디스크 기반으로 처리하도록 하여 실제 데이터의 중요도에

따라 유연하게 데이터를 관리할 수 있는 혁신적인 아키텍쳐를 제공한다.

InfiniFlux는 해당 메모리 구조를 "메모리 윈도우"라고 지칭하고 메모리 윈도우의 크기는 테이블 생성시 지정되는 프

로퍼티에 의해 결정된다.14 | InfiniFlux 특징

실시간 인덱스 기술

InfiniFlux 실시간 인덱스를 가능케 하는 기술을 보유하고 있으며, 이 기술이 전통적인 데이터베이스 기술과 하모니를

이루어 혁신적인 시계열 데이터베이스를 탄생시켰다.

전통 데이터베이스에서 일반적으로 활용하는 B+ Tree는 대량의 데이터를 실시간으로 처리해야 하는 인덱스로는 적

합하지 않는데, 그 이유는 다음과 같다.

첫째, 인덱스 갱신 성능 때문이다. B+ Tree에 데이터를 입력하기 위해서는 인덱스에 존재하는 키들을 정렬해야 하며,

자신의 위치를 찾아야 하기에 인덱스를 전체적으로 방문해야 하는 비용이 발생한다. 이 비용으로 인해 실시간으로 수

십만 건의 데이터를 입력해야 하는 요구사항에 미치지 못하는 근본적인 한계를 가지고 있다.

둘째, 인덱스 데이터의 크기 문제이다. B+ Tree는 성능을 향상시키기 위해 인덱스 내부에 해당 키의 값을 유지하고

있다. 따라서 원시 데이터의 건수가 많으면 많을수록 부가되는 인덱스의 크기도 비례해서 커지며, 인덱스의 숫자가 증

가할 수록 데이터 량은 기하급수적으로 증가한다.

이와 같이 전통적인 데이터베이스의 인덱스 구조는 실시간 시계열 데이터처리에 많은 어려움과 제약사항을 가지고

있으며, InfiniFlux는 다음과 같은 인덱스 기술을 통해 실시간 요구사항을 만족시킨다.

실시간 비트맵 인덱스

비트맵 인덱스라 함은 데이터베이스 내부에 위치하는 레코드 혹은 컬럼의 값을 트리 형태로 구성하는 것이 아니라, 0

과 1로 구성된 유일한 비트열로 저장하여 데이터를 관리하는 기술을 말한다.

아래의 그림과 같이 Data Values에 저장된 데이터 값은 우측의 b0~b5로 구성된 비트열로 조합되며, 같은 Data Val

ues는 동일한 비트열 값을 갖는 구조로 저장된다.

이러한 비트맵 인덱스를 다음과 같은 장점을 가진다.

Copyrightc 2014 InfiniFlux All Rights Reserved.InfiniFlux의 기술 구성 | 15

첫째, 데이터 입력 속도가 매우 빠르다. 이 특성은 InfiniFlux의 실시간 처리 성능과 밀접한 관계가 있다. 이렇게 빠른

이유는 데이터의 입력시 재구성되는 비트맵 인덱스의 끝부분만 갱신을 하면 되기 때문이다.

둘째, 인덱스 자체가 키 값을 갖지 않는다. 이 키값을 갖지 않음으로 인해 인덱스가 차지하는 공간이 매우 효율적으로

최적화 될 수 있으며, 압축 효율에도 큰 영향을 미친다.

셋째, 인덱스와 인덱스 간의 협동성이 매우 좋다. 전통적인 데이터베이스는 질의처리자에 의해서 선택되는 인덱스가

최종적으로 한 개로 한정된다. 다른 컬럼에 효율적인 인덱스가 여러 개 존재하더라도 동시에 사용할 수 없는 한계가

분명히 존재하는 것이다. 그러나 비트맵 인덱스를 사용하는 시스템에서는 컬럼마다 선택된 인덱스를 개별적으로 활

용할 수 있을 뿐만 아니라, 그 결과로 추출된 비트맵 결과 집합을 AND 혹은 OR 연산을 통해 매우 빠르게 연산할 수

있는 특성을 가지고 있다. 특히 하나의 질의에 포함되는 다수의 인덱스를 활용할 수 있기 때문에 병렬 처리가 가능한

구조이며 결과적으로 대규모 통계 처리에 있어서도 전통적인 데이터베이스에 비해 우수한 성능을 기대할 수 있다.

넷째, 공간 효율성이다. 비트맵으로 구성된 인덱스 데이터는 다양한 압축 알고리즘이 적용될 수 있도록 용이한 구조를

가지고 있기 때문에 빠르고, 높은 효율로 데이터를 관리할 수 있다.

실시간 텍스트 인덱스

InfiniFlux는 키워드 인덱스라는 이름으로 실시간 검색 기능을 제공한다.

이 인덱스는 검색 엔진에서 사용되는 역인덱스(inverted index)를 제공하는 것으로서 데이터베이스 내부에 저장된

텍스트 데이터에서 특정 패턴을 찾는데 탁월한 성능을 제공한다.

텍스트 기반 로그 데이터의 경우 특정한 에러 메시지나 메시지 패턴을 찾는 경우가 주된 업무이기 때문에 검색 기능은

필수적이라고 할 수 있다.

특히 InfiniFlux는 UTF8을 기준으로 특정 패턴을 검색하는데 탁월한 성능을 보유하고 있기 때문에 데이터베이스의 편

리한 기능 위에 강력한 검색까지 가능한 유일한 데이터베이스이다.16 | InfiniFlux 특징

2.3

기본 구조

위그림은 실제 InfiniFlux의 서비스 구조를 나타낸다.

InfiniFlux Server는 다중 쓰레드 구조의 단일 프로세스로 서비스를 수행하며 저장장치에 다수의 파일 구성된 파티션

들(Shard)을 유지하고 있다.

클라이언트는 사용자 SDK를 이용하여 작성되며 데이터를 입력하는 클라이언트의 경우 사용자 로그를 파싱하고 이를

레코드 형태로 데이터를 입력하거나 데이터를 분석하고, 추출하는 작업을 하게 된다.

InfiniFlux WebServer는 InfiniFlux Server 에 부가적으로 설치되는 웹서버 및 웹 어플리케이션으로서 RESTful API

를 통해서 사용자 응용 프로그램을 개발하고, 모니터링 할 수 있도록 제공된다.

기본적으로 InfiniFlux는 클라이언트/서버 구조로 동작을 하게 되며 InfiniFlux Server는 별도의 서버로 분리하기를

추천한다.