2010-03-09 74 views
2

我需要在mySql數據庫中爲地址座標組織緩存。存儲地址的最佳做法是什麼?我是否需要壓縮地址字符串或按原樣使用它?組織地址緩存

編輯: 好吧,讓我們重申我的問題。 如果我將來需要精確地搜索此字符串,如何將長(最多512個)字符串存儲在數據庫中。

+0

你能澄清你在這種情況下「座標」是什麼意思? – 2010-03-09 10:40:29

+0

這對我的問題沒有意義。我只需要通過地址字符串進行快速搜索。 – 2010-03-09 10:45:33

回答

2

如果你是絕對某些搜索字符串進行標準化(如:剝離所有額外的空間,迫使小寫字母等),以避免歧義,並且您需要搜索完全匹配(即,您要麼找到完全正規化的字符串,也不需要通過子字符串,soundex,部分匹配,按排序等進行搜索。 - 這就是我如何閱讀你的「正好這個字符串」),你可以考慮計算字符串的哈希碼,把它放在數據庫中並編制索引。

如果您使用返回數字的散列碼函數,您將擁有非常高效的訪問索引。當然,您仍然可以保留用於打印和不同訪問方法的原始字符串字段。

可能存在的問題:儘管散列碼可以最大限度地減少散列衝突的可能性,但它們不能保證不發生,所以您也應該管理它。另外,除非你有很多很多的地址,否則我懷疑加速增益是否值得麻煩。

+0

哈希碼(如數字)是一個好主意。你只需要檢查結果來驗證這是相同的字符串(避免散列衝突) – 2010-03-09 12:12:36

1

MySQL能管理座標和這些值進行操作,嘗試尋找在http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html

如果你想要的東西簡單,personnaly我平時單獨存放的城市代碼,城市名稱和ADRESS字符串的其餘部分。然後,我可以在這些字段上進行索引和搜索(逐個或組合)。

如果你想要一個簡單的使用座標,你可以簡單地存儲緯度/經度和做基本的比較

+0

有趣的信息,但我需要一些簡單的東西。 – 2010-03-09 10:47:08

+0

我編輯了答案,但你的問題並不清楚 – 2010-03-09 10:52:28

0

答案可以發現here

+0

這與我的答案有何不同,究竟是什麼? – 2010-03-09 11:47:09