Skip to end of metadata
Go to start of metadata

You are viewing an old version of this content. View the current version.

Compare with Current View Version History

« Previous Version 3 Next »


데이터 타입

마크베이스 사용 가능한 칼럼의 데이터 타입은 아래와 같다.

타입명설명값 범위
short16bit 부호있는 정수형 데이터 타입

32767 ~ 32767
-32768은 NULL

ushort16bit 무부호 정수형 데이터 타입

0 ~ 65534
65535는 NULL

integer32bit 부호있는 정수형 데이터 타입

-2147483647 ~ 2147483647
-2147483648은 NULL

uintger32bit 무부호 정수형 데이터 타입

0 ~ 4294967294
4294967295는 NULL

long

64bit 부호있는 정수형 데이터 타입

9223372036854775807 ~ 9223372036854775807
-9223372036854775808은 NULL

ulong64bit 무부호 정수형 데이터 타입

0~18446744073709551614
18446744073709551614는 NULL

float32bit 부동 소수점 데이터 타입
double64bit 부동 소수점 데이터 타입
datetime날짜와 시간

1970-01-01 00:00:00 000:000:000 이후로부터 표현 가능

varchar가변길이 문자열(UTF-8)

varchar(1)부터 varchar(32767)까지 가능
입력될 데이터를 반드시 UTF-8 형태로 엔코딩이 되어야 문제없이 동작한다.

ipv4Version 4 인터넷 주소 타입"0.0.0.0" ~ "255.255.255.255"
ipv6Version 6 인터넷 주소 타입

"0000:0000:0000:0000:0000:0000:0000:0000" ~ "FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF"

text

텍스트 데이터 타입

(키워드 인덱스 생성 가능)

0 부터 64M bytes까지 저장 가능
binary

이진 바이너리 데이터 타입

(인덱스 생성 불가능)

0 부터 64M bytes까지 저장 가능

테이블 생성

로그 테이블 생성 구문은 아래와 같다.

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에 대한 속성을 지정한다.

프로퍼티명설명
PART_PAGE_COUNT

하나의 파티션이 가지는 Page의 개수를 나타낸다. 하나의 파티션이 가지는 Value의 개수는 PART_PAGE_COUNT * PAGE_VALUE_COUNT가 된다.

PAGE_VALUE_COUNT하나의 Page가 가지는 Vaule의 개수를 나타낸다.
MAX_CACHE_PART_COUNT

성능 향상을 위한 캐쉬 영역을 설정하는 것이다. 파티션에 접근할 때 해당 파티션의 메타 정보를 메모리에 담고 있는 구조체를 먼저 찾게 되는데, 몇 개의
파티션 정보를 메모리에 담고 있을지 결정한다. 크면 클수록 성능에 도움이 될 것이나, 메모리 사용량이 늘어난다. 최소값은 1, 최대값은 65535이다.

MINMAX_CACHE_SIZE

해당 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 컬럼의 값으로 레코드를 검색할 수 있다.


사용예제

mach>create table PredefinedTBL(c1 integer);
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 CACHE를 사용할 때 다음과 같은 사항에 주의한다.
1. MINMAX_CACHE는 해당 컬럼에 인덱스를 명시적으로 생성하지 않아도 적용된다.
2. 모든 컬럼의 default 는 MINMAX CACHE_SIZE가 0으로 설정되어 사용되지 않기 때문에 필요시 Alter Table
구문을 활용하여 적정한 크기의 메모리 크기를 재설정하여야 동작한다.
3. 숨어있는 컬럼인 _arrival_time은 디폴트로 100MB이며, 자동적으로 MINMAX CACHE 메모리를 사용한다.
4. VARCHAR 타입의 경우에는 MINMAX_CACHE의 대상이 되지 않는다. 따라서 VARCHAR 타입을 명시적으로
캐쉬 사용 유무를 지정하면, 에러가 발생한다.
5. 해당 테이블이 하나 생성될 때 프로퍼티에 설정된 MINMAX_CACHE_SIZE 만큼 최대 메모리가 더 사용될 수
있다. 파티션 개수가 늘수록 메모리가 점진적으로 늘어나 위의 최대 메모리만큼 늘어난다.
6. 만일 해당 테이블에 레코드가 하나도 들어있지 않으면, MINMAX_CACHE 메모리는 전혀 할당되지 않는다.

아래는 실제 MINMAX를 활용한 테이블 생성 예를 나타낸다.


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.










  • No labels