ya has dejado claro que no crees en que existan tantos emails filtrados
Cierto. Si el planeta tiene unos 9mil millones d epersonas, desquitamos niños pequeños abuelos demasiado mayores, algunos 'aculturales tecnológicos', ypaíses aún fuera tecnología y básicamente de internet (no será al 100%, pero quizás si al 80-90%) y somos generosos a pesar de todo, podríamos afirmar con quizás no mucho error que haya 7 mil millones de personas que tengan cuenta de correos.
Yo creo que normalmente la gente no usa más de 1 y que un muy pequeño porcentaje en cambio pueda tener incluso hasta 10 ó más, así que pongamos que es epequeño porcentaje equivale a la mitad de la población, luego subimos hasta unos 10 mil millones de cuentas.
No me parece que sean tantas... 10 mil millones de cuentas y si habláramos de por ejemplo 1 mil millones de cuentas al descubierto (asumiendo el doble del máximo que indicaba antes), creo que asumir un valor muy alto, pués supondría un 10% del total... de ser así, creo que lejos de hablar de filtraciones tendríamos que hablar de crisis de seguridad mundial (que tarde o temprano, habrá de declararse así, pero no creo que por causa de "cuentas de correos").
Tampoco, asumo que porque una cuenta haya sido filtrada, eso implique que sea accesible... quizás sí, durante un lapso de tiempo relativamente corto, seamos generosos y digamos que 1-7 días... (siempre que el alojamiento sea consciente de ello, por otro lado si no lo es, la lista no trascenderá al 'gran público) luego la gente o cambia la contraseña o directamente descarta ese correo (caso típico de no tener nada importante ni que merezca perder el tiempo con ello) y se abre otra cuenta. Por lo que muy probablemente de la listas filtradas a medida que pasa el tiempo, la mayoría queda inútil... podríamos hablar de fecha de caducidad para las cuentas al descubierto, es difícil pronosticar un tiempo, pero si un usuario tardara más de 1 mes en intentar recuperar su cuenta, imagino que la daría por perdida y se crearía otra...
Yo recuerdo años atrás que Google señaló que habían quedado expuestos y exigían a los usuarios cambiar contraseñas y revisar a conciencia la configuración. Yo lo hice al momento, así que aunque mi cuenta hubiera qwuedaod al descubierto, si no entraron al momento, no lo podrían hacer más adelante, luego que apareciera en la lista, podríamos tomarlo como 'falso positivo'... que supongo es como se inflan muchas listas.
Tampoco hay que olvidar esa cuentas que se crean al momento, o para determinados propósitos y que luego ya no se usan ni contienen nada de valor, quiero decir con ello, que nadie se molestará en cambiar la contraseña ni nada... engrosan la lista, pero son pura paja. Un nutrido porcentaje de todo ello, podría encajar en esta situación.
creo que nunca has intentado cargar una página con una lista de texto plano extremadamente larga de varios cientos de miles o millones de lineas de texto, por que los problemas son más que evidentes.
Claro que si, hombre...
Es imprudente cargarlo todo a la vez, pero a veces para probar rendimientos, me veo obligado a forzar situaciones inesperadas y cargar varios GB. en memoria es parte de esas pruebas.
De todos modos, el uso racional de un fichero de varios GB. no es intentar leerlo de una tacada y cargarlo todo de una vez en memoria...
Los ficheros gigantes deben ser procesados con una mínima inteligencia, por ejemplo para ordenarlo, es absurdo cargarlo todo en memoria... para 1.500 milllones de cuentas de correros hablamos de unos 55Gb. (más abajo te hago unas cuentas rápidas y generosas).
De hecho incluso es absurdo ordenarlo. Es preferible crear una tabla hash, usaremos espacio adicional (pero vamos si la tarea es importante, dedicar un disco de 1-2 TB. al asunto, sería conforme), y puestos a ordenarlo, lo adecuado es primero crear x ficheros, como máximo 255 ficheros (no se usarán todos)... ir tomando de la lista una cantidad en un buffer que admita bien la memoria del equipo analizar (ni hace falta saturarla) el 1 caracter del correo, y si es por ejemplo "Antonio
Vazquez@gmail.com", se guarda en el fichero llamado A.txt, los que empiecen con B. en B.txt, etc... al final tendremos un fichero con cada carácter inicial que aparezca... así hemos desglosado los 55Gb. en menos de 255ficheros, mejor si además cada uno está en una carpeta del mismo nombre... ahora toca reordenar cada fichero individual del mismo modo... en algún punto cada fichero es lo suficientemente manejable y puede cargarse en memoria y ordenarse por completo, sabiendo que el contenido del siguiente fichero viene completamente detrás, etc...
Pero vamos este es un proceso trabajoso y tonto, para ordenar el fichero.
Ya aclaré más arriba que con una tabla hash se simplifica la operatoria... aunque tampoco sobra una separación en ficheros (si se decide trabajar con ficheros en texto plano) por inicial, por dominio o por longitud de caracteres...
Leer en búferes de tamaño 2^n, se carga muy bien e instantáneo algo como 1-32Mb. en memoria... ir calculando un hash para cada correo, fijado a un índice entre 0 y 60 mil millones si se espera que la lista crezca y no haya muchas colisiones (tendremos un promedio de ocupación de 1 por cada 40 huecos), y guardando así el índice que ocupa en el fichero (supuesto 1 único fichero con todos) en la casilla cuyo indice nos señala el hash, listo...
Crear la tabla con 1500 millones llevará su tiempito y ocupara sus Gb. (usando un int64, pués 64 bytes por cada correo, luego) unos 88Gb. y más si decidimos incluir datos adicionales.
Sería más conforme crear una base de datos con una estructura adecuada que clasificara bien los correos, y también porque dispone ya de métodos 'built-in' de filtrado y búsqueda los que podríamos añadir nuestros propios métodos específicos si fuera preciso...
Cálculo rápido y generosos de la ocuapción en texto plano de los datos de 1500 millones de cuentas de correo y sus contraseñas::
Partamos del hecho que la gente es vaga por naturaleza (incluso los que dicen ser muy trabajadores), entonces los correos electrónicos típicos pueden ser en la forma:
Teresa.Fernandez.De.LA.Vera@unejemplo.com (dela Vera, no de la Vega, no se sienta la señora aludida)
Es largo a propósito, suelen ser más cortos igual que las de hospedaje, pero contemos caracteres: 41 caracteres... redondeemos a 40 caracteres, multipliquémoslo por 1.500 millones = 60.000 millones de caracteres/bytes, ahora traduzcámoslo a MB.
60.000.000.000 / 1.048.576 = 57.220MB. unos 55Gb.
Las contraseñas en cambio ni de lejos van a ser tan largas como 40 caracteres, ya se sufre para que alcancen los 16... yo pondría ese valor como promedio, incluso aunque no lo alcance, es decir 2'5 veces menor que el tamaño de la dirección del correo, luego también de su tamaño en disco, es decir otros: 22Gb.
Total redondenado nos vamos a 80Gb. (después de todo hay que añadir un salto de línea entre cada uno, para separarlos, sumando pués 1-2 caracteres más por cada, pero vamos ya fuimos generosos con el tamaño del correo y de la contraseña).
de elimiación de duplicados, y también por un sistema de verificación online de cuentas falsas/existentes, quedan alrededor de 1,5 billones de cuentas supuestamente "válidas".
Ehhh.... billones. A veces no hago caso de la palabra billones por ser una mala traducción del inglés, porque en español, un billón es un millón de millones... que algunos se empeñan en querer lammar 'billardos'.
hagamos cuentas: 1.500.000.000.000.000 /7.000.000.000 hab. en planeta con cuentas = tocamos cada habitante del planeta con correo electrónico a la friolera de 214.285 cuentas... creo que ni abriendo una cuenta cada hora daría una vida para tener todas esas cuentas a tu nombre. Veamos:
90 años, vida útil de los 15-80= 65 años... * 365días por año * 24horas * día = 569.400, pués si...
En aproximadamente 30 años abriendo una cuenta cada hora, podríamos tener ese número de cuentas, pero tendríamos que haber empezado todos a crear cuentas en 1988, cuando Internet estaba todavía en la DARPA.... y ningúno cejar en el empeño decrar una cuenta cada hora...
y seguir usándolas todas con ffecuencia suficiente para que el hospedaje no la elimine por falta de uso...
En fin, bromas aparte, supongo que quieres decir 1.500 millones , que es una cifra que triplica mi previsión máxima, y que supongo que si es la lista que tu tienes, no es completa, por lo que sin duda debe ser más grande... en fin se acerca a 1/4, 1/3 de los totales del planeta... se me hace imposible de creer.
OJO: No digo que a lo largo de la historia se haya acumulado esa cifra... 25 años dan para mucho, pero no creo que sean cuentas útiles más que aquellas descubiertas en el último año, siendo generosos...
Otra duda que se me supera es como validar 1500 millones de cuentas cuando dices: "sistema de verificación online de cuentas falsas/existentes", quero decir que no entiendo si 'han sido validadas por quien posee la lista, o por tí, y tampoco sé que tiempo pueda llevar hacer esa validación, pero desde luego es mucho más considerable que hacer un filtro como el que exponía al comienzo de mi intervención.... considerablemente mayor, sin ningún género de dudas. Pero doy en suponer que se han ido validando poco a poco, a medida que han sido 'filtradas-obtenidas'. Así que tampoco le doy más importancia a esto, aunque es a considerar cuando se filtra una lista de no se cuantos millones de cuentas, no de 20.000 cuentas.
Aunque queden al descubierto por ejemplo de repente 50 millones de cuentas, quien puede revisar en un corto plazo de tiempo 50 millones de cuentas para determinar que tienen o no contenido interesante... el mismo intento de acceso continuado procedente de una misma IP... revelaría sin duda, que se trata de un intruso... cuantas cuentas puede mirar un intruso por unidad de tiempo?. Por otro lado, a veces damos por hecho que las grandes ciorporaciones tienen sistemas de seguridad que al final, en realidad jamás han tenido.
Al final cuando pase el tiempo, apenas unos meses, las cuentas que no hayan sido restauradas a su usuario con una nueva contraseña, y sigan siendo accesibles, es porque carecen de utilidad, tenían basura y su propietario, ni se molestó en dicha cuenta.... Por eso creo que las listas pueden ser 'utiles' solo en un corto plazo de tiempo, la acumulación de listas es inútil tras varios meses o un máximo de un año, la lista es completamente inútil... ahora sirve para seguir inflando la lista de cuentas filtradas pero para nada más.
Tu eres el que has propuesto que ocurra esa carga de datos para mostrarte en pantalla absolutamente todos los resultados, para que el sistema te permita ir usando "filtros" hasta reducir dichos resultados a una cantidad de e-mails que tu consideres adecuada (unos 750 mails) para analizarlo.
No, hombre no... Yo no he propuesto la carga de miles de millones de cuentas... He propuesto filtrado, sí pero esto no exige exige carga masiva, salvo un mal diseño.
Una base de datos bien diseñada para el propósito específico (al caso que versa), solo tiene carga de trabajo cuando añade los emails, porque debe 'clasificarlos', pero una vez hecho, no precisa tanta carga.
Por ejemplo si tienes tablas específicas (imagina) para alojar los emails de (hostings masivos de forma individual) 'hotmail.com', y tu has fijado Hotmail, ya no tienes ni que tocar el resto de tablas, has filtrado sin tocar ni cargar una inmensidad de datos... incluso operando ficheros de texto, como te señalaba más arriba, es posible algún filtrado aunque más tosco.
Con una adecuada clasificación, gran parte del filtrado (especialmente el primario) se produce sin afectar para nada la carga de datos, tan solo reduce el espacio de trabajo, direcciones que se quedan fuera... Al final lo lógico es que solo te traigas unos pocos miles de registros a lo sumo... y aun así los retieens en memoria, no los vuelcas a la interfaz sino cuando se solicite su presencia...