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.
Liczba zapytań do bazy danych może naprawdę pobudzić serwer. Sugerowałbym indeksowanie danych (Local Solr). –
Podstawową funkcjonalnością PostGIS jest indeks przestrzenny i wydajne zapytania względem tego indeksu. – SingleNegationElimination