Ist es dumm ein großes Batch-Verarbeitungsprogramm vollständig in PL / SQL zu schreiben?

StackOverflow https://stackoverflow.com/questions/78626

  •  09-06-2019
  •  | 
  •  

Frage

Ich fange die Arbeit an einem Programm, das vielleicht am meisten natürlich als Batch-Berechnungen auf Datenbanktabellen beschrieben und werden einmal im Monat durchgeführt werden. Alle Eingaben werden in der Oracle-Datenbank-Tabellen und alle Ausgaben in Oracle-Datenbank-Tabellen sein. Das Programm sollte wartbar bleiben für viele Jahre zu kommen.

Es scheint geradlinig diese als eine Reihe von gespeicherten Prozeduren zu implementieren, die jeweils eine vernünftige Transformation durchführt, beispielsweise Kosten zwischen den Abteilungen nach einigen Geschäftsregeln zu verteilen. Ich kann dann Unit-Tests schreiben zu überprüfen, ob der Ausgang jeder Transformation ist als ich erwartet hatte.

Ist es eine schlechte Idee, das alles in PL / SQL zu tun? Würden Sie eher schwere Batch Berechnungen in einem typischen objektorientierten Programmiersprache wie C #? Ist es nicht mehr Ausdruck einer Datenbank centric Programmiersprache wie PL / SQL verwenden?

War es hilfreich?

Lösung

Normalerweise, so wenig ich sage wie möglich in PL / SQL setzen - es ist in der Regel viel weniger wartbar - bei einem meiner letzten Jobs, die ich wirklich sah, wie chaotisch und schwer, mit ihm arbeiten konnte.

Da es jedoch Batch-Verarbeitung ist - und da der Eingang und Ausgang sind sowohl die DB - es sinnvoll ist, die Logik in PL / SQL zu setzen - „bewegliche Teile“ zu minimieren. Wenn es jedoch waren Business-Logik - oder Komponenten anderer Teile des Systems verwendet - ich würde sagen, tun es nicht ..

Andere Tipps

Sie beschreiben die folgenden Anforderungen

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

Meine Antwort:

  1. PL / SQL wurde nur zu erreichen, entwickelt, was Sie beschreiben. Es ist auch wichtig zu beachten, dass es die Effizienz in PL / SQL, die in anderen Tools nicht verfügbar sind. Eine gespeicherte Prozedur Sprache setzte die Verarbeitung neben die Daten -., Die in der Stapelverarbeitung ist sollte sitzen
  2. Es ist leicht genug schlecht wartbaren Code in jeder Sprache zu schreiben.

Having said die oben Ihre Implementierung auf den zur Verfügung stehenden Fähigkeiten abhängen, eine angemessene Gestaltung und Einhaltung guten Qualität Prozesse.

Um effizient zu sein Ihre Implementierung Daten in Chargen verarbeiten müssen (wählen Sie in den Reihen und insert / update in Chargen). Die Gefahr, mit einem OO-Ansatz ist, dass es einfach ist, zu einem Entwurf geführt zu werden, die Daten Zeile für Zeile verarbeitet. Dieser Ansatz enthält unnötigen Aufwand und wird deutlich weniger effizient als ein Design, das Datum in den Reihen der Zeilen verarbeitet.

Es ist möglich, beiden Ansätze erfolgreich zu nutzen.

Mathew Butler

Etwas für andere commenters zu beachten - die Frage ist über PL / SQL, nicht über SQL. Einige der Antworten sind offensichtlich über SQL, und zwar nicht PL / SQL. PL / SQL ist eine voll funktionsfähige Datenbanksprache, und es ist ebenso ausgereift. Es gibt einige Mängel, aber für die Art der Sache, das Plakat tun möchte, ist es sehr gut.

Nein, ist es nicht unbedingt eine schlechte Idee. Wenn die Lösung Sie einfach erscheint und ermöglicht es Ihnen, jeden Prozess zu testen und zu verifizieren, sein klingt wie könnte es eine gute Idee sein. OO-Plattformen können (obwohl sie müssen nicht sein) schlecht für große Datenmengen, wie Objekterstellung und Overhead kann die Leistung töten.

Oracle entwickelt PL / SQL mit Problemen wie Ihr im Auge, wenn es genügend Unternehmenswissen der Datenbank ist und PL / SQL diese wie eine vernünftige Lösung zu sein scheint. Halten Sie große Batch-Sets im Auge, da jeden Anruf von PL / SQL auf den tatsächlichen SQL-Engine ist ein Kontext-Switch, so sollten Einzelsatzverfahren chargiert werden zusammen wenn möglich, die Leistung zu verbessern.

So stellen Sie sicher, dass Sie irgendwie einzuloggen, was geschieht, während es funktioniert. Ansonsten finden Sie eine Black-Box haben, und wenn es stundenlang irgendwo stecken bleibt, werden Sie, ob es zu stoppen wundern oder es ein bisschen mehr "arbeiten lassen.

PL / SQL ist eine ausgereifte Sprache, die gut mit SQL integriert. Mit jeder Version von Oracle wird es mehr und mehr mächtig. Auch von Oracle startet am 11, PL / SQL kompiliert in Maschinencode standardmäßig aktiviert.

schrieb ich eine riesige Menge an Stapelverarbeitung und Berichterstellung Programme sowohl in PL / SQL und Pro C für ein Projekt. Sie in der Regel bevorzugt ich in PL / SQL als ihre eigenen Entwickler schreiben, die in der Zukunft halten würde festgestellt, dass leichter zu verstehen als Pro C-Code.

Es endete nur die wirklich abgefahrene Verarbeitung oder Berichte sind nach oben, die in Pro * C geschrieben gelandet ist.

Es ist nicht notwendig, diese als gespeicherte Prozeduren zu schreiben, wie andere Leute erwähnt haben, können sie nur Skriptdateien, die als notwendig, ein bisschen wie ein Shell-Skript ausgeführt werden. Machen Sie Quellcoderevisionskontrolle und Migration zwischen Test- und Produktionssystemen eine verdammt viel einfacher, zu.

Solange die Berechnungen, die Sie durchführen müssen, können in PL / SQL erfasst angemessen und leserlich sein, dann nur PL / SQL verwenden würde am meisten Sinn machen.

Der eigentliche Haken ist, Wartbarkeit - es ist sehr einfach wartbaren SQL zu schreiben, wenn auch nur, weil jedes RDBMS eine andere Syntax hat und andere Funktion einstellen, wenn Sie außerhalb von einfachen SQL-DML Schritt und keine echten Standards für die Formatierung. Kommentierung, etc.

Ich habe Batch-Programme erstellt C # und SQL.

Pros von C #:

Sie haben die vollständige Bibliothek von .NET und aller Macht einer OO-Sprache bekommen.

Nachteile von C #:

* Batch-Programm und db getrennt -. Dies bedeutet, werden Sie Ihr Batch-Programm getrennt von der Datenbank verwalten müssen

* Sie müssen alle, dass dang SQL-Code zu entkommen.

Pros von SQL:

* fügt sich perfekt mit dem DBMS. Wenn dieser Job nur die Datenbank verändert, wäre es sinnvoll, sie mit der Datenbank aufzunehmen. Sie enden mit einem einzigen db und alle seine Komponenten in einem Paket.

* Keine Notwendigkeit SQL-Code zu entkommen

* it real zu halten - Sie programmieren in Ihrem Problembereich

Nachteile von SQL:

Die SQL und ich persönlich einfach nicht wissen, dass es nicht so gut wie SQL.

Im Allgemeinen würde ich Stick mit SQL verwenden, weil der Pros oben beschrieben.

Dies ist eine geladene Frage :) Es gibt ein paar Datenbank-Programmierung Architektur-Designs Sie wissen sollten, und was ihre Kosten / Nutzen sind. 2 Tier im Allgemeinen bedeutet, dass Sie einen Client an eine DB verbinden, Ausgabe direkte SQL-Aufrufe. 3 Tier im Allgemeinen bedeutet, dass Sie einen „Application Server“, die Anrufe direkt SQL an die DB ausgibt, aber der Kunde spricht mit dem App-Server. Im Allgemeinen bietet diese „horizontale Skalierung“. Schließlich haben Sie 2 1/2 Tiered-Anwendungen, die einen 2-Tier-ähnliches Format verwenden, nur die Arbeit innerhalb von gespeicherten Prozeduren in Kompartimente.

Ihr Prozess klingt wie eine „Back-Office“ Art der Sache, und Kunden / Prozesse nur Ergebnisse benötigen, die auf einen einmal im Monat Basis aggregiert und zwischengespeichert werden. Das heißt, es gibt keine Mittel ist, das verbindet und verbindet oft und sagt: „Diese Berechnungen“. Stattdessen verweisen Sie auf einen Prozess, der hin und wieder passiert, und Sie können mit Nicht-Echtzeit weg.

Daher diese Anforderungen gegeben, würde ich, dass im Allgemeinen sagen, wird es schneller sein, die Daten näher zu sein, und lassen Sie SQL Server alle Berechnungen zu tun. Ich glaube, Sie werden feststellen, dass die Nähe zu den Daten finden Sie gut dienen.

Um jedoch diese Berechnungen in der Durchführung, können Sie feststellen, dass einige Berechnungen zu SQL Server nicht zugänglich sind. Nehmen Sie zum Beispiel die aufgelaufenen Zinsen einer Anleihe zu berechnen, oder einem festverzinslichen Instrument. Nicht sehr hübsch in SQL und vieles mehr geeignet für eine reichere Programmiersprache. Wenn Sie jedoch nur einfache Mittelwerte und andere relativ gesund Aggregate haben, würde ich auf gespeicherte Prozeduren halten, auf der SQL-Seite.

Also noch einmal, es gibt nicht genug Informationen über die Art Ihrer Berechnungen, oder was Ihr Haus Mandate in Bezug auf den SQL-Funktionen von Devs für die Unterstützung, oder was Ihr Chef sagt ... aber da ich weiß, dass meine Art und Weise um SQL, und wie nah an die Daten zu bleiben, würde ich reine SQL / Stored Procedures für eine Aufgabe wie diese bleibt.

YMMV:)

Es ist nicht in der Regel aussagekräftiger, da die meisten gespeicherten Prozedur Sprachen nach Design saugen. Aber es wird wahrscheinlich schneller läuft als in einer externen Anwendung.

Ich denke, es läuft darauf hinaus, wie vertraut Sie mit PL / SQL sind, wie viel Zeit Sie dies schreiben, wie wichtig ist die Leistung und wenn man vernünftigerweise Maintainer erwarten können mit PL / SQL vertraut genug, um eine große zu halten Programm geschrieben in ihm.

Wenn die Geschwindigkeit nicht relevant ist und Maintainer wird wahrscheinlich nicht PL / SQL beherrscht, könnte man besser mit einer ‚traditionellen‘ Sprache.

Sie auch einen hybriden Ansatz nutzen könnten, wo Sie PL / SQL verwenden Zwischendaten zu erzeugen (zum Beispiel Tabellen-Joins und Summen oder was auch immer) und eine separate Anwendung zu Fluss steuern und Werte und Fehler überprüfen.

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