2010-10-17 13 views
5

Szukałem SO i nie znalazłem odpowiedzi na to, ale wydaje się, że jest to typowy problem.Skutecznie Szukaj Najbliższe lokalizacje geograficzne

Mam kilkaset tysięcy lokalizacji w bazie danych, z których każda ma geokodę (szerokość/długość). Jeśli ma to znaczenie, są one rozłożone w całych Stanach Zjednoczonych. Teraz mam aplikację kliencką, w której chcę, aby użytkownicy przekazywali mi swój numer/długość i promień (powiedzmy 5 mil, 10 mil, 25 mil), i chcę zwrócić wszystkie rekordy pasujące do siebie. Dbam jedynie o wartość odległości, którą można uzyskać za pomocą, powiedzmy, wzoru Haversine'a, a nie najkrótszej drogi. Jednak, biorąc pod uwagę to, chcę, aby była jak najbardziej dokładna.

Ta baza danych jest głównie przeznaczona tylko do odczytu. W dobrym dniu może być 10 wkładek. Teraz będę mieć setki klientów, może dziesiątki tysięcy klientów, którzy będą używać tego oprogramowania. Chcę, aby użytkownicy uzyskiwali wyniki w ciągu kilku sekund, ale jeśli pojedyncza kwerenda zajmuje 10-20 sekund, to będzie ona indeksować po trafieniu z obciążeniem klientów.

Jak najlepiej obsłużyć wyniki? Wiem, że mogłem przechowywać je w MySQL lub PostgreSQL (Oracle i MS SQL Server są do tego przeznaczone, ale niektóre inne dane open source mogą być w porządku) i po prostu umieścić formułę Haversine w tam, gdzie klauzula WHERE, ale nie sądzę, że przyniesie wydajne wyniki.

Odpowiedz

2

PostgreSQL obsługuje szeroki zakres zapytań geoprzestrzennych, o ile ma zainstalowane rozszerzenia PostGIS. Najłatwiejsze są przeszukiwanie najbliżej lub w promieniu lub w ramce ograniczającej.

+0

Liczba zapytań do bazy danych może naprawdę pobudzić serwer. Sugerowałbym indeksowanie danych (Local Solr). –

+0

Podstawową funkcjonalnością PostGIS jest indeks przestrzenny i wydajne zapytania względem tego indeksu. – SingleNegationElimination

1

Użyłem Solr (serwer wyszukiwania na bazie Lucene) do wyszukiwania promienia. Napisaliśmy portal właściwości, który pozwala użytkownikowi wyszukiwać właściwości w oparciu o promień.

Indeksujemy bazę danych, dzięki czemu wyszukiwanie będzie bardzo szybkie.

Powiązane problemy