스택 오버플로에 대한 질문을 다시 게시하면 더 나은 포럼이 될 것이라고 제안되었습니다.
지리 공간이 아니지만 데이터에 잘 맞는 데이터 세트를 푸시하는 데 약간의 실험을 시도하고 있으며 결과가 다소 불안정합니다. 데이터 세트는 게놈 데이터입니다. 예를 들어 유전자와 같은 요소가 특정 시작 및 정지 좌표 (우리의 X 축)를 차지하는 DNA 영역이있는 인간 게놈입니다. Y 축을 차지하는 DNA의 여러 영역 (염색체)이 있습니다. 목표는 단일 Y 좌표를 따라 두 개의 X 좌표와 교차하는 모든 항목을 다시 가져 오는 것입니다 (예 : LineString (START 1, END 2)).
이론은 소리처럼 보였으므로 기존 MySQL 기반 게놈 프로젝트에 적용하고 다음과 같은 테이블 구조를 생각해 냈습니다.
CREATE TABLE `spatial_feature` (
`spatial_feature_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`external_id` int(10) unsigned NOT NULL,
`external_type` int(3) unsigned NOT NULL,
`location` geometry NOT NULL,
PRIMARY KEY (`spatial_feature_id`),
SPATIAL KEY `sf_location_idx` (`location`)
) ENGINE=MyISAM;
external_id
이 테이블에 인코딩 한 엔터티의 식별자를 나타내며 external_type
소스를 인코딩합니다. 모든 것이 좋아 보였고 잘 작동하는 것처럼 보이는 예비 데이터 (30,000 행)를 밀어 넣었습니다. 이 수가 3 백만 행을 넘어서 증가했을 때 MySQL은 공간 인덱스 사용을 거부했으며 강제로 사용할 때 속도가 느려졌습니다 (전체 테이블 스캔을 사용하여 40 초 대 5 초). 더 많은 데이터가 추가되면 인덱스가 사용되기 시작했지만 성능 저하가 지속되었습니다. 인덱스를 강제로 끄면 쿼리가 8 초로 줄었습니다. 내가 사용하는 쿼리는 다음과 같습니다.
select count(*)
from spatial_feature
where MBRIntersects(GeomFromText('LineString(7420023 1, 7420023 1)'), location);
여기에 들어가는 데이터는 Y 차원을 따라 매우 밀도가 높습니다 (매우 긴 도로에서 모든 건물, 전화 함, 우편함 및 비둘기의 위치를 기록한 것처럼 생각하십시오). R-Index가 Java 에서이 데이터와 어떻게 작동하는지 테스트하고 현장의 다른 사람들이이를 플랫 파일 형식으로 성공적으로 적용했습니다. 그러나 아무도이 테스트의 목표 인 데이터베이스 AFAIK에 적용하지 않았습니다.
특정 축을 따라 별다른 차이가없는 공간 모델에 대량의 데이터를 추가 할 때 비슷한 동작을 본 사람이 있습니까? 좌표 사용을 반대로해도 문제가 지속됩니다. 그 원인이라면 다음 설정을 실행 중입니다.
- 맥 OS 10.6.6
- MySQL 5.1.46