Frage

Ich habe eine Website, wo der Benutzer eine Excel-Tabelle zu laden Daten in einer Tabelle hochladen. Es kann ein paar 100k Zeilen in der Excel-Tabelle sein. Als er die Datei lädt die Website braucht eine gleiche Menge an Zeilen in einer Datenbanktabelle einzufügen.

Was Strategie sollte ich das tun? Ich dachte an eine „Bitte warten Seite“ angezeigt, bis der Vorgang abgeschlossen ist, aber ich will, dass er auf die Website der Lage sein, weiter zu blättern. Da auch die Datenbank zu diesem Zeitpunkt aktuellen Art beschäftigt sein - wäre das nicht Stopp Menschen von der Arbeit auf der Website

Meine Datenzugriffsschicht ist in NHibernate.

Danke, Y

War es hilfreich?

Lösung

ein, bitte warten Seite angezeigt wäre ziemlich unfreundlich als Benutzer eine ganze Weile Wating werden könnte und Threads auf Ihrem Web-Server blockieren.

Ich würde die Datei hochladen, speichern es und einen Eintrag in einer Warteschlange erstellen (Sie werden anouther Tabelle für diese müssen), um anzuzeigen, dass es eine Datei Warte verarbeitet werden soll. Sie können dann einen anderen Prozess (der auf einmal laufen konnte seinen eigenen Server), die Aufgaben aus dieser Warteschlange Tabelle aufnimmt und verarbeitet die xls-Datei in eine eigene Zeit.

Andere Tipps

würde ich eine Upload-Warteschlange erstellen, die diese Anforderung senden würden. Dann könnte der Benutzer überprüfen gerade in der Warteschlange in jeder einmal in eine Weile. Sie könnten den Fortschritt des Batch-Betriebes in der Warteschlange speichern, wie die Zeilen verarbeitet werden.

Auch Datenbank-Server sind robust, leistungsstark, Multi-Tasking-Systeme. Es sei denn, Sie ein Problem mit der Website beobachtet haben, während die Einsätze geschieht nicht davon ausgehen, wird es Leute aufhören von der Arbeit auf der Website.

Was jedoch als Insert oder gleichzeitige Lese- / Schreibleistung geht es Mechanismen damit umgehen sind. Sie könnten die „INSERT LOW PRIORITY“ Syntax in MySQL verwenden oder Ihre Anwendung Drossel der Einsätze durch eine Millisekunde zwischen jedem Einsatz schlafen. Auch, wie Sie Ihre Insert-Anweisungen Handwerk, ob Sie gebundene Parameter verwenden oder nicht, und ob Sie verwenden mehrwertig Einsätze können die Einsatzleistung auswirken und wie sie sich auf Kunden in hohem Maße.

Auf Senden Sie den DB-Betrieb zu einem asynchronen Request passieren könnten und einen Sitzungswert gesetzt, wenn ihre getan.

Während der asynch Prozess im Gange ist, können Sie die Session Wert auf jede Anforderung überprüfen und wenn es gesetzt ist (Betrieb = abgeschlossen) eine Meldung angezeigt, zum Beispiel in einem modalen oder was auch immer Nachricht Mechanismus Sie haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top