3 Stimmen

Ist es dumm, ein großes Stapelverarbeitungsprogramm komplett in PL/SQL zu schreiben?

Ich beginne mit der Arbeit an einem Programm, das vielleicht am ehesten als eine Reihe von Berechnungen in Datenbanktabellen beschrieben werden kann und einmal im Monat ausgeführt wird. Die gesamte Eingabe erfolgt in Oracle-Datenbanktabellen, und die gesamte Ausgabe erfolgt in Oracle-Datenbanktabellen. Das Programm sollte über viele Jahre hinweg wartbar bleiben.

Es scheint einfach zu sein, dies als eine Reihe von gespeicherten Prozeduren zu implementieren, die jeweils eine sinnvolle Transformation durchführen, z. B. die Verteilung der Kosten auf die Abteilungen gemäß einigen Geschäftsregeln. Ich kann dann Unit-Tests schreiben, um zu prüfen, ob die Ausgabe der einzelnen Transformationen den Erwartungen entspricht.

Ist es eine schlechte Idee, dies alles in PL/SQL zu tun? Würden Sie schwere Stapelberechnungen lieber in einer typischen objektorientierten Programmiersprache wie C# durchführen? Ist es nicht aussagekräftiger, eine datenbankzentrierte Programmiersprache wie PL/SQL zu verwenden?

10voto

mathewbutler Punkte 959

Sie beschreiben die folgenden Anforderungen

a) Muss in der Lage sein, Batch Processing zu implementieren b) Ergebnis muss wartbar sein

Meine Antwort:

  1. PL/SQL wurde entwickelt, um genau das zu erreichen, was Sie beschreiben. Es ist auch wichtig zu wissen, dass es in PL/SQL Effizienzvorteile gibt, die in anderen Tools nicht vorhanden sind. Eine gespeicherte Prozedurensprache setzt die Verarbeitung direkt neben die Daten - und genau dort sollte die Stapelverarbeitung sitzen.
  2. Es ist leicht genug, schlecht wartbaren Code in jeder Sprache zu schreiben.

Die Umsetzung hängt also von den vorhandenen Fähigkeiten, einem angemessenen Design und der Einhaltung guter Qualitätsprozesse ab.

Um effizient zu sein, muss Ihre Implementierung Daten in Stapeln verarbeiten (stapelweise auswählen und stapelweise einfügen/aktualisieren). Die Gefahr bei einem OO-Ansatz besteht darin, dass man sich leicht zu einem Entwurf verleiten lässt, der Daten Zeile für Zeile verarbeitet. Diese Art von Ansatz enthält unnötigen Overhead und ist deutlich weniger effizient als ein Entwurf, der Daten in Stapeln von Zeilen verarbeitet.

Es ist möglich, beide Ansätze erfolgreich anzuwenden.

Mathew Butler

8voto

Mike McAllister Punkte 1439

Etwas für andere Kommentatoren zu beachten - die Frage ist über PL/SQL, nicht über SQL. Einige der Antworten beziehen sich offensichtlich auf SQL, nicht auf PL/SQL. PL/SQL ist eine voll funktionsfähige Datenbanksprache, und sie ist auch ausgereift. Sie hat zwar einige Mängel, aber für die Art von Aufgaben, die der Fragesteller lösen möchte, ist sie sehr gut geeignet.

6voto

Joe Skora Punkte 14359

Nein, das ist nicht unbedingt eine schlechte Idee. Wenn Ihnen die Lösung einfach erscheint und es Ihnen erlaubt, jeden Prozess zu testen und zu überprüfen, dann könnte es eine gute Idee sein. OO-Plattformen können (müssen aber nicht) schlecht für große Datenmengen sein, da die Erstellung von Objekten und der Overhead die Leistung beeinträchtigen können.

Oracle hat PL/SQL mit Blick auf Probleme wie das Ihre entwickelt. Wenn das Unternehmen über ausreichende Kenntnisse der Datenbank und von PL/SQL verfügt, scheint dies eine vernünftige Lösung zu sein. Denken Sie an große Stapelsätze, da jeder Aufruf von PL/SQL an die eigentliche SQL-Engine ein Kontextwechsel ist, so dass Einzelsatzprozesse nach Möglichkeit in Stapeln zusammengefasst werden sollten, um die Leistung zu verbessern.

4voto

Milan Babuškov Punkte 57324

Stellen Sie nur sicher, dass Sie irgendwie protokollieren, was passiert, während es funktioniert. Andernfalls haben Sie eine Blackbox, und wenn sie stundenlang irgendwo stecken bleibt, werden Sie sich fragen, ob Sie sie stoppen oder noch "ein bisschen mehr" arbeiten lassen sollen.

4voto

Sergey Stadnik Punkte 2940

PL/SQL ist eine ausgereifte Sprache, die sich gut mit SQL integrieren lässt. Mit jeder Version von Oracle wird sie immer leistungsfähiger. Ebenfalls ab Oracle 11 wird PL/SQL standardmäßig in Maschinencode kompiliert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X