2010-03-09 72 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