coldfusion - CF-QoQ vs Query
(5)
Tengo la idea de que llamar a una consulta de consultas es más rápido que una consulta de la base de datos, porque la ralentización se produce en la comunicación entre cf y el db. Es esto cierto.
¿Eso significa que una QoQ dentro de un bucle es aceptable, mientras que una consulta dentro de un bucle no es aceptable?
Depende de las capacidades de su máquina Coldfusion en comparación con su servidor de base de datos, y del problema que está tratando de resolver.
QofQ generalmente será muy rápido para pequeños conjuntos de datos porque todo sucede en la memoria de su servidor. Sin embargo, si intenta usar QofQ en un gran conjunto de datos, su servidor comenzará a tener problemas debido a la sobrecarga involucrada en mantener y procesar esos datos en la memoria.
Las consultas de bases de datos generalmente superan a QofQ en grandes conjuntos de datos porque para eso están diseñados . Las bases de datos son buenas para procesar grandes cantidades de datos muy rápido. Úselos para eso.
Si está considerando recuperar un gran conjunto de resultados de la base de datos y analizarlo con QofQ, esa es probablemente la forma incorrecta de hacerlo. Haga que la base de datos reduzca los resultados para usted en su lugar. Si le pide frecuentemente al servidor de la base de datos esta información, almacénela en su servidor.
Tenga en cuenta que todo esto es subjetivo y dependerá mucho de sus capacidades particulares de problema, carga, base de datos y servidor.
He descubierto que usar aq OF q puede ser MUCHO más rápido que extraer DB de una consulta.
Por ejemplo, yo uso religiosamente el QoQ en los informes de ventas. Tengo un informe de ventas que se extraerá para un rango de fechas del 1er trimestre, que puede mostrar las cifras de ventas por agente de ventas, y también puede mostrar las cifras de ventas por producto vendido.
En mi base de datos, se usarían las mismas tablas / campos para ambas secciones que aparecerían en el mismo informe.
Consulto la tabla principal para mis datos según el intervalo de fechas y luego consulto esos resultados para compilar cada sección de mi informe.
Encontré que este método era más rápido en ambos servidores con el DB local y remoto.
Los DBMS completos están altamente optimizados para el procesamiento de consultas [escritas apropiadamente], y en una red moderna la sobrecarga no va a ser enorme.
Las QoQ se realizan utilizando una base de datos integrada, que puede o no estar bien optimizada, según el tipo de consulta que se realice.
Entonces, si la base de datos está en una máquina diferente, a través de una red lenta, la QoQ puede ser menos lenta en algunas situaciones. Si está llegando a la base de datos, lo ideal es que desee procesar todo adecuadamente allí, en una sola solicitud, y evitar tanto los viajes redondos como el reprocesamiento en bucle.
Por supuesto, un gran beneficio de QoQ es que puede usarlo para procesar datos que no provienen de una base de datos, como los resultados de cfdirectory o un archivo CSV que se ha convertido en una consulta.
ColdFusion realiza QoQ al analizar manualmente el SQL y luego al recorrer el conjunto de registros. Esto lo hace eficiente para operaciones simples, como una combinación de dos tablas con claves que coinciden, pero menos eficiente para combinaciones complejas (donde la unión usa múltiples columnas y / o no es una comparación recta a = b). ( Breve información aquí )
Railo usa H2 . H2 afirma ser rápido, y su sitio web ofrece algunas comparaciones de velocidad que sugieren que es más rápido que Derby y MySQL, pero por supuesto sería mejor buscar pruebas independientes de terceros, sin mencionar que estas pruebas no son garantías de QoQ rendimiento (que sospecho que no tendrá índices, por ejemplo).
En general: no tome ninguna decisión difícil sin antes hacer pruebas de rendimiento para determinar que realmente necesita mejorar el rendimiento y poder determinar objetivamente qué método es realmente más rápido.
¡Tipo! Solo uso cachedwithin.
Tiempos para usar QofQ
- Cuando tiene dos fuentes de datos y por varias razones puede usar servidores vinculados
- Cuando los datos ingresan a través de WDDX o JSON y tienes que hacer una unión
- Cuando es práctico almacenar datos en una consulta en caché y hacer QofQ contra la consulta en caché
- Cuando tiene que unir el resultado de un directoryList () con una base de datos
Tiempos para no usar QofQ
- Cuando puede cargar los datos en una estructura en su lugar
- Al hacer una cantidad masiva de iteraciones
- Cuando el de los conjuntos de datos fuente es muy grande
- Cuando necesite hacer una combinación izquierda, derecha o externa
Para más detalles ver
http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec0e4fd-7ff0.html
Esto es para CF 9, pero QofQ ha sido aproximadamente el mismo desde CF 6