2010-10-17 106 views
5

我在SO上搜索並沒有真正找到答案,但它似乎是一個普遍的問題。高效搜索最近的地理位置

我在數據庫中有幾十萬個位置,每個位置都有地理編碼(lat/long)。如果它很重要,它們遍佈美國。現在,我有一個客戶端應用程序,我希望用戶給我他們的經緯度和半徑(比如說5米,10米,25米等),並且我想要返回所有的記錄匹配。我只關心可以通過例如Haversine公式獲得的距離值,而不是最短的道路距離。但是,鑑於此,我希望它儘可能準確。

此數據庫大部分是隻讀的。在美好的一天,可能會有10個插入。現在,我將擁有數百個客戶端,可能會有數以萬計的客戶使用該軟件。我希望用戶能夠在幾秒鐘內獲得結果,但如果單個查詢需要10-20秒,那麼當用戶加載時,它會抓取。

如何儘可能有效地提供結果?我知道我可以將它們存儲在MySQL或PostgreSQL中(Oracle和MS SQL Server出於此目的,但其他一些開源數據存儲可能沒問題),並將Haversine公式放在WHERE子句中,但我不認爲將產生有效的結果。

回答

2

PostgreSQL支持廣泛的地理空間查詢,只要安裝了PostGIS擴展。最近或半徑或邊界框搜索特別容易。

+0

數據庫查詢的數量可能真的砸了服務器。因此,我會建議索引數據(本地Solr) – 2010-12-15 02:43:46

+0

PostGIS的核心功能是一個空間索引,並對該索引進行高效的查詢。 – SingleNegationElimination 2010-12-15 03:36:45

1

我已經使用Solr(基於Lucene的搜索服務器)進行半徑搜索。我們編寫了一個屬性門戶,讓用戶可以根據半徑搜索屬性。

我們對數據庫編制索引,因此搜索速度會非常快。