一、數據庫內在支持GIS(地理信息系統)
MySQL: 目前只有MyISAM引擎是支持GIS的,Innodb在5.7版本中才支持空間索引。MyISAM這個引擎
不支持事務、外鍵,並且是表鎖。適合讀爲主,不適合寫操做。並且若是單獨建一張表的話,那每次都要與
現有的表聯合查詢返回tag的地點,效率多少會有些影響,並且也不肯定Django是否支持Innodb與myISAM
引擎聯合查詢。(目前用的Innodb引擎)
其它數據庫:MongoDB和postgresql都是支持GIS的,前者沒有仔細研究,後者在GIS方面很強大,
但目前還不考慮切換數據庫。mysql
二、第三方app或框架
GeoDjango:它是一個支持GIS存儲和查詢的Django衍生項目。不過這個框架過重了,內容太多,簡單
熟悉了一下,它的功能仍是很強大的。但在數據庫層,它也是須要數據庫支持GIS的。
數據庫全文檢索:用的比較多的是lucene和sphinx工具,熟悉這兩個工具的時間成本過高了,並且從性能
上來講和本身用mysql查詢差很少。sql
三、本身開發
考慮有兩種方案,
(1) 數據庫保存地點的經緯度,查找附近的地點時,用球面兩點間距離公式計算並排序。
爲了提升效率,還能夠將其保存成存儲過程。
(2)將經緯度轉爲一維數據geohash,這樣能夠在geohash上用加索引,並且用like語句
可實現查詢。不過要至少調用6條like語句,並且不能實現任意距離的搜索,只能搜索幾個距離
範圍內的地點。數據庫
目前,公司負責開發的產品需求並不須要精確搜索,從時間成本、性能兩方面考察這些方案,最好的兩個方案是
比較合適的。最終選定geohash方案app