7

Estoy trabajando en un proyecto grande en el que tengo que presentar una forma eficiente para que un usuario ingrese datos en un formulario.Optimización de Autocompletar para grandes conjuntos de datos

Tres de los campos de esa forma requieren un valor de un subconjunto de una fuente de datos común (Tabla SQL). Usé JQuery y JQuery UI para construir un autocompletar, que se publica en un genérico HttpHandler.

Internamente, el controlador utiliza Linq-to-sql para captar los datos requeridos de esa tabla específica. La tabla tiene aproximadamente 10 columnas diferentes, y la expresión linq usa SqlMethods.Like() para coincidir con el término de búsqueda único en cada uno de esos 10 campos.

El problema es que esa tabla contiene unas 20K filas. El autocompletado funciona sin problemas, acepta el gran volumen de datos que introduce los desajustes, en las proximidades de 6 segundos aproximadamente (cuando se depura en mi máquina local) antes de que aparezca.

El autocompletado de JqueryUI tiene 0 demoras, consultas en la tecla 3 y el resultado de la publicación se realiza en un estilo de Facebook de varias filas seleccionables. (Casi tuve que reescribir el complemento de autocompletar ...).

Entonces, el problema es la velocidad de los datos frente a la velocidad. ¿Alguna idea sobre cómo acelerar esto? Los únicos dos pensamientos que tuve fueron almacenar en caché los datos (¿Cómo/Dónde?); o utilice un lector de datos sql directo para acceder a los datos?

¡Cualquier idea sería muy apreciada! Gracias ,

<bleepzter/> 

Respuesta

6

me gustaría ver y no regresaron hasta el primer número X de filas utilizando el método de .Take(10) LINQ. Eso debería traducirse en una llamada sql sensbile, que pondrá mucha menos carga en su base de datos. A medida que el usuario escriba, encontrará cada vez menos coincidencias, por lo que solo verán los datos que necesiten.

Normalmente considero que 10 elementos son suficientes para que el usuario entienda lo que está pasando y aún así obtenga los datos que necesita rápidamente (consulte la barra de búsqueda de amazon.com para ver un ejemplo).

Obviamente, si puede ordenar los datos de una manera significativa, entonces los 10 resultados serán mucho más propensos a darle al usuario lo que están buscando rápidamente.

+0

Gracias, gracias, gracias! ¡Funcionó a las mil maravillas! – bleepzter

+0

Excelente enfoque hacia el autocompletado me veía como esta solución gracias –

1

Devolver los primeros N resultados es una buena idea. Encontramos (consultar una lista potencial de 270K) que devolver el top 30 es una mejor apuesta para que el usuario encuentre lo que está buscando, pero eso COMPLETAMENTE depende de los datos que está consultando.

Además, REALMENTE debería dejar el retraso a algo sensato como 100-300 ms. Cuando establece la demora en CERO, una vez que golpea el disparador de 3 caracteres, efectivamente CADA. SOLTERO. LLAVE. CARRERA. se envía como una nueva consulta a su servidor. Esto podría fácilmente tener el efecto involuntario y desagradable de ralentizar la respuesta aún MÁS.

Cuestiones relacionadas