Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

125567 usuarios en mi base de datos, consulta sql lenta.

Estas en el tema de 125567 usuarios en mi base de datos, consulta sql lenta. en el foro de Mysql en Foros del Web. primero que nada lo hacia en php y tenia como unas 300 lineas así que decidí hacerlo en un procedimiento almacenado y me quedaron 60 ...
  #1 (permalink)  
Antiguo 26/07/2013, 19:52
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 2.031
Antigüedad: 11 años, 8 meses
Puntos: 52
125567 usuarios en mi base de datos, consulta sql lenta.

primero que nada lo hacia en php y tenia como unas 300 lineas así que decidí hacerlo en un procedimiento almacenado y me quedaron 60 lineas.

bueno todo estaba bien, primero intente hacer un procedimiento almacenado que me registraba la lista de usuarios que cada usuario iba a ver en su vista en una tabla temporal..
osea para que el usuario vea a los usuarios y que sepa quien es su amigo , quien no, a quien le envió solicitud o quien se la envió, como facebook pues para que me entiendan.

funciono bien, pero se me ocurrió de que si son 100 usuarios viendo la lista al mismo tiempo esto se multiplicaría de registros temporales así que decidí mejor hacer la consulta directa en php y usar unión.
así que todo estaba bien, si tenia 100 usuarios 500 usuarios solo ponía limit 30 y listo.

y me pregunte, que va a pasar cuando tenga millones de usuarios..


asi que hice una consulta sql que me hiciera unos cuantos miles de usuarios ficticios mas y sobrepaso el millon.

y ahora quise probar en la pagina, pues despues de todo tengo el limit 30.

se quedo trabada, asi que la probe directa la consulta, y tambien duro un monton, a pesar de que tengo el limit 30.

la consulta normal a la tabla usuarios me dura 14 segundos.

total para que se den la idea.

estas son mis tablas.

usuarios
id
nombre,
apellido
etc
.
.unos 10 datos mas


amigos
idincrem
ida
idb
estadosolicitud( si,fueaceptada)

si estadosolicitud es si y si el id mio esta en a quiere decir que la envie, si esta en b que me la envio si es aceptada que es mi amigo y si no esta en la base no es mi amigo.


esas son mis tablas, como haria para mostrar lo siguiente


Roberto.- Agregar amigos
Juana.-Eliminar de mis amigos
Crystal.- Cancelar la solicitud
Efren.-Aceptar solicitud
etc
etc
esos son los 4 casos que depende de estado solicitud


yo hice esto en las consultas

select (amigos.fueaceptada union amigos.si) union usuarios not in (amigos.fueaceptada union amigos.si) limit 30.

si me entienden verdad?


uno los amigos con los que me enviaron solicitud o yo les envié y finalmente uno los que no tienen relación con la primero.

lo que me gustaría es que me dieran algún consejo para que la consulta no sea tan rápida. por que si lanzo mi pagina así, me va a tronar en los 100 mil usuarios y mas si están online, si lo probé yo mismo y en mi pc local siendo una pc potente.


ayuda, de antemano gracias

posdata, se que dura mucho por que el not in recorre el millon de registros por cada comparacion, osea se multiplica la iteracion por cada registro de amigos.

quisiera saber que me sugieren? para que esto no ocurra?
como hace facebook?
y con esto que descubri me doy cuenta que mi chat esta muy atras aun

la tabla de usuarios pesa 200 mb
__________________
a veces creemos que es algo básico pero al profundizar nos damos cuenta que estábamos tocando solo la cola de la culebra

Última edición por minombreesmm; 26/07/2013 a las 21:50
  #2 (permalink)  
Antiguo 27/07/2013, 18:22
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: 125567 usuarios en mi base de datos, consulta sql lenta.

yo no entiendo de NoSQL, pero creo que esto te podría ayudar

http://codecriticon.com/que-es-nosql/
  #3 (permalink)  
Antiguo 27/07/2013, 19:21
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 2.031
Antigüedad: 11 años, 8 meses
Puntos: 52
Respuesta: 125567 usuarios en mi base de datos, consulta sql lenta.

Cita:
Iniciado por guardarmicorreo Ver Mensaje
yo no entiendo de NoSQL, pero creo que esto te podría ayudar

http://codecriticon.com/que-es-nosql/
es muy buena idea, eso podria implementarlo cuando pase de 10,000 usuarios supongo
__________________
a veces creemos que es algo básico pero al profundizar nos damos cuenta que estábamos tocando solo la cola de la culebra
  #4 (permalink)  
Antiguo 28/07/2013, 03:36
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: 125567 usuarios en mi base de datos, consulta sql lenta.

creo que lo oportuno es implementar este sistema desde el principio y a medida que los usuarios crecen se aumentan paralelamente el número de máquinas que trabajan con los datos en ram.

creo que si tu tráfico va aumentando rápidamente deberías plantearte ya ir preparando la implementación y migración de sql a nosql. cuanto más tiempo dispongas para aprender sobre nosql y puedas hacer la migración mejor

saludos y espero que te funcione bien todo!
  #5 (permalink)  
Antiguo 04/08/2013, 14:35
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 2.031
Antigüedad: 11 años, 8 meses
Puntos: 52
Respuesta: 125567 usuarios en mi base de datos, consulta sql lenta.

Cita:
Iniciado por guardarmicorreo Ver Mensaje
creo que lo oportuno es implementar este sistema desde el principio y a medida que los usuarios crecen se aumentan paralelamente el número de máquinas que trabajan con los datos en ram.

creo que si tu tráfico va aumentando rápidamente deberías plantearte ya ir preparando la implementación y migración de sql a nosql. cuanto más tiempo dispongas para aprender sobre nosql y puedas hacer la migración mejor

saludos y espero que te funcione bien todo!
Bueno ya hice una consulta rapida que lo probe con 23,302,253 de registros ficticios(3.6 gigas)
osea 23 millones y funciono rapida con limit 30.
el caso es que a la hora de hacer busquedas de usuarios se queda colgada cuando lo que busca no esta en la base de datos, y si si esta dura 3 segundos.
y bueno me fije en la cantidad de usuarios y tiempo que tiene foros del web(480.233 Usuarios registrados) asi que reduje la cantidad de registros a el doble(803011) (130.7 mb)de usuarios registrados que tiene foros del web y todo anda genial.
mi conclusion es dividir las tablas cada vez que sobre pase el doble de usuarios que tiene foros del web para que las consultas sean mas rapidas en cuanto a usuarios.

cada vez que sobrepase suele tan fantasioso que minimo solamente lo sobrepasaria una vez.
pero bueno todo puede ocurrir facebook tiene http://www.culki.com/2011/06/estadis...-facebook.html

mas de 800 millones, osea 34 veces mas de lo que agregue al principio, por logica ellos tienen miles de servidores y yo solo mi pc, aunque la consulta sql es con una sola persona.
__________________
a veces creemos que es algo básico pero al profundizar nos damos cuenta que estábamos tocando solo la cola de la culebra

Última edición por minombreesmm; 04/08/2013 a las 14:43
  #6 (permalink)  
Antiguo 04/08/2013, 16:23
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: 125567 usuarios en mi base de datos, consulta sql lenta.

Cita:
Iniciado por minombreesmm Ver Mensaje
Bueno ya hice una consulta rapida que lo probe con 23,302,253 de registros ficticios(3.6 gigas)
osea 23 millones y funciono rapida con limit 30.
el caso es que a la hora de hacer busquedas de usuarios se queda colgada cuando lo que busca no esta en la base de datos, y si si esta dura 3 segundos.
y bueno me fije en la cantidad de usuarios y tiempo que tiene foros del web(480.233 Usuarios registrados) asi que reduje la cantidad de registros a el doble(803011) (130.7 mb)de usuarios registrados que tiene foros del web y todo anda genial.
mi conclusion es dividir las tablas cada vez que sobre pase el doble de usuarios que tiene foros del web para que las consultas sean mas rapidas en cuanto a usuarios.

cada vez que sobrepase suele tan fantasioso que minimo solamente lo sobrepasaria una vez.
pero bueno todo puede ocurrir facebook tiene http://www.culki.com/2011/06/estadis...-facebook.html

mas de 800 millones, osea 34 veces mas de lo que agregue al principio, por logica ellos tienen miles de servidores y yo solo mi pc, aunque la consulta sql es con una sola persona.
ya has probado nosql?

3 segundos? supongo que te refieres al salir de sql y entrar a nosql no?

desconozco por completo si dividir las tablas es una opción viable pero si te funciona y no conoces otra alternativa supongo que de momento puede servir hasta encontrar algo mejor.

creo que gnzsoloyo podría aconsejarte sobre esto, se dedica profesionalmente al diseño de bases de datos, es un maestro en esto.
  #7 (permalink)  
Antiguo 06/08/2013, 22:12
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 2.031
Antigüedad: 11 años, 8 meses
Puntos: 52
Respuesta: 125567 usuarios en mi base de datos, consulta sql lenta.

Cita:
Iniciado por guardarmicorreo Ver Mensaje
ya has probado nosql?

3 segundos? supongo que te refieres al salir de sql y entrar a nosql no?

desconozco por completo si dividir las tablas es una opción viable pero si te funciona y no conoces otra alternativa supongo que de momento puede servir hasta encontrar algo mejor.

creo que gnzsoloyo podría aconsejarte sobre esto, se dedica profesionalmente al diseño de bases de datos, es un maestro en esto.
pues apenas he leido poco, necesito entender bien pero suena interesante.
y no no me refiero a nosql, pero la consulta me dura de 2 a 3 segundos y lo acabo de probar con 45 millones de registros.

funciona como el buscador de facebook cuando buscas a una persona.
solo que este es hasta que das enter.
la consulta que estaba lenta era donde consulto el logeo, pero gracias a que hice la consulta mas simple y que tiene indices solo dura 0.0010 s :D y que emocion :D


y lo de dividir las tablas lo hare cuando se ponga un poco lenta, y si es buena idea, solo tendre una condicion que diga if idusuario>40 millones entonces busca en la tablaid2

osea la que inicia 40 millones 1 y asi...
pero dudo llegar a ese extremo que hasta a foros del web que tiene años no ha llegado jejes. XD
eso si pero facebook tiene mas de mil 500 millones de usuarios(registros)

bueno mi consulta la probe en mi maquina y con un solo usuario hace falta probarla con unos 100 mil usuarios haciendo conexion simultaneamente hablando de que tuviera 40 millones de usuarios online al mismo tiempo.
aun asi creo que no es muy probable que esten al mismo tiempo y si lo estuvieran no iniciarian sesion tan al mismo tiempo.
bueno leere mas de no-sql, aun asi mi consulta anda rapida :D
__________________
a veces creemos que es algo básico pero al profundizar nos damos cuenta que estábamos tocando solo la cola de la culebra
  #8 (permalink)  
Antiguo 07/08/2013, 01:58
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: 125567 usuarios en mi base de datos, consulta sql lenta.

bravo! y nos cuentas qué tal tu experiencia, la verdad que tiene que estar muy bien el nosql, a ver si algún día cuando termine en lo que estoy me embarco en ello :D :P

Etiquetas: php, registros, select, sql, tabla, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:25.