2009-03-26 32 views
19

¿Qué es realmente mejor? ¿Tener clases con consultas complejas responsables de cargar, por ejemplo, objetos anidados? ¿O clases con consultas simples responsables de cargar objetos simples?Una consulta compleja frente a consultas simples múltiples

Con consultas complejas, tiene que ir menos a la base de datos, pero la clase tendrá más responsabilidad.

O consultas simples donde tendrá que ir más a la base de datos. En este caso, sin embargo, cada clase será responsable de cargar un tipo de objeto.

La situación en la que estoy es que los objetos cargados se enviarán a una aplicación Flex (DTO).

Respuesta

15

La regla general aquí es que los viajes de ida y vuelta del servidor son caros (en relación con el tiempo que tarda una consulta típica), por lo que el principio rector es que desea minimizarlos. Básicamente, cada combinación de uno a muchos multiplicará potencialmente su conjunto de resultados, por lo que la forma de abordarlo es seguir uniéndome hasta que el conjunto de resultados sea demasiado grande o el tiempo de ejecución de la consulta sea demasiado largo (aproximadamente 1-5 segundos en general).

Dependiendo de su plataforma, puede o no puede ejecutar consultas en paralelo. Este es un factor determinante en lo que debe hacer, porque si solo puede ejecutar una consulta a la vez, la barrera para dividir una consulta es mucho más alta.

A veces vale la pena mantener ciertos datos relativamente constantes en la memoria (información del país, por ejemplo) o hacerlos como una consulta por separado, pero esto es, en mi experiencia, razonablemente inusual.

Mucho más común es tener que arreglar los sistemas con un rendimiento horrible debido en gran parte a hacer consultas separadas (particularmente consultas correlacionadas) en lugar de uniones.

4

Desde una primera impresión que diría:

Ir con el modo simple, siempre y cuando no hay ninguna razón probada para optimizar el rendimiento. De lo contrario, pondría el enfoque de "objetos complejos y consulta" en la cesta de la optimización prematura.

Si encuentra que hay implicaciones de rendimiento reales, en el siguiente paso debe optimizar la ida y vuelta entre flex y su back-end. Pero como dije antes: Esto es un presentimiento, realmente debería comenzar con una definición de "rendimiento", comenzar de manera simple y medir el rendimiento.

7

No creo que ninguna opción sea realmente mejor. Depende de su aplicación específica, arquitectura, DBMS usado y otros factores.

E.g. utilizamos múltiples consultas simples en nuestra solución independiente. Pero cuando desarrollamos nuestro producto hacia una solución liviana accesible a través de Internet, descubrimos que nuestro framework realizaba un gran número de solicitudes y que eliminaba el rendimiento debido a la latencia de la red. Por lo tanto, hemos revisado suficientemente nuestro marco para usar consultas complejas agregadas. Mientras tanto, mantuvimos nuestra solución independiente y pasamos de Oracle Light a Apache Derby. Y una vez más, descubrimos que algunas de nuestras nuevas consultas de complex deberían simplificarse, ya que Derby las realizó demasiado tiempo.

Mire su problema real y resuélvalo adecuadamente. Creo que las consultas simples son buenas para comenzar si no hay objetivos fuertes en contra de ellas.

Cuestiones relacionadas