[IRC-DEV] Lista de Watch en bbdd

Ruben Cardenal rubenc at arrakis.es
Thu May 23 13:22:18 CEST 2002


  Hola,

RoMaNSoFt wrote:

>Hace un par de días realicé la propuesta por la cual la lista de
>Watch podría estar en bbdd:
>
    Creo que es innecesario, y un suicidio a corto plazo. La gente lleva 
(llevamos) muchos años con el notify en el cliente, no en el servidor, y 
sin problemas. Si quieres tener tu notify disponible, cuelgátelo en 
alguna web y te lo bajas desde donde sea o, como diría otro, te apuntas 
la lista en el móvil, que los 20 nicks que propones (yo tengo más de 
100) caben en un mensaje de texto guardado en cualquier móvil :P Además, 
las cuentas que has hecho son incorrectas. Hagámoslas en serio...

    En la BDD no guardas las cosas tan a la ligera. Tienes que crear una 
entrada para cada nick, y, en esa entrada,poner los valores. El tamaño 
mínimo de la entrada es de 16 bytes suponiendo que hablamos de un nick 
de una letra que pone en el notify a un nick de una letra tambien 
sólamente. Como esto lo has querido calcular para los peores casos, 
supongamos que el nick de la persona tiene 9 caracteres, y mete en el 
notify a 20 personas. Teniendo en cuenta que hay que usar un separador 
entre los nicks, que puede ser un espacio o un coma, eso hace que, por 
cada nick, nos comamos un byte mas. Entonces, 20 personas, a 9+1 bytes, 
por cabeza, son 200 bytes. A eso súmale que, en disco, una entrada de la 
tabla 'w' (de watch) seria:

  000000011 * w nick nick1,nick2,nick3

  Si te fijas, ahi te comes 9 bytes del numeric, 1 byte del "*", un byte 
del "w" y 4 bytes en espacios, por lo que, para cada entrada, te has 
comido 15 bytes más, lo que ya nos lleva a 215 bytes/usuario. En tu mail 
partes de 150.000 usuarios. Pues bien, ahora mismo, hay aproximadamente 
250.000 nicks registrados en NiCK. Multipliquemos:

  250.000 * 215 = 53.750.000Mb

  Que, de entrada, ya es más del doble de lo que tu decías.

  Pero la cosa no se queda aqui. Las entradas en la BDD no las puede 
hacer un usuario,habría que crear un service que lo hiciera. Además, 
cada vez que se hiciera cualquier tipo de cambio en la lista de watch de 
un usuario (quitar nick, poner nick, modificar nick), se crea una nueva 
entrada en la BDD. En las tablas pueden existir registros con la misma 
clave, pero sólo es válido el de número de orden más alto. Es por esto 
que, cada X tiempo, se compactan las bases de datos para la eliminación 
de entradas inservibles en las mismas. Pero sigamos haciendo números...

  Como hemos dicho, cada vez que se modifica una lista, se añade una 
entrada más. Pongamos que, de esos 250.000 nicks registrados, un 10% 
hace un sólo cambio al día en su lista de watch. Por lo tanto, tenemos 
otras 2.500 entradas, lo que supone:

  2.500 * 215 = 5.375.000 Mb diarios
. En un més: 30 * 5.375.000 = 161.250.000Mb + los 53.750.000Mb iniciales 
son: 215.000.000Mb

  Los números crecen espectacularmente en sólo 30 dias... Y ni te quiero 
contar lo que supondría en el rendimiento de las máquinas estar 
recompactando constantemente la base de datos... Te pongo el supuesto de 
un cambio/dia en la lista de watch porque se puede dar el caso de gente 
que se dedique las 24h del dia a hacer cambios en su lista, con muchos 
nicks a la vez, para inflar a lo bestia el tamaño de la bbdd en disco.

  ¿Seguimos? :P

  Saludos,

NiKoLaS




More information about the IRC-Dev mailing list