Entity framework, entfernen Sie den Gegenstand aus dem Kontext, aber nicht aus der Datenbank

Arbeite ich an einem batch-Prozess die Müllkippen ~800.000 Einträge von einem langsamen legacy-Datenbank (1.4-2ms pro Datensatz Holen Zeit...es summiert sich) in MySQL, die können führen Sie ein wenig schneller. Um dies zu optimieren, ich habe seit dem laden des MySQL-Datensätze in den Speicher, was bringt die Nutzung auf über 200MB. Dann starte ich das dumping aus der legacy-Datenbank und aktualisieren der Datensätze.

Ursprünglich, wenn diese vollständig wäre die Aktualisierung der Datensätze würde ich dann rufen Sie SaveContext die wären dann meiner Erinnerung Sprung von ~500 MB-800 MB bis 1,5 GB. Sehr bald, ich würde get out of memory " - Ausnahmefehler (die virtuelle Maschine dies ist ausgeführt hat 2 GB RAM) und auch wenn ich ihm mehr RAM, 1.5-2 GB ist noch ein wenig übertrieben und das wäre nur darum, ein Pflaster auf das problem. Um Abhilfe zu schaffen, habe ich begonnen, ruft SaveContext alle 10.000 Datensätze, welche dazu beigetragen, die Dinge zusammen ein bisschen und da war ich mit Delegierten zum abrufen der Daten aus der bestehenden Datenbank und aktualisieren Sie es in MySQL habe ich nicht erhalten zu schrecklich, einen Treffer in der Leistung, da nach 5 Sekunden oder so warten, es war zwar sparen, es würde dann durch das update im Speicher für die 3000 oder so Aufzeichnungen, die hatte gesichert. Jedoch, der Speicherverbrauch hält sich noch nach oben gehen.

Hier sind meine potenzielle Probleme:

  • Die Daten stammen aus der legacy-Datenbank in einer beliebigen Reihenfolge, so kann ich keine chunk-updates und regelmäßig lassen Sie die ObjectContext.
  • Wenn ich nicht packen alle Daten aus der MySQL-vorher und stattdessen schauen Sie während des update-Prozesses von Rekord, es ist unglaublich langsam. Ich habe stattdessen greifen es alle vorher, Stimmen Sie zu einem Wörterbuch indiziert durch die primary key-und wie update ich die Daten Entferne ich die Einträge aus dem Wörterbuch.

Eine mögliche Lösung, die ich dachte, war irgendwie den Speicher frei verwendet werden, die von Unternehmen, dass ich weiß, ich werde nie wieder Anfassen, da Sie bereits aktualisiert wurden (wie z.B. das löschen des cache, sondern nur für ein bestimmtes Element), aber ich weiß nicht, ob das überhaupt möglich ist mit Entity Framework.

Tut jedermann haben irgendwelche Gedanken?

EF scheint nicht das richtige Werkzeug für den job. Warum gehst du nicht einfach migrieren, die Daten direkt?
Migrieren von Daten mit SSIS

InformationsquelleAutor Los Frijoles | 2012-06-29

Schreibe einen Kommentar