0

如果我要在 MySQL 中按照以下规范设计数据库:

1) 超过 2500 万条记录

2) 门牌号、街道、城镇、城市、邮政编码列

3) 街道、城镇、城市和邮政编码需要全文搜索(在前端,搜索将在 AJAX 上运行,文本输入字段立即出现下拉结果)

我将如何设计上述内容?

我在考虑使用一张桌子 - 这是一个坏主意吗?鉴于这是地址数据,我不确定是否要跨不同的表进行规范化。我还在想,如果使用单个表,我会在可搜索字段中创建一个 FULLTEXT 索引。

我以前没有使用过这么大的数据库。以上是个坏主意吗?


更新#1:

决定对街道和邮政编码列进行规范化,这些列是实际搜索的唯一列(重新检查了原始规范)。做了一些快速的数学运算,街道名称的基数是总数据集的 2% 和邮政编码的 6%,所以我认为这是最好的前进方式。

目前运行 2900 万行的导入 - 大约需要 5 个小时。为了结束这个问题,稍后将在性能测试中再次更新。

4

1 回答 1

0

你的设计听起来很合理。但。您确定数据库中的地址都符合“,,”格式吗?“c/o”地址(“care/of”)呢?单元/公寓/楼层/套房号?具体的建筑物名称(“巴拉克奥巴马,白宫,华盛顿特区”)呢?

在美国,这种地址布局有多种例外情况。例如,有一种叫做“乡村路线”的东西,其格式是“RR BOX”(描述here)。有邮政信箱和军事地址。事实上,我刚刚了解到美国邮政局有一份出版物描述了各种不同的地址格式(这里)。

更通用的形式是“Address Line 1”、“Address Line 2”、“City”、“Post Code”。有一些服务可以将世界大部分地区的地址标准化,甚至还有用于此目的的软件。

您使用全文搜索的想法是个好主意。例如,在查找街道名称的部分匹配时,它会快得多。

于 2013-09-01T15:42:46.473 回答