업데이트:

태그:

카테고리:

st_distance_sphere


  • 진행중인 프로젝트에서 관계형데이터베이스에서 공간정보를 다뤄야했다.
  • 공간정보데이터베이스나 그래프데이터베이스 등 새로운 기술을 도입하기보다는, 현재 사용중인 기술스택 중에서 선택하려했다.
  • 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이 소요된다.

스크린샷 2023-03-04 23 55 33

100만개 기준 단일 트랜젝션에서 0.54초 정도가 소요된다.
이론적인 부분은 추후에… 다뤄야겠다.

댓글남기기