로그 규칙:
일정시간간격으로 파일을 수신하는 로그를 기록하는 테이블
1일 50000개 가량의 데이터 누적
로그 보관기한 3개월
1개월 150`00000개
빠른 검색을 위한 인덱스와 키값을 지정.. 각 키값에 따라 데이터가 누적되는 성능과 검색성능비교 테스트
테스트 pc 사양 : CentOS 6.3, i5 센디브릿지, 8G Ram, 7200rpm짜리 1기가 하드..이정도?정확히 모름
하드웨어는 공용이라서 속도 측정에 오차가 발생할 가능성이 높음
CREATE TABLE log_upload1
(
regdate timestamp without time zone NOT NULL,
filename character varying(100) NOT NULL,
filenamepath character varying(255),
logmessage character varying(255),
PRIMARY KEY (regdate, filename)
);
CREATE TABLE log_upload2
(
regdate timestamp without time zone NOT NULL,
filename character varying(100) NOT NULL,
logmessage character varying(255),
filenamepath character varying(255),
CONSTRAINT log_upload2_pkey PRIMARY KEY (filename)
);
CREATE INDEX log_upload2_idx
ON log_upload2
USING btree
(regdate);
CREATE TABLE log_upload3
(
id bigserial NOT NULL,
regdate timestamp without time zone NOT NULL,
filename character varying(100) NOT NULL,
logmessage character varying(255),
filenamepath character varying(255),
PRIMARY KEY (id)
);
CREATE INDEX log_upload3_idx
ON log_upload3
USING btree
(regdate);
CREATE TABLE log_upload4
(
id bigserial NOT NULL,
regdate timestamp without time zone NOT NULL,
filename character varying(100) NOT NULL,
logmessage character varying(255),
filenamepath character varying(255),
PRIMARY KEY (id)
);
CREATE INDEX log_upload4_idx
ON log_upload4
USING btree
(regdate, filename);
– 데이터 누적 입력 테스트
1번 테이블
INSERT INTO log_upload1
(regdate, filename, filenamepath, logmessage)
select
now(),
md5(random()::text)||nextval('test1'),
md5(random()::text)||currval('test1'),
'no message'
FROM generate_series(1,1500000);
1회 : 27752ms
2회 : 28085
3회 : 29445
4회 : 28864
5회 : 29634
6회 : 27742
2번 테이블 (1번과 같은 쿼리)
1회 : 43306
2회 : 35274
3회 : 33770
4회 : 46349
5회 : 44384
6회 : 44153
3번 테이블
INSERT INTO log_upload3
(regdate, filename, filenamepath, logmessage)
select
now(),
md5(random()::text)||nextval('test3'),
md5(random()::text)||currval('test3'),
'no message'
FROM generate_series(1,1500000);
1회 : 21605
2회 : 22451
3회 : 22075
4회 : 20701
5회 : 24611
6회 : 25346
4번 테이블
INSERT INTO log_upload4
(regdate, filename, filenamepath, logmessage)
select
now(),
md5(random()::text)||nextval('test4'),
md5(random()::text)||currval('test4'),
'no message'
FROM generate_series(1,1500000);
1회 : 39211
2회 : 35934
3회 : 37053
4회 : 38488
5회 : 38954
6회 : 35096
여기까지 결론.
인덱스 두개자리는 시간이 오래 걸린다. 데이터 누적에 따라 느려지는건 별로 없다. 바이너리 인덱스라서
속도차이는 조금 있지만 신경쓸수준은 아니니 검색에 적합한 방식을 사용하면 될듯하다.
검색 쿼리도 확인을 해 봐야되는데.. 테스트 데이터를 만들어낸다음에 해? 보지않을 것 같다. 만약에 하게되면 해야될것. -샘플데이터 -검색쿼리