Frage

Wie viele InsertOnSubmit soll ich anrufen, bevor SubmitChanges anrufen? Ich bin Hinzufügen von Daten von einem Web-Service, die Zehntausende von Datensätzen einen Datensatz zu einer Zeit zurückkehren können. Die Wrapper-Klasse rund um den Web-Service stellt die Datenbankeinträge einen IEnumberable Sammlung einen ausgeklügelten Chunking Mechanismus zu verbergen.

Gibt es Richtlinien, wie viele Einsätze ich vor dem Absenden sie ansammeln sollte?

War es hilfreich?

Lösung

Es hängt auch von der Art der Daten, die Sie einfügen müssen. Manchmal brauche ich eine Menge Datensätze einzufügen, wo ich auch die ID, mehrere Datensätze in einer anderen Tabelle einzufügen.

Da die ID zugewiesen wird, wenn Sie Änderungen an der Datenbank einreichen, muss ich SubmitChanges zu bestimmten Zeiten nennen.

Wenn diese nicht benötigt werden, ich lege sie nur mit einem 1000 auf einmal oder so (in Abhängigkeit von der Gesamtzahl der Datensätze muß ich einfügen).

Vielleicht könnten Sie einige Geschwindigkeitstests tun, was am besten für Sie sind. Je nach Hardware, die Erwartungen der Menge von Datensätzen, etc.

Andere Tipps

Nun habe ich es mit Hunderttausenden von Datensätzen über mehrere Tabellen in der ohne ein Problem einmal getan. In der Tat, während Aufruf SubmitChanges () für jeden InsertOnSubmit () in einem solchen Fall das würde Stunden, nur SubmitChanges () aufrufen, direkt am Ende der Zeit verringern würde nimmt, dass viele Aufzeichnungen, um ein paar Minuten einzulegen.

Im Fall i oben beschrieben, die Anordnung war ich hatte für Berichtstabellen mit einer Kopftabelle Details Tabelle (die Header gebunden) und eine Atom-Tabelle (die Details verknüpft). Für jeden Kopfsatz hatte ich mehrere Detailtabellen, die dann wieder durch mehrere Atom Datensätzen verknüpft werden würde. In einigen Fällen würde ich zig Aufzeichnungen am Ende einfügen und sie würden alle gehen in keine Probleme mit den einzelnen SubmitChanges () Aufruf am Ende und es ist alles sehr gut entwickelt.

Für Änderungen an ein Feld für 1000 Datensätze in Batch vs 1 zu einem Zeitpunkt zu machen: 1 Datensatz zu einem Zeitpunkt erfolgt 0,1989 sec / Rekord vs Batch, die 0,0711 sec / Takes. So Batch ist so schnell in meinen Tests über 3x. Beachten Sie, dass die Chargengrößen variieren in Effizienz.

SubmitChanges () 1 Datensatz zu einem Zeitpunkt
Datensätze sec sec / record
1000 198,95 0,1989

Batch SubmitChanges ()
Datensätze sec sec / record% Änderung
100 12,20 0,1220 133%
200 18,33 0,0916 122%
500 37,59 0,0752 106%
1.000 71,07 0,0711 103%
2000 138,64 0,0693 102%
10.000 680,36 0,0680

Es gibt wirklich keine „Richtlinien“ pro-Wort. Id würde sagen, für Effizienz wollen Sie würden einen Haufen sammeln, vielleicht nicht 10k, aber 100 sagen? Das würde Ihre DB-Abfragen drastisch reduzieren und sollte nicht zu viel RAM fressen das Caching lokal, während Sie eine Transaktion aufzubauen.

Sie sollten wahrscheinlich Test mit ein paar verschiedene Werte und Profile, die Leistung (Speicher und Geschwindigkeit), obwohl die optimale Lösung für Ihre Hardware zu finden.

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