2011-09-27 6 views
0

사이트에 하루에 20 만 명의 고유 사용자가 있다고 가정 해 보겠습니다. 따라서 서버가 과부하/두려워합니다. 당신은 더 크고/더 나은 서버를 살 자원을 가지고 있지 않습니다. 그래서, 당신은 당신이 가지고있는 것들로 붙어 있습니다.XML 검색 또는 DB 검색/자바 스크립트 (클라이언트 측) 또는 PHP (서버 측) 계산

이제 사용자가 사이트를 방문 할 때마다 GeoIP를 통해 감지 된 사용자 도시와 일부 도시 허용 사이트 사이의 거리를 계산해야합니다 (반경 140 마일 이내의 가장 가까운 도시를 찾습니다).

이 계산은 PHP 또는 JavaScript를 통해 수행 하시겠습니까?

처음으로, 허용 목록에있는 도시의 반경 140 마일 이내에있는 모든 인근 도시를 사전 계산 하시겠습니까? 예 : 허용 된 도시 1에는 20 개의 인근 도시가있을 수 있습니다. 또는 매번 계산을 수행 하시겠습니까?

예를 들어

: 허용 목록 = 디트로이트, MI 인근 도시 = 캘러 머주, MI (1백40마일)

둘째, 미리 계산 된 경우 : 당신은 XML에 파일 또는 일부 을이를 저장하는 것 MySQL 테이블? 이제 테이블 (mysql 또는 xml은 1MB 이하)을 검색해야합니다. 클라이언트 브라우저 (JavaScript)가 1MB xml을 다운로드하고 검색해야하므로 비효율적이라고 생각합니다. 이렇게하면 페이지로드 시간이 더 느려집니다. DB를 사용하면 더 빠를 수 있지만 DB로드가 증가합니다 (200,000 명의 고유 사용자가 하루 동안 페이지를로드하려고하는 경우).

어쩌면 할 수있는 가장 좋은 방법은 XML을 통해 검색하고 사용자에게 가장 가까운 허용 한 도시를 찾기 위해 XML에 미리 계산, 가게 미리 계산 결과를 수행하고 PHP을 사용하는 것입니다?

답변

0

사이트에서 실제로 도시 정보를 사용하는 경우 서버에서 계산을 수행해야합니다.

데이터베이스 쿼리는 대개 충분히 큰 XML 파일에 대한 XML 검색보다 빠릅니다. 당신은 쿼리를 최적화 할 수 있고, MySQL은 캐시 할 것입니다.

모든 도시 - 도시 거리를 미리 계산하는 것은 확실한 방법입니다. GeoIP은 도시 이름을 제공 할뿐만 아니라 실제 위도/경도 위치도 제공합니다. 나는 도시의 가능한 목록이 오히려 끊임없이 변할 것이라고 확신한다.

나는 MySQL의 지리 공간적 기능을 살펴볼 것이다. 여기 좌표로 검색하는 일반 이상보기 : 당신이 할 것입니다 것은

한마디로

Fastest Way to Find Distance Between Two Lat/Long Points

설정이 자신의 위도/경도로, 관심있는 도시의 데이터베이스이며, 제공되는 GeoIP가에 따라 그 테이블을 쿼리 위도/경도.

+0

"간단히 말해서 위도/경도로 관심있는 도시의 데이터베이스를 설정하고 GeoIP를 기반으로하는 테이블에 위도/경도를 제공하는 쿼리가 있습니다."--- 그렇다면 이 정보는 실제로 사전 계산됩니까? 도시의 화이트리스트는 실제로 자주 변경되지 않습니다. –

+0

보유하고있는 도시 목록 및 위치 정보는 자주 변경되지 않지만 GeoIP이 클라이언트 위치 정보로 다시 전송할 위치를 알고 있습니다. 또는 모든 클라이언트 위치를 일부 목록으로 정규화하고 싶습니까? –

+0

글쎄, 내말은. 이미 화이트리스트 (약 100 개 도시)가 있습니다. 또한 두 번째 목록을 사전 계산하면 더 쉽지 않을까요? 허용 된 각 도시마다 140 마일 반경 내에있는 모든 도시를 미리 계산할 수 있습니다. 예 : 디트로이트, 미시건 (화이트리스트 도시)의 경우, "랜싱, 미시건"을 미리 계산할 수 있습니다. 클라이언트가 Lansing, MI에서 오는 경우에 따라서. 나는 디트로이트, MI 목록을 보여준다. /// 아니면 위도/경도의 도시를 단순하게 저장하는 것이 낫다고 생각하십니까? 그리고 사용자가 내 사이트를 방문 할 때마다 (즉, 미리 계산하는 대신) 즉석 계산을 수행합니까? –

관련 문제