| 

.NET C# Java Javascript Exception

1
Ich habe mit dem EF eine Routine zum migrieren und importieren von Altdaten geschrieben. Diese funktioniert auch sehr gut, was das Portieren der Informationen betrifft.

Leider ist die Alt-Datenmenge so groß, dass der Import sehr lange dauert. Dabei ist mir aufgefallen, dass es am Anfang recht zügig geht (Kontrolle über einen Zähler). Aber mit der Ziet (so ab circa 2.500 Datensätzen) merkt man dass es deutlich langsamer ist, als zu beginn.

Es werden nur Datensätze in die neue Datenbank hinzugefügt. Gibt es da eine "Trick", wie man den Cache oder was auch immer, löschen kann und es wieder schneller geht?

Mfg
Michael

PS: Leider hängt die ganze Sache immer noch. Ab circa 5000 Datensätzen "hängt" es nun. Habe schon versucht mit einem "ObjectContext.Detach(art)" (Art ist das Artikel-Entity der Quelldaten) nach dem Schreiben in die Zieldatenbank den Lesecache zu löschen. Aber dass hat keine Lösung gebracht.

Es müssen 25.000 Einträge kopiert/übertragen werden. Wie kann ich herausfinden, an was es liegt?
25.11.2013
MyKey0815 1,6k 2 9
2 Antworten
1
Ich kenne deine Datenstrukturen und die Datenhaltung vom alten System nicht, aber vielleicht kommt ja für dich auch ein Bulk-Copy in Frage. Damit geht der Ex- und Import, gerade großer Datenmengen im SQL-Server, erheblich schneller.

Bulk-Copy ist über die bcp.exe oder im .NET Code per SqlBulkCopy möglich. Also je nach Szenario :)
25.11.2013
Andreas Richter 1,7k 1 2 8
Vielen Dank für den Hinweis. Leider sind meine Quelldaten in einer MySQL-DB.
MyKey0815 26.11.2013
Das sollte aber kein Problem sein. Ich habe Bulk-Copy auch schon zwischen verschiedenen Datenbanksystem verwendet.
multi1209 26.11.2013
Bulk-Copy mit MySQL? Das würde mich auch interessieren, soweit ich weiß, gibt das der Treiber nicht her.
muffi 26.11.2013
Naja. Wenn ich mir die Bulk-Copy-Datei angucke, ist das reiner Text. Pro Datensatz eine Zeile und jede Spalte durch ein festgelegtes Trennzeichen getrennt.

Das sollte jede DB irgendwie hinbekommen.
Andreas Richter 26.11.2013
0
In der For each-schleife mit den Quelldaten, habe ich nun einn Zähler eingebaut. Dieser setzt nach 250 Durchläufen das Ziel-Entitäten-Objekt neu. Jetzt läuft es prima schnell durch

Außerdem benutze ich beim Instanzieren der Quelldaten-Verbindung die Eigenschaft MergeOption=NoTracking

Der eigentliche Fehler war aber, dass ich eine Variabel hatte, in der ich den Migrationsablauf gespeichert hatte - und das hat mich dann den Speicher gekostet
25.11.2013
MyKey0815 1,6k 2 9

Stelle deine Performance-Frage jetzt!