1 No uses mysql, mysqli o cualquier libreria nativa de PHP. Usa medoo.in, eloquent o cualquier sistema de manejador de bases de datos avanzado
2 Añade un cache a la consulta, cada 12 horas haga el conteo.
3 Realiza consultas anidadas.
LEFT JOIN
RIGH JOIN
FULL JOIN
INNER JOIN
En tu caso el mejor es el tercero. para anidar las 28 consultas en un solo resultado y no en un arreglo.
busca consultas anidadas o los conceptos JOIN de Mysql.
1 No uses mysql, mysqli o cualquier libreria nativa de PHP. Usa medoo.in, eloquent o cualquier sistema de manejador de bases de datos avanzado
2 Añade un cache a la consulta, cada 12 horas haga el conteo.
3 Realiza consultas anidadas.
LEFT JOIN
RIGH JOIN
FULL JOIN
INNER JOIN
En tu caso el mejor es el tercero. para anidar las 28 consultas en un solo resultado y no en un arreglo.
busca consultas anidadas o los conceptos JOIN de Mysql.
Yo te recomiendo la vieja confiable:
Crea 1 tabla TOTALES:
ID = 1
TOTAL Artículos A
TOTAL Artículos B
TOTAL Artículos C
TOTAL Artículos D
Ahora ingresa el total actual y después cada vez que alguien agrega un articulo sumas un numero al numero existente (+1) o si eliminan algún articulo restas un numero al numero existente (-1),.
Despues solo es hacer una consulta "Select * from TOTALES" y imprimir/usar los resultados.
Con eso te evitas mucho dolor de cabeza.
Suponiendo que los artículos tienen un campo que denota su sección (lo supongo de ma info que das, si es errada agradezco aportes más info) lo más fácil sería usar agrupación, por ejemplo:
Select count(id) as total, seccion from artículos Group by seccion
Yo te recomiendo la vieja confiable:
Crea 1 tabla TOTALES:
ID = 1
TOTAL Artículos A
TOTAL Artículos B
TOTAL Artículos C
TOTAL Artículos D
Ahora ingresa el total actual y después cada vez que alguien agrega un articulo sumas un numero al numero existente (+1) o si eliminan algún articulo restas un numero al numero existente (-1),.
Despues solo es hacer una consulta "Select * from TOTALES" y imprimir/usar los resultados.
Con eso te evitas mucho dolor de cabeza.
Entiendo que creas que es ineficiente, pero necesito más detalles y una explicación con ejemplos en lo posible de por que es así como vos decís, si no, es tu palabra contra la mía y no hay pruebas o evidencias de que vos tengas razón y yo no. Esto te lo pido, por que si estoy equivocado, quiero aprender.
Desde mi punto de vista, la solución mía, es valida, maneje bases de datos de mas de 50.000 usuarios y nunca ningún problema.
Entiendo que creas que es ineficiente, pero necesito más detalles y una explicación con ejemplos en lo posible de por que es así como vos decís, si no, es tu palabra contra la mía y no hay pruebas o evidencias de que vos tengas razón y yo no. Esto te lo pido, por que si estoy equivocado, quiero aprender.
Desde mi punto de vista, la solución mía, es valida, maneje bases de datos de mas de 50.000 usuarios y nunca ningún problema.
yo he manejado bases con hasta 5.000.000 de qps y hasta 7.500.000 ccu diarios
por otro lado es ineficiente porque cada solicitud requiere de dos acciones
la primera, estas creando una tabla que no es necesaria afectando indices y datos de la misma. y estas agrupando tablas en varias.
segundo estas sumando o restando por cada solicitud. esto a la larga desgasta las tablas e de-incrementa su velocidad. puede que con 5 o 10 querys por segundo no sea un problema pero cuando tengas 5.000 o 15.000 la base de datos se satura.
lo que llega a lo segundo, es peligroso porque saturas la base de datos, vuelves lento la web y puedes ocasionar caidas del modulo de php lo que revela el codigo php ya que lo imprime como si fuera un texto plano.
hay formas de hacerlo mas eficiente
ejemplo usando JOIN guardas cada 5 minutos en cache todos los resultados asi solo haras una consulta cada 5 minutos sin importar tus usuarios.
si necesitas sumar o incrementar.
debes crear un DRC o usar Eloquent con cache.
establezca DRC o Eloquent a 5 minutos de cache haga la consulta y sume y reste dependiendo del caso. esto es eficiente ya que el sistema sumara en disco, en variable o en cache y cada 5 minutos insertara la nueva información en la base de datos. asi tendrá solo 1 consulta cada 5 minutos.
PD:
si usas mysqli o las dependencias de php, ya lo estas haciendo mal de base.
Última edición:
Martin95
Beta
Verificado por Whatsapp
¡Ha verificado su Paypal!
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
yo he manejado bases con hasta 5.000.000 de qps y hasta 7.500.000 ccu diarios
por otro lado es ineficiente porque cada solicitud requiere de dos acciones
la primera, estas creando una tabla que no es necesaria afectando indices y datos de la misma. y estas agrupando tablas en varias.
segundo estas sumando o restando por cada solicitud. esto a la larga desgasta las tablas e de-incrementa su velocidad. puede que con 5 o 10 querys por segundo no sea un problema pero cuando tengas 5.000 o 15.000 la base de datos se satura.
lo que llega a lo segundo, es peligroso porque saturas la base de datos, vuelves lento la web y puedes ocasionar caidas del modulo de php lo que revela el codigo php ya que lo imprime como si fuera un texto plano.
hay formas de hacerlo mas eficiente
ejemplo usando JOIN guardas cada 5 minutos en cache todos los resultados asi solo haras una consulta cada 5 minutos sin importar tus usuarios.
si necesitas sumar o incrementar.
debes crear un DRC o usar Eloquent con cache.
establezca DRC o Eloquent a 5 minutos de cache haga la consulta y sume y reste dependiendo del caso. esto es eficiente ya que el sistema sumara en disco, en variable o en cache y cada 5 minutos insertara la nueva información en la base de datos. asi tendrá solo 1 consulta cada 5 minutos.
PD:
si usas mysqli o las dependencias de php, ya lo estas haciendo mal de base.
Entiendo lo que decís pero a la vez no lo entiendo por que se saturaría la base de datos si solo se hace una consulta al total de los artículos.
O sea, yo tengo una tabla con los valores totales, esta no se modifica a menos que algún usuario agregue/elimine un Articulo en el Blog/web.
El objetivo era hacer una consulta rápida para saber los totales de los artículos y creo que de la forma que explique, se esta consiguiendo sin librerías o frameworks externos pero es funcional, fácil de implementar y ligero. Literalmente solo se hace una consulta a una tabla y ya.
Vos propones una solución compleja que no digo que este mal, pero quiero entender el por que es mejor. hasta ahora, veo algo complejo de integrar, que me da la misma solución.
Podrías hacer un video explicando por que es mejor a tu manera? Literalmente me interesa.
Entiendo lo que decís pero a la vez no lo entiendo por que se saturaría la base de datos si solo se hace una consulta al total de los artículos.
O sea, yo tengo una tabla con los valores totales, esta no se modifica a menos que algún usuario agregue/elimine un Articulo en el Blog/web.
El objetivo era hacer una consulta rápida para saber los totales de los artículos y creo que de la forma que explique, se esta consiguiendo sin librerías o frameworks externos pero es funcional, fácil de implementar y ligero. Literalmente solo se hace una consulta a una tabla y ya.
Vos propones una solución compleja que no digo que este mal, pero quiero entender el por que es mejor. hasta ahora, veo algo complejo de integrar, que me da la misma solución.
Podrías hacer un video explicando por que es mejor a tu manera? Literalmente me interesa.
yo entendi que el usuario pide mostrar los post totales.
porque hacer un group por cada refresque de la pagina cuando puedes hacer con Eloquent o sistemas optimizados con cache y hacer la consulta cada 5 minutos, en total si son post no deberian cambiar en periodos muy cortos. y no es necesario tenerlo en tiempo real. incluso con cache a 30 minutos ira perfecto.
por otro lado. si necesitas restar o aumentar valores como sumar visitas es mas eficiente como lo indico.
si tienes 500 visitas por segundo, son 500 querys por segundo a la base de datos y la saturas. Puedes usar lo que he comentado para simplementar realizar un update cada 5 minutos y las sumas y restas manejarlas por DRC, Eloquent o cache y actualizar la base de datos cada x tiempo.
si necesitas es tiempo real. en vez de mostrar los resultados por la base de datos, solo debes mostrar lo guardado en la cache.
jmdoren
No recomendado
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
MySQL Group By Clause for beginners and professionals with examples on CRUD, insert statement, select statement, update statement, delete statement, use database, keys, joins etc.
www.javatpoint.com
O
osqar
No recomendado
Verificado por Whatsapp
¡Ha verificado su Paypal!
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
SELECT s.nombre, count(1) FROM articulos a INNER JOIN secciones s
oN a.id_seccion=s.id GROUP BY s.nombre
Eso te muestra el nombre de secciones y la cantidad de articulos por cada una, por supuesto que asumo muchas cosas pero no tengo el nombre de las tablas.