1. InfiniFlux DBMS VS Influx DBMS
저장 및 검색 성능 테스트 결과
기술 문서(Technical Note)
2016-12-05
INFINIFLUX
www.infiniflux.com
2. 목 차
1. 개요 .....................................................................................1
1.1 H/W 환경.......................................................................................1
1.2 S/W 환경.......................................................................................1
1.3 테스트 대상 데이터.....................................................................1
1.3.1 InfiniFlux 테이블.........................................................................................2
1.3.2 Influxdb 테이블...........................................................................................2
1.4 대상 데이터 파일.........................................................................3
2. 성능 테스트.........................................................................4
2.1 데이터 입력..................................................................................4
2.1.1 InfiniFlux 데이터 입력...............................................................................4
2.1.2 Influxdb 데이터 입력.................................................................................4
2.1.3 InfinFlux VS Influxdb..................................................................................4
2.2 DISK 저장 용량............................................................................5
2.3 시스템 자원 사용.........................................................................5
2.3.1 CPU 사용률 ................................................................................................5
2.3.2 Memory 사용량 ..........................................................................................6
2.4 쿼리 테스트..................................................................................6
4. Error! Use the Home tab to apply 제목 1 to the text that you want to appear here.
1
1. 개요
1.1 H/W 환경
CPU : Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz * 8 CORE
MEM : 32GB
DISK: HDD 3.6 TB * 5
1.2 S/W 환경
OS : CentOS 6.7
DB : InfiniFlux 3.1.1 VS Influxdb 1.0.2
1.3 테스트 대상 데이터
InfiniFlux 에서 타사 비교 테스트 용 데이터와 테이블을 사용
일반적인 weblog에 대하여 추가 칼럼을 생성하여 데이터 생성
시간, IP, port, 이벤트 내용으로 구성
InfiniFlux 샘플 데이터
2015-05-20 06:00:00,219.229.142.218,2762,7.234.88.67,593,62,GET
/twiki/bin/view/Main/MikeMannix HTTP/1.1,200,3686
2015-05-20 06:00:11,100.46.183.122,11989,227.106.13.91,4709,50,GET
/mailman/listinfo/administration HTTP/1.1,200,6459
2015-05-20 06:00:11,214.153.107.182,7586,5.114.66.53,5213,6,GET
/twiki/bin/view/Main/SpamAssassin HTTP/1.1,200,4081
Influxdb 샘플 데이터
샘플 데이터의 값이나 구성은 동일 하지만 입력 형식이 달라서 포맷을 변경
제일 처음 나오는 test_influxdb는 table명이고 이후에 스페이스바 공백으로 tag key와
field key로 구분되게 된다.
마지막은 date 값이 유닉스 타임으로 입력된다. – precision rfc3339/n/ns/m 명령어로
입력 할 때 시간 포맷을 설정 가능하다.
각 data 값 앞에는 column명이 입력 되어야 한다.
test_influxdb,srcip=123.198.82.192
dstip="50.230.44.173",srcport=9978,dstport=782,protocol=16,eventlog="GET
/twiki/bin/view/TWiki/KlausWriessnegger HTTP/1.1",evencod=200,eventsize=3848
1479265350401897972
test_influxdb,srcip=58.208.78.121
5. Error! Use the Home tab to apply 제목 1 to the text that you want to appear here.
2
dstip="231.146.69.51",srcport=2330,dstport=3082,protocol=46,eventlog="GET
/twiki/bin/view/TWiki/ManagingWebs?rev=1.22 HTTP/1.1",evencod=200,eventsize=9310
1479265197208287210
1.3.1 InfiniFlux 테이블
테이블 생성
create table sampletable
(
AT1 datetime property (MINMAX_CACHE_SIZE=1048576) not null,
SRCIP ipv4,
SCRPORT integer,
DSTIP ipv4,
DSTPORT integer,
PROTOCOL short,
eventlog varchar(1024),
eventcode short,
eventsize long
);
Index 생성
create index idx2 on sampletable(srcip) index_type lsm max_level=3;
create index idx3 on sampletable(dstip) index_type lsm max_level=3;
create keyword index idx4 on sampletable(eventlog) index_type lsm max_level=3;
- 테이블의 컬럼은 각 데이터 타입에 맞게 생성
- datetime 컬럼의 경우 minmax_cache 설정
- 조건 검색을 위한 index 생성
1.3.2 InfluxDB 테이블
테이블
Influxdb는 tag key와 field key가 있는데 tag key에 관해서만 indexing을 한다.
아래는 데이터 입력 후 influxdb 내에 있는 table field 명 출력 한 것임
name: test_influxdb
-------------------
6. Error! Use the Home tab to apply 제목 1 to the text that you want to appear here.
3
tagKey
srcip
evencod
name: test_influxdb
fieldKey fieldType
dstip string
dstport float
eventlog string
eventsize float
protocol float
srcport float
- 테이블의 컬럼은 각 입력 데이터에 맞게 타입 자동 설정
- tag key는 srcip 의 컬럼으로 입력 (group by 하기 위해서)
- 순차의 날짜 데이터 입력 시 table 상에 column으로는 출력 되지 않지만 임의의 데이터
입력 시간으로 입력 되어있음
1.4 대상 데이터 파일
InfiniFlux 샘플 데이터 (1억건 13GB)
-rw-rw-r--. 1 demo demo 13045863917 May 20 11:15 sampletable100m.csv
Influxdb 샘플 데이터 (1억건 20GB)
포맷이 달라서 새로운 파일 생성
포맷 형식 때문에 data 용량 차이가 발생
-rw-rw-r-- 1 perf perf 21253641580 Nov 16 13:37 sampletable100m.csv
7. Error! Use the Home tab to apply 제목 1 to the text that you want to appear here.
4
2. 성능 테스트
2.1 데이터 입력
2.1.1 InfiniFlux 데이터 입력
InfiniFlux 에 데이터를 입력 하는 방법은 InfiniFlux 에서 제공하는 ifluxloader tool을 사용하여
CSV 파일을 테이블에 입력 하는 방법을 사용
파일명 대상 테이블 건수 용량 시간 EPS
sampletable100m.csv sampletable 1억건 13GB 4.96 min 336,022
- 전체 1억건에 대하여 초당 33만개의 데이터가 입력.
2.1.2 Influxdb 데이터 입력
Influxdb에 데이터 입력하는 방식은 influx -import -path=sampletable100m.csv -precision=ns
명령어를 사용 하여서 txt 데이터 파일을 입력 하는 방법을 사용
파일명 대상 테이블 건수 용량 시간 EPS
sampletable100m.csv test_influxdb 1억건 20GB 48.18 min 39,117
- 전체 1억건에 대하여 초당 약3.9만개의 데이터 입력
2.1.3 InfiniFlux vs Influxdb
- 테스트 결과 InfiniFlux 의 입력 속도가 Influxdb대비 10배 정도 빠름
- Influxdb는 입력을 연속으로 지속적으로 하면 입력 속도가 낮아지는 것을 확인
39,117
336022
0
100,000
200,000
300,000
400,000
초당 입력 속도
Influxdb
InfiniFlux
8. Error! Use the Home tab to apply 제목 1 to the text that you want to appear here.
5
2.2 DISK 저장 용량
InfiniFlux는 데이터를 저장 할 때 압축하여 저장 하기 때문에 기존의 데이터 보다는 압축된
것을 알 수 있다.
- 13GB 의 데이터에 대하여 InfiniFlux 는 5GB로 , 20GB의 데이터에 Influxdb는 20GB 의
저장 공간을 사용한다.
- InfiniFlux는 원본대비 62%압축 Influxdb는 원본대비 0%압축 하였다.
2.3 시스템 자원 사용
시스템 리소스 측정은 dstat 로 5초 간격으로 측정 후 저장
시스템 리소스 측정은 개별 프로세스가 아닌 전체 시스템 사용량으로 측정
2.3.1 CPU 사용률
Influxdb 의 경우 데이터 입력 시에 평균 35% 의 CPU를 사용하는 것으로 측정
InfiniFlux 는 평균 24% 의 CPU 를 사용
0
5
10
15
20
25
저장 용량
Influxdb
InfiniFlux
0
50
100
100
235
370
505
640
775
910
1045
1180
1315
1450
1585
1720
1855
1990
2125
2260
2395
2530
2665
2800
CPU 사용률
influxdb
InfinFlux
9. Error! Use the Home tab to apply 제목 1 to the text that you want to appear here.
6
2.3.2 Memory 사용량
- Influxdb 의 메모리 사용량은 데이터 입력 시 평균 1.4GB를 사용하며, Influxdb 를 종료
하기 전까지 사용 메모리 감소가 없음.
- InfiniFlux 는 평균 1.5GB를 사용하였으며, 상황에 따라 메모리 사용이 유동적으로 변함.
2.4 쿼리 테스트
Influxdb 쿼리의 경우 GROUP BY가 tag key에 만 적용되어 사용 되어서 입력할 때 적용
해야 된다.
Test는 srcip컬럼에만 tag key 설정하여 해당 컬럼에 만 group by가 된다.
group by를 하면 select에 적지 않아도 자동으로 분류 하여 출력한다.
Influxdb쿼리는에 삽입한 날짜 데이터 값은 임의의 생성한 유닉스 ns 값의 시간
전체 데이터 건수 카운트
select count(*) from test_cli..test_influxdb
단순 조건 검색
select count(*) from test_cli..test_influxdb
where (srcip='31.224.72.52' and dstip='86.45.186.17');
0
1000000
2000000
65
165
265
365
465
565
665
765
865
965
1065
1165
1265
1365
1465
1565
1665
1765
1865
1965
2065
2165
2265
2365
2465
2565
2665
2765
2865
Memory 사용률
Influxdb
InfinFlux
10. Error! Use the Home tab to apply 제목 1 to the text that you want to appear here.
7
복합 조건 쿼리
select count(dstip), min(dstport),max(dstport), mean("eventsize")
from test_cli..test_influxdb
where (dstport <= 1000 and dstport >= 100) and evencod=200
group by srcip
Group by average 쿼리
select mean(eventsize) from test_cli..test_influxdb group by evencod
Group by count 쿼리
select count(*) from test_cli..test_influxdb group by evencod
Group by 연산 쿼리
select sum(eventsize) from test_cli..test_influxdb group by evencod
Group by STDDEV 연산 쿼리
Select stddev(eventsize) from test_cli..test_influxdb group by evencod
수행 결과
InfiniFlux Influxdb 결과값(건수)
전체 카운트 0.000 초 34.957 초 1억건
단순 조건 검색 0.214 초 4.245 초 17,640
Group by AVERAGE
for full-scan
11.076 초
8.36 초
(미리 계산,
Full scan의 경우에만
빠름)
401
12848
200
9599.9949
Group by count 7.738 초 40.673 초
401
19998781
200
80001219
Group by SUM 11.838 초 6.49 초 401
11. Error! Use the Home tab to apply 제목 1 to the text that you want to appear here.
8
For full-scan (미리 계산,
Full scan의 경우에만
빠름)
256944328701
200
768010626424
Group by STDDEV 14.869 초 303.034 초
401
2.44939
200
12544.2
복합 조건 검색 30.852 초 52.126 초 75ROWS
12. Error! Use the Home tab to apply 제목 1 to the text that you want to appear here.
9
3. 테스트 총평
InfiniFlux VS Influxdb테스트 결과 요약
InfiniFlux Influxdb 비고
원본 데이터 sampletable100m.csv (1억건, 13GB) 테스트용 샘플데이터
CPU 사용률(%) 24% 35%
100% = 8 core 전체
1.5배 적게 사용
메모리 사용량(GB) 1.5GB 1.4GB 1.1배 많이 사용
DISK 사용량(GB) 5GB 20GB
원본대비 Infiniflux
65%압축 Influxdb
0%압축
초당 입력 속도(EPS) 336,022 EPS 39,117 EPS 9배 빠름
쿼리
전체 카운트 0.000 초 34.957 초 결과건수 1억건
시간 검색 0.214 초 4.245 초 결과건수 1.7만건
복합 검색 30.852 초 52.126 초 75ROWS
GROUP BY
AVERAGE
11.076 초 8.36 초
401 12848
200 9599.99
GROUP BY
COUNT
7.738 초 40.673 초
401 19998781
200 80001219
GROUP BY
SUM
11.83 초 6.49 초
401 256944328701
200 768010626424
GROUP BY
STDDEV
14.869 초 303.034 초
401 2.44939
200 12544.2
- InfiniFlux 와 Influxdb는 기본적으로 SQL 문을 사용하는 것이 유사하지만, 기본적인
내부 설계에서 많은 차이가 발생
- db내부에 database라는 공간을 만든 후 안에 table 형식으로 저장
- database 안의 table들은 한 번에 통합 검색이 가능
- InfiniFlux 는 Column 형 DB를 기본 아키텍처로 사용하지만, Influxdb는 key-values 저장소
방식을 사용하고 있어, case에 따라 두 DB의 성능 및 사용방법에 많은 차이가 있음
- 데이터를 저장하는 방식의 차이로 InfiniFlux 는 기존 DB와 같이 Table schema 를 만들거
구조에 맞게 데이터를 입력 해야 하지만 Influxdb는 일부 칼럼만 데이터 저장이 가능
- 이런 저장 방식의 차이로 인하여 현재 Influxdb는 GROUP BY 쿼리는 tag key미적용
컬럼에는 사용이 불가능 하며, ORDER BY 와 LIMIT 사용에 제약이 있음.
- 또한 LIKE 구문과 같이 특정 키워드 검색이 불가능(문자열 ‘=’ 검색만 지원 ).
- Influxdb의 쿼리 속도 의 경우 결과 건수가 증가 할수록 속도가 느려지는 특성이 있어
쿼리를 사용 할 때 Equal 조건의 경우는 빠른 반응을 보이지만 tag key적용을 하지 않은
컬럼에 대한 검색을 할 때는 시간이 많이 걸리는 것을 확인
- 데이터를 입력 할 시 각 테이블 마다 tag key와 입력 시간이나 임의의 시간이 같을 때
중복 처리를 하여서 데이터를 입력하지 않는 것을 확인
13. Error! Use the Home tab to apply 제목 1 to the text that you want to appear here.
10
- 기존 설정은 각 테이블 마다 1000,000 row 데이터를 저장 할 수 있도록 제약을
걸어두었음. Conf 파일을 수정하면 그 이상도 입력 가능
- Tag key를 많이 설정 할수록 데이터 입력 속도는 느려지고, 저장 용량은 크게 늘어난다.
14. Error! Use the Home tab to apply 제목 1 to the text that you want to appear here.
11
본 테스트를 통하여 InfiniFlux 와 Influxdb의 성능을 비교 하였다.
본 테스트 결과 Influxdb는 데이터를 분석하기에는 데이블 구성이나 설계를 InfiniFlux와는
많이 다르게 해야한다. Influxdb 같은 경우에는 많은 테이블을 가지고 쿼리 문으로
조건검색을 지향하고 있다. 각 테이블 마다 tag key를 설정하고 각 tag key를 묶어서
결과값을 통계 분석하는 방향으로 설계를 해야 하는 것 같다.
기본 테이블에 입력 제한 row가 있어서 분할 하고도 한 테이블에 많은 데이터가 몰리게
되면 문제가 발생되는 것 같다. 그리고 tag key설정을 한 컬럼이 중복도가 낮고, 데이터
량이 많게 되면 메모리 사용량은 물론이고 데이터 입력 속도가 많이 느려진다. 또한
인덱싱은 tag key를 중점으로 하기 때문에 다른 컬럼에 대한 인덱싱이 없어서 다른 컬럼에
만 검색을 하게 되면 시간이 좀 더 소요되는 것을 확인 하였다.
반면에 InfiniFlux 는 빠른 입력과 다양한 통계 분석 쿼리 사용이 가능하다, 손쉬운
인덱스 설정으로 데이터를 빠르게 분석하는 다양한 용도에 사용이 가능하다.