Ich höre Echos aus meiner Vergangenheit und möchte Ihnen einen anderen Ansatz anbieten, nur für den Fall, dass Sie meinen Fehler wiederholen wollen. Es kann oder kann nicht auf Ihre Situation anwendbar sein.
Sie haben geschrieben, dass Sie eine große Menge an Daten aus der Datenbank abrufen müssen und dann in der Datenbank verbleiben.
Wäre es möglich, alle externen Daten, die Sie benötigen, vorübergehend in die Datenbank einzufügen und die gesamte Verarbeitung in der Datenbank durchzuführen? Dies würde die folgenden Vorteile bieten:
- Es entfällt die Notwendigkeit, große Mengen an Daten
- es die Notwendigkeit, große Datenmengen
- Es mengenbasierte ermöglicht zu anhalten eliminiert zu extrahieren Verarbeitung (die Verfahrenstrifft)
- Wenn Ihre Datenbank dies unterstützt, können Sie die parallele Ausführung verwenden
- Es gibt Ihnen ein Framework (Tabellen und SQL), um Berichte über alle Fehler während des Prozesses zu erstellen.
Um ein Beispiel zu geben. Vor langer Zeit habe ich ein (Java) -Programm implementiert, dessen Zweck es war, Einkäufe, Zahlungen und zugehörige Kundendaten aus Dateien in eine zentrale Datenbank zu laden.Zu dieser Zeit (und ich bedauere es zutiefst) entwarf ich die Last, um die Transaktionen nacheinander zu verarbeiten, und führte für jedes Datenstück mehrere Datenbank-Abfragen (sql) und schließlich eine Anzahl von Einfügungen in geeignete Tabellen durch. Natürlich wurde dies nicht größer, sobald das Volumen anstieg.
Dann machte ich einen weiteren Fehler. Ich dachte, dass es die Datenbank war, die das Problem war (weil ich gehört hörte, dass die SELECT langsam ist), so entschied ich mich, alle Daten aus der Datenbank herauszuziehen und ALLE Verarbeitung in Java zu tun. Und dann behalte endlich alle Daten in der Datenbank zurück. Ich habe alle Arten von Schichten mit Callback-Mechanismen implementiert, um den Ladeprozess einfach zu erweitern, aber ich konnte einfach nicht erreichen, dass es gut funktioniert.
Wenn ich in den Rückspiegel schaue, hätte ich die (lächerlich kleine Menge) 100.000 Zeilen provisorisch in eine Tabelle einfügen und von dort verarbeiten sollen. Was fast einen halben Tag in Anspruch nahm, hätte höchstens ein paar Minuten gedauert, wenn ich mit der Stärke aller mir zur Verfügung stehenden Technologien gespielt hätte.