데이터 타입
마크베이스 사용 가능한 칼럼의 데이터 타입은 아래와 같다.
...
32767 ~ 32767
-32768은 NULL
...
0 ~ 65534
65535는 NULL
...
-2147483647 ~ 2147483647
-2147483648은 NULL
...
0 ~ 4294967294
4294967295는 NULL
...
long
...
9223372036854775807 ~ 9223372036854775807
-9223372036854775808은 NULL
...
0~18446744073709551614
18446744073709551614는 NULL
...
1970-01-01 00:00:00 000:000:000 이후로부터 표현 가능
...
varchar(1)부터 varchar(32767)까지 가능
입력될 데이터를 반드시 UTF-8 형태로 엔코딩이 되어야 문제없이 동작한다.
...
"0000:0000:0000:0000:0000:0000:0000:0000" ~ "FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF"
...
텍스트 데이터 타입
(키워드 인덱스 생성 가능)
...
이진 바이너리 데이터 타입
(인덱스 생성 불가능)
...
0 부터 64M bytes까지 저장 가능
테이블 생성
로그 테이블 생성 구문은 아래와 같다로그 테이블은 다음과 같이 간단하게 생성할 수 있다. sensor_data 라는 테이블을 생성하고 삭제해 보도록 하자.
마크베이스에서 사용가능한 데이터 타입은 SQL 레퍼런스의 자료형 에서 확인하면 된다.
Code Block | ||
---|---|---|
| ||
Mach> CREATE TABLE table_name (column_list) [tablespace tablespace_name] [table_property_list]; column_list: column_name (column_type) [column_property_list] [not_null_constraint] column_type : {short | int | long | float | double | datetime | varchar | ipv4 | ipv6 | text | binary} column_property_list: property( value_pair, value_pair, ... ) value_pair : (PROPERTY_NAME = PROPERTY_VALUE) primary_key = (PRIMARY KEY) not_null_constraint = (NOT NULL) table_property_list : value_pair, value_pair,... value_pair: CHECK_FORGERY= value_pair (Default:0) |
칼럼 프로퍼티(Column Property)
Column에 대한 속성을 지정한다.
...
하나의 파티션이 가지는 Page의 개수를 나타낸다. 하나의 파티션이 가지는 Value의 개수는 PART_PAGE_COUNT * PAGE_VALUE_COUNT가 된다.
...
성능 향상을 위한 캐쉬 영역을 설정하는 것이다. 파티션에 접근할 때 해당 파티션의 메타 정보를 메모리에 담고 있는 구조체를 먼저 찾게 되는데, 몇 개의
파티션 정보를 메모리에 담고 있을지 결정한다. 크면 클수록 성능에 도움이 될 것이나, 메모리 사용량이 늘어난다. 최소값은 1, 최대값은 65535이다.
...
해당 Column의 MINMAX를 위한 캐쉬 메모리를 얼마나 사용할 것인지 지정하는 것이다. 0번째 Hidden Column인 _ARRIVAL_TIME의 경우 기본적으로 100MB으로 지정이 된다. 하지만 다른 Column들은 기본적으로 0으로 지정되어 있다. 이 크기는 Table의 생성 이후에도 "ALTER TABLE MODIFY" 구문을 통해서 이 값은 변경이 가능하다.
시스템 칼럼(Pre-defined system columns)
Create Table 문을 이용하여 테이블을 생성하면 시스템은 두 개의 사전 정의된 시스템 컬럼을 추가로 생성한다. _ARRIVAL_TIME 및 _RID컬럼이다.
_ARRIVAL_TIME 컬럼은 DATETIME 타입의 컬럼으로 INSERT 문이나 AppendData로 데이터를 삽입하는 시점의 시스템 time을 기준으로 삽입되며, 해당 값은 생성된 레코드의 unique key로 사용될 수 있다. 이 컬럼의 값은 순서가
보장되는 경우(과거-현재 순으로) ifluxloader나 INSERT 문에서 값을 지정하여 삽입할 수 있다. DURATION 조건절을 이용하여 데이터를 검색할 경우, 이 컬럼의 값을 기준으로 데이터를 검색한다.
_RID컬럼은 특정 레코드가 갖는 유일한 값으로 시스템이 생성한다. 이 컬럼의 데이터 타입은 64bit 정수이며, 이 컬럼에 대해서는 사용자가 값을 지정할 수 없고 인덱스도 생성할 수 없다. 데이터 INSERT시에 자동으로 생성된다. _RI
D 컬럼의 값으로 레코드를 검색할 수 있다.
사용예제
Code Block | ||
---|---|---|
| ||
mach>create table PredefinedTBL(c1 integersensor_data ( id VARCHAR(32), val DOUBLE ); Created successfully. mach>desc PredefinedTBL; ---------------------------------------------------------------- NAME TYPE LENGTH ---------------------------------------------------------------- _ARRIVAL_TIME datetime 8 c1 integer 4 mach>insert into PredefinedTBL values (1); 1 row(s) inserted. mach>select _rid from PredefinedTBL; _rid ----------------------- 0 [1] row(s) selected. mach>select c1 from PredefinedTBL where _rid = 0; c1 -------------- 1 [1] row(s) selected. |
MINMAX Cache 개념
일반적으로 Disk DBMS에서는 특정 값을 인덱스를 활용하여 검색할 경우 해당 인덱스가 포함된 디스크 영역에 대해
접근하고, 해당 값이 포함된 최종 디스크 페이지를 찾아가도록 구현되어 있다.
반면, Machbase는 시계열 정보를 유지하기 위해 시간 순으로 파티션 되어있는 구조이며, 이것은 특정한 하나의 인덱
스 정보가 시간 순으로 조각조각의 파일로 나뉘어져 있다는 의미이다. 따라서, Machbase의 인덱스를 이용할 때는 이
러한 파티션으로 조각나 있는 인덱스 파일을 순차적으로 검색한다.
만일 검색해야 할 대상 데이터의 범위가 1000개의 파티션으로 나뉘어져 있다면 1000번의 파일을 매번 열어서 검색
해야 한다는 의미이다. 비록 효율적인 컬럼형 데이터베이스 구조로 설계되어 있긴 하나, 이러한 I/O 비용이 인덱스 파
티션 개수의 크기에 비례하기 때문에 그 성능을 향상시키기 위한 방법이 MINMAX_CACHE 구조이다.
이 MINMAX_CACHE는 해당 파티션의 인덱스 파일 정보를 메모리에 담고 있는 구조체로서 해당 컬럼의 최소 및 최
대 값을 메모리에 유지하는 연속된 메모리 공간이다. 이런 구조를 유지함으로써 특정 값이 포함된 파티션을 검색할 경
우 그 값이 해당 인덱스의 최소값 보다 작거나 최대 값보다 클 경우에는 아예 해당 파티션을 건너뛸 수 있기 때문에 고
성능의 데이터 분석이 가능해 진다.
테이블 생성시에 특정 컬럼에 대해 MINMAX Cache를 사용할 것인지 결정할 수 있다. (디폴트는 off)
만일 이 컬럼이 minmax_cache_size가 0이 아닌 값으로 설정되었으면, 해당 컬럼에 인덱스 검색시 MINMAX CAC
HE가 동작하게 되며, minmax_cache_size = 0일 경우에는 동작하지 않는다.
...
아래는 실제 MINMAX를 활용한 테이블 생성 예를 나타낸다.
Code Block | ||
---|---|---|
| ||
mach> CREATE TABLE predefined_table1 (id INTEGER, name VARCHAR(100) PROPERTY(MINMAX_CACHE_SIZE = 0)); Created successfully. mach> CREATE TABLE predefined_table2 (id INTEGER PROPERTY(MINMAX_CACHE_SIZE = 10240), name VARCHAR(100) PROPERTY(MINMAX_CACHE_SIZE = 0)); Created successfully. mach> CREATE TABLE predefinedd_table3 (id1 INTEGER PROPERTY(MINMAX_CACHE_SIZE = 10240), name VARCHAR(100) PROPERTY(MINMAX_CACHE_SIZE = 0),id2 LONG PROPERTY(MINMAX_CACHE_SIZE = 1024), id3 IPV4 PROPERTY(MINMAX_CACHE_SIZE = 1024), id4 SHORT); Created successfully.Elapsed time: 0.051 Mach> DROP TABLE sensor_data; Dropped successfully. Elapsed time: 0.025 Mach> |