2010-10-17 15 views
5

Ho cercato su SO e non ho trovato una risposta, ma sembra un problema comune.Cerca in modo efficiente nelle posizioni geografiche più vicine

Ho diverse centinaia di migliaia di posizioni in un database, ognuna con il geocode (lat/long). Se è importante, sono distribuiti negli Stati Uniti. Ora ho un'app client in cui voglio che gli utenti mi diano il loro lat/long e un raggio (diciamo 5mi, 10mi, 25mi, ecc.) E voglio restituire tutto record che corrispondono. Mi interessa solo il valore della distanza che si può ottenere tramite, per esempio, la formula di Haversine, non la distanza stradale più corta. Tuttavia, dato che, voglio che sia il più preciso possibile.

Questo database è principalmente di sola lettura. In una buona giornata, potrebbero esserci 10 inserti. Ora avrò centinaia di clienti, forse decine di migliaia di clienti che useranno il software. Voglio che gli utenti ottengano risultati in pochi secondi, ma se una singola query impiega 10-20 secondi, verrà sottoposta a scansione quando viene colpita da un carico di client.

Come posso offrire i risultati nel modo più efficiente possibile? So che potrei semplicemente memorizzarli in MySQL o PostgreSQL (Oracle e MS SQL Server sono fuori per questo, ma qualche altro archivio di dati open source può andare bene) e basta inserire la formula di Haversine nella clausola WHERE ma non penso che sta per dare risultati efficienti.

risposta

2

PostgreSQL supporta una vasta gamma di query geospaziali, a condizione che siano installate le estensioni . Le ricerche del raggio più vicino o del raggio o del riquadro di selezione sono particolarmente facili.

+0

Il numero di query del database potrebbe davvero rovinare il server. Quindi suggerirei di indicizzare i dati (Local Solr) –

+0

La funzionalità di base di PostGIS è un indice spaziale e query efficienti contro tale indice. – SingleNegationElimination

1

Ho utilizzato Solr (server di ricerca basato su Lucene) per la ricerca del raggio. Abbiamo scritto un portale di proprietà che consente all'utente di cercare le proprietà in base al raggio.

Indichiamo il database, quindi la ricerca sarà ultra veloce.

Problemi correlati