2013-09-01 42 views
0

如果我是在MySQL數據庫設計以下規格:在25mil記錄設計一個快速查找地址數據庫

2)的門牌號,街道,鎮,市列

1)郵政編碼

3)街道,鎮,市,郵政編碼必須是全文搜索的(在前端側,搜索將在AJAX運行了與直接下拉結果中的文字輸入字段)

我會如何設計上述?

我在想用一張桌子工作 - 這是一個壞主意嗎?由於這是地址數據,我不確定是否要在不同的表格之間進行規範化。我也在想,如果使用單個表格,我會在可搜索字段中執行FULLTEXT索引。

我以前沒有用過這麼大的數據庫。以上是一個壞主意嗎?


更新#1:

決定正常化街道和郵編列,這實際上是被搜索上唯一的(重新檢查原始規範)。街道名稱有一些快速的數學和基數是2%,後編碼數據集的6%,所以我認爲這是最好的前進方向。

當前正在運行2900萬行的導入 - 大約需要5個小時。爲了完成這個問題,稍後會在性能測試中再次更新。

回答

0

您的設計聽起來很合理。但。你確定數據庫中的地址都符合「,」格式嗎?關於「c/o」地址(「care/of」)呢?單位/公寓/樓層/套房號碼?特定的建築名稱(「華盛頓白宮奧巴馬」)呢?

在美國,這種地址佈局有各種例外情況。例如,有一種叫做「鄉村路線」的東西,其格式是「RR BOX」(描述爲here)。有郵政信箱和軍事地址。事實上,我剛剛瞭解到美國郵政局有一份描述各種不同地址格式的出版物(here)。

更一般的形式類似於「地址線1」,「地址線2」,「城市」,「郵政編碼」。有許多服務可以爲世界上的大部分地區實現地址標準化,甚至還有可用於此目的的軟件。

使用全文搜索的想法是個好主意。例如,在街道名稱上尋找部分匹配時,速度會更快。

+0

感謝您的反饋。如果你覺得值得一試,那麼我會放棄它。我對這些古怪的地址並不那麼困擾 - 我最關心的是查找的速度,因爲它需要近乎實時地發生(響應輸入字段中輸入的字符)。我不想花時間導入數據並創建索引,但沒有指出在單表和FULLTEXT設計中性能是否足夠。 –

+0

@RC。 。 。讓我說。這是合理的,值得嘗試。 *但是*對於2500萬個地址的實時響應,您可能需要更多自定義代碼。例如,谷歌會做一些相當複雜的事情來支持其實時查詢建議。 –