Frage

Ich kämpfe die Verwendung von gespeicherten Prozeduren in unserem Unternehmen zu halten. Es gibt ein paar Leute, die sagen, sie sind schlecht und wir sollten sie nicht verwenden. Wir sind mit DB2 auf der i-Serie.

Bitte Hilfe in meiner Argumentation gespeicherten Prozeduren in meiner Firma am Leben zu halten.

War es hilfreich?

Lösung

OK Ich habe für gespeicherte Procs kommen werde.

Zuerst, wenn man sich ausschließlich verwendet, machen sie Refactoring die Datenbank viel einfacher als Sie die Abhängigkeiten in der Datenbank gespeichert verwenden können, um herauszufinden, was durch eine Änderung sowieso (auch in SQL Server betroffen wäre, kann spricht nicht für andere datbases).

Zweitens, wenn Sie nur die Abfrage ändern müssen, sind sie viel einfacher zu implementieren.

Sie sind, um die Leistung stimmt auch einfacher, da sie leicht die Anwendung ohne Anheizen aufgerufen werden können.

Wenn Sie komplexe Logik haben, dann speichern Sie einige Performance von nicht alle senden zu müssen, dass über das Netzwerk an den Datenbankserver. Kann nicht wie eine große Verstärkung sein, aber wenn die komplexe Abfrage tausende Male am Tag ausgeführt wird, kann es addieren.

Die Sicherheit ist auch extrem wichtig. Wenn Sie keine gespeicherten Prozeduren verwenden, müssen Sie die Rechte am Tisch oder Ansichtsebene festgelegt. Dies eröffnet die Datenbank internen Betrug auf. Ja, parametrisierte Abfragen reduzieren das Risiko von SQL-Injection, aber das ist nicht die einzige Bedrohung Sie hüten müssen. Wenn Sie persönliche oder finanzielle Daten haben, und Sie nicht verwenden gespeicherte Prozeduren (und solche mit NO dynamischen SQL) und den Benutzern beschränken, nur in der Lage, die Dinge durch die Procs zu tun, dann ist das System in extremer Gefahr von internen Mitarbeitern, die stehlen Daten oder Bypass interne Kontrollen Geld entwenden. Lesen Sie mehr über die internen Kontrollen in den Rechnungslegungsstandards zu verstehen, warum dies ein Problem.

ORMs neigen auch besonders einfach absolut schlecht SQL-Code zu schreiben, wenn die Abfrage komplex ist. Weiterhin als Menschen, die sie anstelle von gespeicherten Procs zu verwenden beginnen, habe ich, dass die Leute gefunden, die noch nie ein schlechteres Verständnis von gespeicherten Procs verwendet haben, wie von der Datenbank aus Daten erhalten und häufig die falschen Daten. ein ORM ist in Ordnung, wenn Sie bereits SQL verstehen und kann bestimmen, wann der automatisch generierte Code in etwas neu zu schreiben, das besser funktioniert. Aber zu viele Benutzer haben nicht die Fähigkeit komplexen Code zu schreiben, weil sie nie die Grundlagen gelernt.

Schließlich, da Sie bereits Procs für Ihre Anwendung gespeichert haben, ganz sie loszuwerden ist ein Weg, neue Fehler einführen becasue Sie neuen Code generieren mußten.

Andere Tipps

Sie sind nicht zu wie dies geht, und ich werde wahrscheinlich downvoted in Vergessenheit gehen, aber ich bin mit dem Rest Ihres comapny.

Stored Procedures verwendet, um viele Vorteile (Sicherheit, Leistung, etc.), aber mit parametrisierte Abfragen und eine bessere Abfrageoptimierung, Stored Procedures wirklich nur fügen Sie eine weitere Schicht von Overhead für Ihre Anwendung zu bieten und geben Sie einen anderen Ort, den Sie benötigen Update / ändern Code.

Ich ziehe alles in einem einzigen Punkt zu halten, so dass, wenn ich zu bearbeiten Code benötigen, ich an einen Ort gehen und meine dort Änderungen vorzunehmen.

Wenn Sie weitere Informationen über die Argumente wollen für ein Abrücken von Stored Prcoedures, lesen Sie in diesem Artikel Coding:

Coding Horror: Wer Stored Procedures Needs Wie dem auch sei ?

... und ich habe gerade bemerkt, dass der Artikel aus dem Jahr 2004 ist glaube ich muß, dass Datenbanken besser seitdem bekommen, was bedeutet dies würde läutet noch wahr heute als damals.

Sie alles über JDBC bedeutet im Wesentlichen, dass Sie eine Netzwerkschicht zwischen Ihnen einfügen und der Datenbank. Alles in allem, dass die Daten bedeutet, ist mehr „remote“ und kommen Sie langsamer. Gespeicherte Prozeduren können in der Datenbank direkt auf die Daten arbeiten, und der daraus resultierende Unterschied in der Geschwindigkeit können Sie in Erstaunen versetzen.

Bitte beachten Sie, dass Sie gespeicherte Prozeduren in jeder IBM i Sprache wie Java schreiben können, falls es ist eine Frage der Programmierungen Fähigkeiten. Außerdem haben Sie Zugriff auf die gesamte Maschine, nicht nur einige Datenbank-Interna. Hier ist die AS / 400 ist so ganz anders als jedes anderes Datenbankprodukt, dass Erfahrungen aus anderen Datenbanken einfach - in meine Meinung -. Gilt nicht

Ich würde die Midrange Mailinglisten empfehlen, da sie die größte Konzentration von AS / 400-Programmierkenntnisse ich kenne.

Dies ist eine jener Marmite Fragen. wenn Sie in erster Linie ein Datenbank-Programmierer sind, denken Sie, dass gespeicherte Prozeduren ausgiebig verwendet werden sollen. Wenn Sie ein Anwendungsprogrammierer sind - sagen wir ein Java oder .Net-Coder - die Chancen sind, werden Sie sagen, dass sie vollständig vermieden werden sollte.

Nicht, dass dies trifft Anwendungsprogrammierer ihre eigenen SQL-Anweisungen schreiben möchten. Nein, in diesen Tagen neigen sie dazu, zu abstrahieren, alles hinter gewundenen ORM Dienste zu wollen. Diese sind nicht einfacher als gespeicherte Prozeduren zu verstehen, sondern sind innerhalb der gleichen IDE, so dass sie weniger Kontextwechsel erfordern.

Es gibt zwei große Dinge für gespeicherte Prozeduren. Die erste ist, dass Menschen, die PL / SQL wissen wahrscheinlich mit Oracle-Datenbanken (T-SQL und SQL Server, etc.) vertraut sein, und wird so tendenziell bessere Programme für die Datenbank schreiben (wie Programme definiert, die die Vorteile der Plattform des nehmen verfügt und seine Funktionalität) als Personen ausgestattet, die nicht.

Die zweite Sache ist, dass die Daten weiter besteht. Anwendungsentwickler sind gern reden über „Datenbankunabhängigkeit“, aber was wirklich zählt, ist Anwendung Unabhängigkeit . Frontends kommen und gehen, aber die Datenmodell bleibt für immer. In den letzten zehn Jahren von Java-Anwendungen haben wie Applets, Servlets, JSPs, Fliesen und Gesichter, mit Add-ons in JavaScript, Groovy, AJAX und JSON, eine Verbindung zu der Datenbank durch handgerollte JDBC, EJB (V1,2 geschrieben worden ist, 3), TopLink, Hibernate und iBatis ... verzeiht mir, wenn ich ein paar verpasst haben. Anwendungen, deren UI ist eine Haut über eine Schicht von Stored Procedures sind leichter Upgrade auf die neuesten und besten als Anwendungen, bei denen die Business-Logik hat jedes Mal neu geschrieben werden. Und sie werden auch besser durchführen.

Doch auf lange Sicht Anwendungen, die direkte Interaktion mit der Datenbank werden wahrscheinlich sterben weg. Alles wird auf den Servicebus sprechen, und das wird sich entscheiden, von wo die Daten zu erhalten. Natürlich Geschäfte, in denen die Datenbank über eine gut gestaltete API von gespeicherten Prozeduren ausgesetzt ist, finden es einfacher, als solche Orte dieser schönen neuen Welt zu bewegen, die alles aus ihren ORM Logik gehen zu müssen, extrahieren.

Sie sind nützlich, wenn Sie einen geschichteten Satz von Anwendungen haben. Zum Beispiel kann eine Single-Core-DB mit Web-Service, die die atomaren Operationen anbietet (die Prozeduren gespeichert passieren) und ein ESB oder eine Reihe von Anwendungen jener WSs raubend. In einer Einzel app / Single-db Fall ist die Idee, den Code an einem Ort zu halten, wie andere vorgeschlagen.

Aber gut, das ist nur meine Meinung.

Ich bin seit langer Zeit eine Java-Entwickler, die vor kurzem in mehreren Projekten hat sich die starke Nutzung von gespeicherten Prozeduren vorgenommen, die die Verwendung von gespeicherten Prozeduren in einem wirklich schlechten Licht für mich gesetzt haben.

Having said that, ich bin nur ungern eine pauschale Aussage zu machen, dass gespeicherte Prozeduren schlecht sind als System-Design-Option, weil es wirklich für das Projekt in Frage hängt und was die einzelne gespeicherten Prozeduren versuchen zu erreichen.

Meine Präferenz ist, jede Art von Stored Procedure für einfache CRUD-Operationen zu vermeiden (es kann lächerlich klingen einige gespeicherte Prozeduren diese Operationen behandeln zu haben, aber ich habe mehrere Systeme auf, daß dies taten) - Diese endet resultierende mit in einer Menge Code geschrieben werden (und getestet und gewartet) auf der Java-Seite diese Prozedur Anrufe von zu verwalten, was ich beobachtet habe. Es ist besser, nur Gebrauch Hibernate (oder eine andere ORM-Bibliothek), um diese Arten von Operationen zu handhaben ... wenn aus keinem anderen Grund, als es die Menge an Code zu reduzieren neigt, um gepflegt werden. Es kann auch zu Problemen führen, wenn Refactoring oder macht keine wesentlichen Änderungen an dem System versucht, wie Sie nicht nur zur Sorge, die sie mit Klasse / Tabelle ändert, aber gespeicherte Prozeduren, dass Griff CRUD ops auch. Und dies noch verstärkt werden kann, weiter, wenn Sie in einer Situation sind, wo Entwickler können keine Änderungen an der Datenbank selbst, oder es liegt ein formaler Prozess an seinem Platz zu koordinieren Veränderungen zwischen den beiden Teilen des Systems.

Auf der anderen Seite, gespeicherte Prozeduren zu haben, die eine begrenzte Interaktion mit dem Java-Code erforderlich (im Grunde, die Sie gerade einen Anruf an eine mit ein paar Argumente abfeuern), und in einem halb-autonom laufen ist nicht eine schreckliche Sache entweder . Ich habe ein paar Situationen auftritt (vor allem, wenn wir die Migration oder Daten in ein System importieren), in dem eine gespeicherte Prozedur war ein viel besserer Weg als eine Reihe von Java-Code zu schreiben, die Funktionalität zu behandeln.

Ich glaube, die richtige Antwort hier wäre, dass Sie untersuchen sollen, was jeder Speichervorgang im System gerade macht und bewerten sie auf einer Fall-zu-Fall-Basis zu bestimmen, ob vielleicht ist es einfacher, den Betrieb in Java zu handhaben oder die Datenbank. Einige können sehr gut funktionieren besser in Java (entweder durch ORM-Bibliothek oder tatsächlichen handgeschriebenen Code), einige können nicht. In jedem Fall ist das Ziel sollte immer um sicherzustellen, dass das System verständlich und für jeden leicht zu pflegen, nicht nur, ob gespeicherte Prozeduren gut oder schlecht ist an und für sich.

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