He heredado un código en el que alguien pensó que almacenar direcciones IP como 4 int era algo realmente bueno, excepto que pasaban todo el tiempo convirtiendo a/desde int.
Mantenerlas como cadenas en la base de datos fue mucho más fácil, y solo requería un índice único. Te sorprendería lo bien que el servidor SQL puede indexar cadenas en lugar de 4 columnas de números enteros. Pero esta lista de IP no era para listas negras. Una base de datos de ida y vuelta es bastante costosa.
Si una base de datos es exagerada, guárdelas en un diccionario en la memoria, pero eso es solo una suposición, ya que no tenemos idea de cuántas necesita comparar. Como la mayoría de los códigos hash son int de 32 bits, y las direcciones IPv4 son de 32 bits, la dirección IP en sí misma podría ser un buen hashcode.
Pero, como otros señalan, la mejor opción podría ser reducir la carga en su servidor y comprar hardware especializado. Tal vez conserve las IP de la lista negra en la memoria y periódicamente publique una nueva en el enrutador.
Si usted es el que está tratando de hacer algo de software dentro de un enrutador, entonces tendrá que pescar su libro de estructuras de datos y crear algo así como un b-tree.
es su lista negra un archivo, cargado en la memoria, en una base de datos, ¿qué? –
No importa dónde se encuentre la lista negra. Todavía sería comparado por la CPU. Pero si cree que debería mencionar esto en mi pregunta, por favor infórmeme sobre por qué la ubicación de la lista negra es importante. – MrValdez
@MrValdez: El tiempo para recuperar una lista negra del disco excedería por mucho el tiempo para convertir todas sus entradas de int a cadena o viceversa. – MSalters