2010-03-09 3 views
2

Je dois organiser le cache dans la base de données mySql pour les coordonnées d'adresse. Quelle est la meilleure pratique pour stocker l'adresse? Ai-je besoin de compresser la chaîne d'adresse ou de l'utiliser telle quelle?Organiser le cache d'adresse

éditer: Ok, permettez-moi de réaffirmer ma question. Comment stocker une longue chaîne (jusqu'à 512) dans la base de données si j'ai besoin de rechercher exactement cette chaîne à l'avenir.

+0

Pouvez-vous préciser ce que vous entendez par « coordonnées » dans ce contexte? –

+0

Cela n'a aucun sens pour ma question. Tout ce dont j'ai besoin est une recherche rapide par chaîne d'adresse. –

Répondre

2

Si vous êtes absolument certain que votre chaîne de recherche peut être normalisée (par exemple: en éliminant tous les espaces supplémentaires, ce qui oblige minuscules etc.) afin d'éviter toute ambiguïté et que vous ayez besoin de rechercher une correspondance complète (ie vous trouvez exactement la chaîne normalisée ou non, et n'avez pas besoin de chercher par sous-chaîne, soundex, correspondance partielle, trier par etc. - C'est ainsi que je lis votre "par exactement cette chaîne") que vous pourriez envisager de calculer le hashcode de la chaîne, le mettre dans la BD et l'indexer.

Si vous utilisez une fonction de hachage qui renvoie un nombre, vous aurez un index d'accès très efficace. Et bien sûr, vous pouvez toujours conserver le champ de chaîne d'origine pour l'impression et différentes approches d'accès.

Problèmes possibles: bien que le hashcode puisse minimiser le risque de collision par hachage, il ne peut pas être garanti que cela ne se produise pas, donc vous devriez gérer cela aussi. De plus, sauf si vous avez beaucoup, beaucoup d'adresses, je doute que le gain d'accélération en vaille la peine.

+0

le code de hachage (en nombre) est une excellente idée. Vous aurez juste à vérifier les résultats pour vérifier que c'est la même chaîne (éviter la collision de hachage) –

1

MySql peut gérer les coordonnées et fonctionne sur ces valeurs, essayez de regarder http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html

Si vous voulez quelque chose de plus simple, personnellement je stocke habituellement séparément le code de la ville, le nom de la ville et le reste de la chaîne adresse. Ensuite, je peux indexer et rechercher sur ces champs (un par un, ou avec une combinaison).

Si vous voulez une utilisation simple de coordonnées, vous pouvez simplement stocker la latitude/longitude et faire des comparaisons de base

+0

Des infos intéressantes mais j'ai besoin de quelque chose de simple. –

+0

J'ai modifié la réponse, mais votre question n'est pas si claire –

0

réponse se trouve here

+0

Et cela diffère de ma réponse dans quoi, exactement? –