2012-03-05 5 views
1

작은 웹 응용 프로그램에서 작업하면서 사용자 세부 정보가 현재 위치의 위도와 경도와 함께 저장되는 사용자 테이블이 있습니다.데이터를 데이터베이스에 입력하자마자 즉석에서 거리를 계산 하시겠습니까?

새 사용자가 등록하면 현재 사용자가있는 모든 사용자의 거리가 표시됩니다.

나는 haversine 공식을 사용하여이를 수행하고 있습니다.

내 문제는 어떻게 진행하나요? 어떻게해야할까요? 또는 사용자가 등록하고 저장할 때 모든 사용자 거리를 계산해야합니까?

정렬을 고려해야합니다. 즉, 최단 거리를 먼저 처리해야합니다.

답변

1

사용자 수가 매우 많거나 제한이없는 경우 문제가 발생할 수 있습니다.

이 계산은 꽤 많은 저장 공간이 필요할 수 있습니다. 그러나 요청시 계산시 많은 양의 서버 CPU 시간이 필요할 수 있습니다.

몇 가지 고려 사항 :

  1. 사용 MySQL은 지리적 정렬을 수행합니다. http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL

  2. 다른 사용자의 작은 하위 집합에 대해서만 거리를 계산하는 것을 고려하십시오.

  3. 자바 스크립트를 사용하여 클라이언트 컴퓨터에서 거리를 동적으로 계산할 경우의 이점을 고려하십시오.

+0

당신이 내가 할 수있는 튜토리얼이나 뭔가를 가르쳐 주시겠습니까? – Parvesh

+0

다른 의견은 다를 수 있지만 jQuery는 아마도 자바 스크립트를 쉽게 작성하기위한 기본 표준 일 것입니다. http://docs.jquery.com/Tutorials. jQuery를 사용하면 페이지를 비동기 적으로 호출하여 다른 사용자의 좌표를 검색 한 다음 결과에서 거리를 계산하고 표시 할 수 있습니다. 모든 처리는 브라우저에서 수행됩니다. – Synesso

0

다른 답변과 마찬가지로 지리 데이터베이스를 사용해야합니다.

나누기지도를 큰 rectanglar 그리드 (예를 들어, 10km X 10km 격자)로 :

당신이 스스로를 구현하려면

이 그 데이터베이스가 내부적으로 어떻게입니다. 각 사용자에 대해 그가 속한 그리드를 나타내는 열을 추가하십시오. 모든 사용자를 검색하는 대신 해당 특정 그리드와 이웃 한 8 그리드를 검색 할 수 있습니다 ..

1

모든 사용자 사이에 모든 거리를 저장하는 경우 등록 당시의 사용자라면 사용자 100 명, 데이터 5,000 개에 이르는 대량의 데이터를 매우 신속하게 저장하게 될 것입니다. 1000 명의 사용자는 ~ 500,000 (각각에 대해 관련 계산이 필요함) - 사용자가 위치를 변경하면 해당 데이터가 즉시 중복되어 모든 사용자에 대해 다시 계산해야합니다. 다시 한 번 말하면 많은 사용자들에게는 엄청난 시간 문제입니다.

당신은 아마이 즉석에서 일을 더 나을 것 - 이러한 확장을 사용하여

아주 간단한 예를 (http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html 참조) MySQL은 당신이 위치 기반 검색을 최적화하는 사용할 수있다 공간 확장을 제공 할 수 http://maisonbisson.com/blog/post/12147/working-with-spatial-data-in-mysql/에서 찾을 수 있습니다 - 더 복잡한 예제는 반경 r 내의 모든 점을 반환 할 수 있어야합니다.

다른 사람이 Javascript를 사용하여 클라이언트 측에서이를 계산하는 것에 대해 언급했습니다.확실히 가능성은 있지만 사용자가 많으면 10,000 개가됩니다. 먼저 모든 데이터를 클라이언트로 전송해야합니다 (HTTP 페치에 지연이 있음). 그런 다음 해당 데이터가 합리적으로 강력한 것으로 가정합니다. 계산을 실행하는 CPU (누군가가 오래된 스마트 폰에서 내 사이트를보고 있다면 어떨까요?). 프로세스가 실행되는 동안 몇 초 동안 브라우저가 멈출 수 있습니다.

관련 문제