PHP: modo corretto di memorizzare IP in MySql e modo più veloce per la ricerca di IP in tutta milioni di righe

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

Domanda

Sto memorizzare indirizzi IPv4 in un "unsigned int" tipo colonna con inet_aton. [Sto facendo questo diritto? E sta usando "unsigned" necessario?] Questa particolare colonna è indicizzata pure. Dal momento che ci saranno milioni di righe e più righe che contengono lo stesso IP in tutta l'intera tabella quello che sarà il modo più veloce per la ricerca di queste righe?

.. o sono io che vado su questo il modo sbagliato?

È stato utile?

Soluzione

  

Sto facendo questo diritto? E sta usando   "Unsigned" necessario?

Sì. Senza unsigned indirizzi IP superiori non verranno memorizzati correttamente e utilizzando int (invece di varchar) lo memorizza in modo più efficiente.

  

quale sarà il modo più veloce per la ricerca   per queste righe?

Per quanto riguarda l'ottimizzazione di ricerca, che dipende da ciò che tutti si sta cercando (tabelle aggiuntive, ecc ...). In generale, l'indicizzazione una colonna int unsigned offre prestazioni veloci.

Altri suggerimenti

Uso della inet_aton è il modo giusto di fare questo, quindi non sei memorizzare informazioni prive di significato extra (nessun punto di essere in grado di memorizzare un maggior valore di 256 per ogni dato 3 numeri). Essa si traduce in un numero a 32 bit, che si inserisce nel unsigned int.

L'indicizzazione sulla colonna int renderà le ricerche di indirizzo IP rapida. Se il database diventa veramente grande, potrai iniziare incorrere in problemi di scala memorizzazione questo genere di cose in MySQL.

darò per scontato che non hai intenzione di farlo, ma voglio sottolineare che la memorizzazione di informazioni complete di registro per un grande sito occupato in un RDBMS è generalmente accettato di essere un male (tm). Non è necessario le proprietà di integrità relazionale le garanzie di database, e si scrive molte altre voci che hai letto. Considerate NoSQL, o aggiungendo al file flat, invece, l'analisi e il vostro log quando è necessario utilizzare un programma dedicato.

Sì, questo è il modo migliore per conservare gli indirizzi IP in MySQL.

Se si guarda la documentazione per inet_aton si può vedere che si consiglia di utilizzare una colonna di unsigned int o qualsiasi indirizzo IP con il primo octed oltre 127 non vengono memorizzate correttamente.

Questo è anche un modo molto veloce per fare ricerche. maniglie MySQL interi colonne molto bene, e indicizzando questa colonna e utilizzando inet_aton nella ricerca, è possibile ottenere le query molto veloci.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top