Question

J'ai un site web où l'utilisateur peut télécharger une feuille de calcul Excel pour charger des données dans une table. Il peut y avoir quelques lignes de 100k dans la feuille de calcul Excel. Quand il télécharge le fichier les besoins de site Web pour insérer un montant égal de lignes dans une table de base de données.

Quelle stratégie dois-je prendre pour le faire? Je pensais à l'affichage d'une « S'il vous plaît page d'attente » jusqu'à ce que l'opération est terminée, mais je veux qu'il soit en mesure de continuer à naviguer sur le site. En outre, depuis la base de données à ce moment-là sera un peu occupé - ne serait pas que les gens d'arrêt de travail sur le site

Ma couche d'accès aux données est NHibernate.

Merci, Y

Était-ce utile?

La solution

Affichage d'une page d'attente s'il vous plaît serait assez hostile que votre utilisateur pourrait être wating un certain temps et bloquerait threads sur votre serveur web.

Je télécharger le fichier, stocker et créer une entrée dans une file d'attente (vous aurez besoin anouther table pour cela) pour indiquer qu'il ya une attente de fichiers à traiter. Vous pouvez alors un autre processus (qui pourrait même fonctionner sur son propre serveur) qui reprend les tâches de ce tableau de file d'attente et traite le fichier xls dans son propre temps.

Autres conseils

Je voudrais créer une file d'attente de téléchargement qui soumettrait cette demande. Ensuite, l'utilisateur peut simplement vérifier dans la file d'attente tous les temps en temps. Vous pouvez stocker l'état d'avancement de l'opération par lots dans la file d'attente que les lignes sont traitées.

En outre, les serveurs de base de données sont robustes, puissants, les systèmes multi-tâches. Sauf si vous avez observé un problème avec le site tandis que les inserts se produisent ne présumez pas arrêtera les gens de travailler sur le site.

Cependant, dans la mesure d'insertion ou les performances de lecture / écriture simultanée va il existe des mécanismes pour faire face à cela. Vous pouvez utiliser la syntaxe « INSERT faible priorité » dans MySQL ou avoir votre application manette des gaz les inserts en dormant un millième de seconde entre chaque insert. En outre, comment vous Ciselez votre instructions d'insertion, vous utilisez des paramètres wether liés ou non, et vous utilisez des inserts wether plusieurs valeurs peut affecter les performances d'insertion et comment il affecte les clients dans une large mesure.

Envoyer, vous pouvez passer l'opération DB à un RequestHandler asynchrone et définir une SESSION.WAIT_TIMEOUT quand son fait.

Alors que le processus asynch est en cours, vous pouvez vérifier SESSION.WAIT_TIMEOUT sur chaque demande et si elle est définie (opération = terminé) afficher un message, par exemple dans un modal ou tout autre mécanisme que vous avez un message.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top