Posting

Machbase의 최신 소식을 지금 만나보세요

[MACHBASE 기초] 샘플데이터 입력/조회

마크베이스(Machbase) 샘플 데이터 입력과 조회

설치와 서버 구동, 클라이언트 유틸리티로 서버에 접속하는 방법까지 아래의 포스팅으로 안내를 했다. 이제는 실제로 어떻게 Machbase를 사용해야 할지, 샘플 데이터와 쿼리를 통해 감을 잡아보도록 한다. Machbase는 초고속 입력을 경험할 수 있도록 ‘1분 안에 CSV 파일 로딩하기‘ 라는 1분 튜토리얼 예제를 제공하고 있다.

테스트 환경

  • CPU : Intel(R) Core(TM) i5-4570 CPU @ 3.20GHz
  • Memory : 8GB DDR4
  • Disk : Samsung SSD 300G
  • OS : Ubuntu 14.04

테스트 위치

$MACHBASE_HOME/tutorials/csvload 로 가면 쿼리와 쉘 스크립트 파일이 있는 것을 볼 수 있다.

$ ls -al
total 127692
drwxrwxr-x.  2 machbase machbase      4096 Aug 18 17:14 .
drwxrwxr-x. 11 machbase machbase      4096 Aug 18 17:14 ..
-rw-rw-r--.  1 machbase machbase    246769 Aug 18 17:14 awards.csv
-rw-rw-r--.  1 machbase machbase       259 Aug 18 17:14 create_sample2_table.sql
-rw-rw-r--.  1 machbase machbase       231 Aug 18 17:14 create_sample_table.sql
-rwxrwxr-x.  1 machbase machbase        60 Aug 18 17:14 load_awards.sh
-rwxrwxr-x.  1 machbase machbase       474 Aug 18 17:14 load_sample2.sh
-rwxrwxr-x.  1 machbase machbase       486 Aug 18 17:14 load_sample.sh
-rw-rw-r--.  1 machbase machbase 130477124 Aug 18 17:14 sample_data.csv

sample_data.csv 를 열어보면 샘플 데이터 들어있는데, 웹 로그 형태의 데이터가 100만 줄인 것을 확인할 수 있다. 이걸 데이터베이스에 입력해 보도록 한다.
$ head sample_data.csv
2015-05-20 06:00:00,63.214.191.124,2296,122.195.164.32,5416,12,GET /twiki/bin/view/Main/TWikiGroups?rev=1.2 HTTP/1.1,200,5162
2015-05-20 06:00:07,212.237.153.79,6203,71.129.68.118,8859,67,GET /twiki/bin/view/Main/WebChanges HTTP/1.1,200,40520
2015-05-20 06:00:07,243.9.49.80,344,122.195.164.32,6203,46,GET /twiki/bin/view/Main/TWikiGroups?rev=1.2 HTTP/1.1,200,5162
2015-05-20 06:00:07,232.191.241.129,5377,174.47.129.59,1247,17,GET /mailman/listinfo/hsdivision HTTP/1.1,200,6291
2015-05-20 06:00:07,121.67.24.216,2296,212.237.153.79,6889,68,GET /twiki/bin/view/TWiki/WebTopicEditTemplate HTTP/1.1,200,3732
2015-05-20 06:00:07,31.224.72.52,450,100.46.183.122,10541,20,GET /twiki/bin/view/Main/WebChanges HTTP/1.1,200,40520
2015-05-20 06:00:07,210.174.159.227,6180,173.149.119.202,6927,2,GET /twiki/bin/rdiff/TWiki/AlWilliams?rev1=1.2&rev2=1.1 HTTP/1.1,200,5234
2015-05-20 06:00:07,210.174.159.227,10124,16.194.51.72,10512,69,GET /twiki/bin/rdiff/TWiki/AlWilliams?rev1=1.2&rev2=1.1 HTTP/1.1,200,5234
2015-05-20 06:00:07,60.48.99.15,12333,85.183.139.166,12020,64,GET /robots.txt HTTP/1.1,200,68
2015-05-20 06:00:07,81.227.25.139,5883,96.128.212.177,2042,56,GET /twiki/bin/oops/TWiki/TextFormattingRules?template=oopsmore¶m1=1.37¶m2=1.37 HTTP/1.1,200,11400

데이터 입력

이제 본격적으로 데이터를 로딩해 보기로 하자. 귀찮으니까 가장 빠른 방법으로 입력한다. 바로 load_sample.sh 를 실행하는 것이다. 쉘 스크립트의 내용은 아래와 같다. (중요 부분만 나타냈다)

$ cat load_sample.sh
#!/bin/sh

#-----------------------------------------------------------------
# run csvimport command to load sample_data.csv into Machbase DB
# use first field as _arrival_time column and
# -F option for formatting datetime.
#
# Usage: sh load_sample.sh
#-----------------------------------------------------------------
set -x

## 테이블 스키마를 만드는 명령어
machsql -s 127.0.0.1 -u sys -p manager -f create_sample_table.sql

## 데이터를 로딩하는 명령어
csvimport -t sample_table -d sample_data.csv -a -F "_arrival_time YYYY-MM-DD HH24:MI:SS"

자, 수행해 보았다.
machbase@mb:/opt/machbase/current/tutorials/csvload$ sh load_sample.sh + machsql -s 127.0.0.1 -u sys -p manager -f create_sample_table.sql =================================================================  Machbase Client Query Utility  Release Version 3.5.0.826b8f2.community  Copyright 2014 InfiniFlux Corporation or its subsidiaries.  All Rights Reserved. ================================================================= MACHBASE_CONNECT_MODE=INET, PORT=5656 Type 'help' to display a list of available commands. Mach> CREATE TABLE SAMPLE_TABLE (  srcip IPV4,  srcport INTEGER,  dstip IPV4,  dstport INTEGER,  protocol SHORT,  eventlog VARCHAR(1204),  eventcode SHORT,  eventsize LONG ); Created successfully. Elapsed time: 0.094 + csvimport -t sample_table -d sample_data.csv -a -F _arrival_time YYYY-MM-DD HH24:MI:SS -----------------------------------------------------------------  Machbase Data Import/Export Utility.  Release Version 3.5.0.826b8f2.community  Copyright 2014, InfiniFlux Corporation or its subsidiaries.  All Rights Reserved. ----------------------------------------------------------------- NLS : US7ASCII EXECUTE MODE : IMPORT TARGET TABLE : sample_table DATA FILE : sample_data.csv IMPORT_MODE : APPEND FILED TERM : , ROW TERM : \n ENCLOSURE : " ARRIVAL_TIME : TRUE ENCODING : NONE HEADER : FALSE CREATE TABLE : FALSE  Progress bar Imported records Error records  1000000 0 Import time : 0 hour 0 min 2.892 sec Load success count : 1000000 Load fail count : 0 machbase@mb:/opt/machbase/current/tutorials/csvload$ 


아래에 있는 Import time 이 보이는가? 2.8초 만에 100만건이 로딩되었다.  

쿼리 수행

입력한 데이터를 조회하는 쿼리를 수행해 보자. machsql 을 사용하면 되는데, 유저명과 패스워드는 SYS / MANAGER 이다. 먼저 테이블 목록을 조회해서, 입력한 데이터가 들어있는 테이블 이름을 확인한다.

Mach> show tables;
USER_NAME             TABLE_NAME                                          TABLE_TYPE
------------------------------------------------------------------------------------------
SYS                   SAMPLE_TABLE                                        LOG
[1] row(s) selected.
Elapsed time: 0.001
그 다음, 해당 테이블에 있는 데이터 개수를 세어 보았다.
Mach> select count(*) from sample_table;
count(*)
-----------------------
1000000
[1] row(s) selected.
Elapsed time: 0.001

100만건이 들어있다고 아주 빠르게 출력된다. 그럼, 좀 더 복잡한 연산을 시켜 봤다. GROUP BY 절을 이용해 각 그룹의 레코드 개수를 세는 쿼리이다.

Mach> select srcip, count(srcip) from sample_table group by srcip;
srcip           count(srcip)
----------------------------------------
148.30.103.173  13389
31.224.72.52    13290
5.114.66.53     13315
118.179.107.47  13142
214.153.107.182 13219
105.9.103.49    13472
96.40.75.42     13380
60.48.99.15     13363
243.9.49.80     13355
152.67.188.171  13314
232.191.241.129 13258
233.8.84.203    13315
50.230.44.173   13252
81.227.25.139   13312
5.238.208.30    13184
157.54.162.47   13333
177.151.141.9   13274
100.195.159.235 13097
115.18.128.171  13468
239.81.105.222  13501
207.239.12.230  13174
63.214.191.124  13324
173.149.119.202 13546
228.109.100.138 13378
100.46.183.122  13196
129.55.140.243  13322
201.227.32.49   13279
122.195.164.32  13446
185.22.195.164  13451
16.0.123.104    13357
174.47.129.59   13389
7.234.88.67     13314
123.198.82.192  13342
32.98.52.241    13206
6.32.167.53     13375
86.45.186.17    13487
231.146.69.51   13483
77.59.213.51    13379
85.183.139.166  13174
46.201.48.18    13384
238.136.26.139  13031
162.80.44.96    13293
221.103.26.120  13402
107.32.71.99    13140
252.248.178.61  13422
161.28.150.105  13379
153.70.151.135  13320
98.25.97.158    13339
153.199.166.54  13448
98.228.223.202  13201
16.194.51.72    13424
212.237.153.79  13304
227.106.13.91   13265
96.128.212.177  13594
245.13.24.17    13196
66.114.157.127  13267
69.99.246.62    13511
183.103.50.46   13247
121.67.24.216   13409
178.90.167.178  13453
50.5.206.126    13408
28.197.127.42   13068
58.208.78.121   13303
166.218.230.17  13253
248.168.229.34  13472
137.232.56.93   13238
226.7.237.25    13271
20.137.26.161   13393
64.58.31.79     13404
71.129.68.118   13361
166.144.72.55   13323
219.229.142.218 13537
210.174.159.227 13401
220.192.100.45  13259
159.240.209.63  13425
[75] row(s) selected.
Elapsed time: 0.224

100만건 그룹갯수가 75개이고, 수행시간은 0.22초.. 빠르다. 그러면, 더더욱 복잡하게 SRCIP 컬럼 값이 낮은 순서로 정렬한 다음 상위 10개만 출력하는 쿼리를 실행시켰다.

Mach> select srcip, count(srcip) from sample_table group by srcip order by 2 desc limit 10;
srcip           count(srcip)
----------------------------------------
96.128.212.177  13594
173.149.119.202 13546
219.229.142.218 13537
69.99.246.62    13511
239.81.105.222  13501
86.45.186.17    13487
231.146.69.51   13483
248.168.229.34  13472
105.9.103.49    13472
115.18.128.171  13468
[10] row(s) selected.
Elapsed time: 0.244
Mach>

정렬 후 상위 10개를 뽑는데 0.24초가 나온다. 이 역시 상당히 빠른 속도다.

연관 포스트

C언어로 Binary data를 Machbase에 넣기

1.개요 Data를 다루다 보면 numeric, varchar 형 데이터뿐만 아니라 JPG, PNG, MP3와 같은 Binary data도 database에 저장해야 할 때가 존재한다. 그러나 일반 data들과는 달리 Binary

[MACHBASE 연동] Android studio에서 JDBC 연결하기

마크베이스 기술지원본부 이현민 1. 개요 수많은 데이터들이 많은 환경에서 생성되고 있는 오늘날, 우리 현대인들의 동반자인 스마트폰 또한 데이터생성의 주체로써 또는 전달자로서 알게 모르게 그 구실을