Pregunta

Tengo un sitio web donde el usuario puede cargar una hoja de cálculo de Excel para cargar datos en una tabla. No puede haber un par de filas de 100k en la hoja de cálculo Excel. Cuando se carga el archivo de las necesidades de sitios web para insertar una cantidad igual de filas de una tabla de base de datos.

¿Qué estrategia debo tomar para hacer esto? Estaba pensando en que muestra una "página por favor espere" hasta que se complete la operación, pero yo quiero que él sea capaz de continuar navegando por el sitio web. Además, dado que la base de datos en ese momento será algo ocupada - no haría que la gente deja de trabajar en el sitio web

Mi capa de acceso de datos está en NHibernate.

Gracias, Y

¿Fue útil?

Solución

Visualización de una página por favor espera sería bastante desagradable como su usuario podría ser wating bastante tiempo y bloquearía las discusiones en su servidor web.

Me gustaría subir el archivo, almacenar y crear una entrada en una cola (necesitará anouther mesa para esto) para indicar que hay una espera de archivos para ser procesados. A continuación, puede tener otro proceso (que incluso podría funcionar en su propio servidor) que recoge las tareas de esta tabla de cola y procesa el archivo XLS en su propio tiempo.

Otros consejos

Yo crearía una cola de carga que presentar esta solicitud a. A continuación, el usuario podría simplemente el registro de entrada en la cola de vez en cuando. Se podría almacenar el progreso de la operación por lotes en la cola que las filas se procesan.

Además, los servidores de bases de datos son sistemas robustos, poderosos, multi-tarea. A menos que usted ha observado un problema con la página web, mientras que los insertos están sucediendo, no asuma que va a impedir que la gente que trabaja en el sitio web.

Sin embargo, por lo que el rendimiento de inserción o de lectura / escritura simultánea va existen mecanismos para hacer frente a esto. Se podría utilizar la sintaxis "INSERT baja prioridad" en MySQL o que su aplicación del acelerador los insertos por dormir una milésima de segundo entre cada inserto. Además, ¿a diseñar sus instrucciones de inserción, ya sea que se utilice parámetros vinculados o no, y ya sea que se use inserciones de múltiples valores puede afectar al rendimiento de inserción y cómo afecta a los clientes en un alto grado.

Al enviarla usted podría pasar a la Operación de DB a un RequestHandler asíncrono y establecer un valor de sesión cuando su hecho.

Mientras que el proceso está en curso asynch se puede comprobar el valor de sesión en cada petición y si se establece (= operación completada) mostrar un mensaje, por ejemplo, en un modal o cualquier mecanismo de mensajes que tiene.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top