PHP: Une bonne façon de stocker IP dans MySql et plus rapide pour rechercher IP à travers des millions de lignes

StackOverflow https://stackoverflow.com/questions/3980489

Question

Je stocker les adresses IPv4 dans un type de colonne "unsigned int" avec inet_aton. [Que je fais ce droit? Et utilise nécessaire?] « Non signé » Cette colonne particulière est indexée aussi bien. Comme il y aura des millions de lignes et plusieurs lignes contenant la même adresse IP à travers toute la table ce qui sera le meilleur moyen de rechercher ces lignes?

.. ou que je vais sur ce dans le mauvais sens?

Était-ce utile?

La solution

  

ce que je fais ce droit? Et utilise   nécessaire "non signé"?

Oui. Sans unsigned adresses IP plus élevées ne seront pas stockés correctement et en utilisant les magasins int (au lieu de varchar) le plus efficacement.

  

ce sera le meilleur moyen de recherche   pour ces lignes?

En ce qui concerne l'optimisation de la recherche, qui dépend de ce que tout ce que vous êtes à la recherche de (tables supplémentaires, etc ...). En général, l'indexation d'une colonne non signé int vous donne des performances rapides.

Autres conseils

Utilisation du inet_aton est la bonne façon de le faire, de sorte que vous ne stockez pas d'info supplémentaire dénuée de sens (pas de point d'être en mesure de stocker une plus grande valeur que 256 pour toutes les données 3 numéros). Il en résulte un nombre de 32 bits, ce qui s'inscrira dans le unsigned int.

L'indexation sur la colonne int fera par adresse IP lookups rapide. Si votre base de données devient vraiment grand, vous allez commencer à avoir des problèmes d'échelle stocker ce genre de choses dans MySQL.

Je suppose que vous n'allez pas faire cela, mais signalerai que le stockage d'information complète de journal pour un grand site occupé dans un SGBDR est généralement accepté d'être une mauvaise chose (tm). Vous n'avez pas besoin des propriétés d'intégrité relationnelles les garanties de base de données, et vous écrivez beaucoup plus d'entrées que vous lisez. Considérez NoSQL ou annexant à des fichiers plats à la place, et l'analyse de vos journaux, au besoin à l'aide d'un programme dédié.

Oui, c'est la meilleure façon de stocker les adresses IP dans MySQL.

Si vous regardez la documentation INET_ATON vous pouvez voir qu'il est recommandé d'utiliser une colonne INT ou UNSIGNED une adresse IP avec le premier octed sur 127 ne seront pas stockés correctement.

Ceci est aussi un moyen très rapide de faire des recherches. poignées de MySQL entières colonnes très bien, et en indexant cette colonne et en utilisant INET_ATON dans votre recherche, vous pouvez obtenir des requêtes très rapides.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top