나는 인터뷰 테스트에서 이것을 물었다. 나는 시험에서 괜찮 았지만이 질문에 대답하기에 충분하지 못했습니다. 데이터를 빠르게 쿼리하는 데 사용할 수있는 데이터 구조를 알고 싶습니다.
기본적으로 아이디어는 어떤 종류의 데이터 구조에 저장된 도로 섹션 (선으로 구성된 점)이 있다는 것입니다. 어떤 도로 구간 (또는 지점)이 특정 지점 (반경)과 일정 거리 내에 있는지 신속하게 쿼리해야합니다.
나는 인터뷰 테스트에서 이것을 물었다. 나는 시험에서 괜찮 았지만이 질문에 대답하기에 충분하지 못했습니다. 데이터를 빠르게 쿼리하는 데 사용할 수있는 데이터 구조를 알고 싶습니다.
기본적으로 아이디어는 어떤 종류의 데이터 구조에 저장된 도로 섹션 (선으로 구성된 점)이 있다는 것입니다. 어떤 도로 구간 (또는 지점)이 특정 지점 (반경)과 일정 거리 내에 있는지 신속하게 쿼리해야합니다.
답변:
지리 데이터를 저장하는 일반적인 방법은 R- 트리 (또는 R + 트리, R * 트리 등과 같은 일부 변형)와 같은 공간 데이터 구조를 사용하는 것입니다. 이는 지리 데이터 유형이 일반적으로 GIS 가능 RDBMS. (Microsoft의 SQL Server 2008과 PostGIS는 지리적 유형에 대해 R- 트리를 사용한다는 것을 알고 있습니다.) 설명 된 모든 기본 요구 사항을 충족하며 교차, 위치, 거리 및 기타 쿼리 유형을 명확하게 지원합니다.
데이터 유형에 따라 kD- 트리, 쿼드-트리, 옥트리, 경계 볼륨 계층 구조 (축 정렬 경계 상자 트리 포함) 등과 같은 항목이 일반적으로 사용될 수도 있습니다. 객체의 크기와 모양이 교차 쿼리와 더 관련이 있기 때문에 이것은 실제로 3D 게임에서 훨씬 일반적입니다. R- 트리보다 GIS에 덜 자주 사용됩니다.
맵 데이터에 대한 다른 종류의 작업은 최적의 결과를 위해 다른 스토리지 형식이 필요합니다. 예를 들어 다음 세 가지 작업을 고려하십시오.
요구 사항의 차이는 맵에 대한 "실시간"변경 사항을 수용 할 필요가 없다면, 세 가지 별도의 데이터 사본 (위의 작업 중 하나에 각각 최적화 된)을 저장하는 것이 시도하는 것보다 더 나을 것입니다. 세 가지 작업을 모두 잘 처리 할 수있는 형식을 생각해 냈습니다.