RDBMS(Postgresql)를 이용한 log 테이블 생성시 참고

1 minute read

로그 규칙:

일정시간간격으로 파일을 수신하는 로그를 기록하는 테이블 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

여기까지 결론. 인덱스 두개자리는 시간이 오래 걸린다. 데이터 누적에 따라 느려지는건 별로 없다. 바이너리 인덱스라서 속도차이는 조금 있지만 신경쓸수준은 아니니 검색에 적합한 방식을 사용하면 될듯하다.

 

검색 쿼리도 확인을 해 봐야되는데.. 테스트 데이터를 만들어낸다음에 해? 보지않을 것 같다. 만약에 하게되면 해야될것. -샘플데이터 -검색쿼리