IT 일기장

[DBeaver] 대량 테스트 데이터 생성 프로시저 (dummy data) 본문

프로그래밍 언어/SQL(DB)

[DBeaver] 대량 테스트 데이터 생성 프로시저 (dummy data)

뽕슈 2024. 6. 19. 09:50
반응형

프로젝트 하면서 어디 좋고 쓸만한 무료 Grid가 없나.. 찾아보던 중에 Toast Grid를 발견하게됐다.

여기서 들었던 의문점 중 하나가 "Toast Grid는 많은 데이터들을 커버할 수 있을까?" 였는데

계획 및 방법은 다음과 같다.

 

 

계획

1. 테스트 테이블 toast_test 하나 만들어놓고 데이터를 10만개 정도 넣어본다.
2. 화면볼때 이상이 없는지 확인한다.
3. 이상이 없다면 10만개씩 더 넣어본다.
4. 이를 반복

 

방법

1. Java에서 function 하나 만들어서 DB에 데이터를 집어넣는다.
2. 프로시저를 사용해서 DB에 데이터를 집어넣는다.
3. INSERT 구문을 이용해서 하나씩 DB에 데이터를 집어넣는다.

 

 

 

참고로 현재 DB 개발환경은 MariaDB 11이다.

이정도까지만 생각하고 방법 3가지 중에 1번,3번은 가장 익숙한 방법이지만 이렇게 하고싶지않다.. (귀찮다)

2번으로 고고. 우선 아래 소스코드와 같이 계획에 세워놨던 테스트 테이블 하나 만들고~

 

 

CREATE TABLE `toast_test` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '인덱스',
  `NAME` varchar(100) DEFAULT NULL COMMENT '이름',
  `artist` varchar(100) DEFAULT NULL COMMENT '아티스트',
  `TYPE` varchar(100) DEFAULT NULL COMMENT '타입',
  `RELEAS` varchar(100) DEFAULT NULL COMMENT '릴리스',
  `genre` varchar(100) DEFAULT NULL COMMENT '장르',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=230001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

 

 

DBeaver에서 프로시저를 생성해보자. 프로시저명은 dummy_test로 지었다.

 

 

 

 

Source 탭에 간단하게 소스코드 짜주고 테스트를 해봤는데.. CALL 속도가 굉장히 느리다.

현재 환경에서 1분 21초 정도 소요.. 그도 그럴것이 10만개를 일일이 하나씩 반복문 돌려서 넣으니 당연한 일이다.

 

 

CREATE PROCEDURE bizpack_dev.dummy_test()
BEGIN
	DECLARE i INT DEFAULT 1;
	WHILE i <= 100000 DO
		INSERT INTO toast_test(id, name, artist, TYPE, releas, genre)
		VALUES (i, concat('name',i), concat('artist',i), concat('type',i), concat('releas',i), concat('genre',i));
		SET i = i + 1;
	END WHILE;
END

 

 

방법을 바꿔서 bulk insert 개념을 활용해보자. 1분 21초에서 18초로 약 4~5배 정도로 빨라졌다.

소스코드는 다음과 같다.

 

CREATE DEFINER=`bizpack_dev`@`%` PROCEDURE `bizpack_dev`.`dummy_test`()
BEGIN
	DECLARE i INT DEFAULT 1;
	DECLARE bulk_size INT DEFAULT 1000;
	DECLARE sql_str LONGTEXT DEFAULT '';
	DECLARE counter INT DEFAULT 0;
	SET sql_str = 'INSERT INTO toast_test(id, name, artist, TYPE, releas, genre) VALUES ';
	WHILE i <= 100000 DO
		SET sql_str = CONCAT(sql_str, '(', i, ', ', '''', CONCAT('name', i), '''', ', ', '''', CONCAT('artist', i), '''', ', ', '''', CONCAT('type', i), '''', ', ', '''', CONCAT('releas', i), '''', ', ', '''', CONCAT('genre', i), '''', ')');
		SET counter = counter + 1;
		SET i = i + 1;
		-- Insert every bulk_size rows
		IF counter = bulk_size THEN
			SET sql_str = CONCAT(sql_str, ';');
			PREPARE stmt FROM sql_str;
			EXECUTE stmt;
			DEALLOCATE PREPARE stmt;
			-- Reset for next bulk
			SET sql_str = 'INSERT INTO toast_test(id, name, artist, TYPE, releas, genre) VALUES ';
			SET counter = 0;
		ELSE
			-- Add a comma if not the last row in the bulk
			IF i <= 100000 THEN
				SET sql_str = CONCAT(sql_str, ', ');
			END IF;
		END IF;
	END WHILE;
	-- Insert remaining rows if any
	IF counter > 0 THEN
		SET sql_str = CONCAT(sql_str, ';');
		PREPARE stmt FROM sql_str;
		EXECUTE stmt;
		DEALLOCATE PREPARE stmt;
	END IF;
END

 

 

Toast UI 테스트 해보면서 얻어낸 결과, 데이터가 뜨지 않았다.

테스트 해보니 1000~2000개도 1~2초정도 소요.

대용량 데이터를 필요로 하는 프로젝트에서는 SlickGrid나 유료 Grid를 사용하자~

반응형
Comments