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.
Il numero di query del database potrebbe davvero rovinare il server. Quindi suggerirei di indicizzare i dati (Local Solr) –
La funzionalità di base di PostGIS è un indice spaziale e query efficienti contro tale indice. – SingleNegationElimination