[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