[Database] 공간정보 저장하기
- 진행중인 프로젝트에서 관계형데이터베이스에서 공간정보를 다뤄야했다.
- 공간정보데이터베이스나 그래프데이터베이스 등 새로운 기술을 도입하기보다는, 현재 사용중인 기술스택 중에서 선택하려했다.
- mariadb에서 이에 대한 데이터타입과 함수를 지원해주고 있어서 아래처럼 테스트를 진행했다.
테이블 쿼리
CREATE TABLE `loc` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`latitude` float(17,14) DEFAULT NULL,
`longitude` float(17,14) DEFAULT NULL,
`point` geometry NOT NULL,
PRIMARY KEY (`id`),
SPATIAL KEY `point_index` (`point`)
);
테스트데이터 쿼리
DELIMITER $$
CREATE PROCEDURE gen_d(IN count INT)
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE name VARCHAR(100);
DECLARE latitude FLOAT(10, 6);
DECLARE longitude FLOAT(10, 6);
WHILE i <= count DO
SET name = CONCAT('Location ', i);
SET latitude = RAND() * (38.5 - 33.2) + 33.2;
SET longitude = RAND() * (132.0 - 124.0) + 124.0;
INSERT INTO loc(name, latitude, longitude, point) VALUES(name, latitude, longitude, ST_PointFromText(CONCAT('POINT(', longitude, ' ', latitude, ')')));
SET i = i + 1;
END WHILE;
END $$
DELIMITER ;
call gen_d(1000000);//1000000만개 생성
100만개 테스트, 2km이내, 인덱스 적용시 시간 0.54sec
이 소요된다.
100만개 기준 단일 트랜젝션에서 0.54초 정도가 소요된다.
이론적인 부분은 추후에… 다뤄야겠다.
댓글남기기