2012-05-06 11 views
11

Recientemente he tenido varias situaciones en las que necesito datos diferentes de la misma tabla. Un ejemplo es donde pasaría por cada "controlador de entrega" y generaría un archivo PDF imprimible para cada cliente al que enviarían.¿Es más rápido consultar una lista <T> o una base de datos?

En esta situación, tiré todos los clientes y los almacena en

List<Customer> AllCustomersList = customers.GetAllCustomers(); 

Como ya he enrollado a través de los conductores de la entrega, lo haría algo como esto:

List<Customer> DeliveryCustomers = AllCustomersList.Where(a => a.DeliveryDriverID == DriverID); 

Mi pregunta: ¿Es la forma en que lo estoy haciendo al consultar el objeto List más rápido que consultar la base de datos cada vez para los registros del cliente asociados con el controlador de entrega?

+0

No puedo concebir una forma de que sacar datos de la base de datos sea mejor que hacer todo en la memoria como lo está haciendo actualmente ... Lo único que puedo hacer es asegurarme de que no está obteniendo MÁS datos, entonces usted van a usar ... – Jared

+1

Consultar una lista debe ser mucho, mucho más rápido, ya que se almacenará en la memoria. – xbonez

+0

¿En qué punto se convertirán demasiados datos para poner en la lista y necesitar usar la base de datos? – Ricketts

Respuesta

11

No hay un número exacto de la cantidad de filas que si se le pasa usted debe consultar la base de datos en lugar de en memoria List<T>

Pero la regla de oro es, DB están diseñados para trabajar con gran cantidad de datos y tienen "mecanismos" de optimización, mientras que en memoria no existen tales cosas.

lo que tendrá que establecer criterios de referencia para ver si el de ida y vuelta a DB vale la pena para que la cantidad de filas para cada vez es importante para usted

"Debemos olvidarnos de pequeñas eficiencias, decir aproximadamente el 97% del tiempo: prematura optimización es la raíz de todas las idas y vueltas del mal "

+0

¡Gracias! ¡Esa frase me hizo reconsiderar mi enfoque! +1 –

1

Evitar a DB es una de las principales normas relativas a la optimización del rendimiento de bases de datos, especialmente cuando la base de datos se encuentra en la red y tiene múltiples usuarios accediendo a i t.

Desde el otro punto de vista, traer grandes conjuntos de resultados a la memoria como los datos de los clientes parecen ser, no es eficiente y probablemente no sea más rápido que viajar a DB cuando los necesite.

Un buen uso de las colecciones de memoria para evitar viajes redondos es para las tablas de búsqueda (es decir, categorías de clientes, regiones de clientes, etc.), que no cambian con frecuencia. De esta forma evitará las uniones en la consulta de selección de su cliente principal, lo que lo hará aún más rápido.

0

¿Por qué no utilizar Redis? , Es una base de datos en memoria y es muy rápido.

Cuestiones relacionadas