Einer meiner Mitarbeiter behauptet, dass parametrisiertes SQL, das von einem ORM generiert wird, auf keinen Fall so schnell ist wie eine gespeicherte Prozedur, auch wenn der Ausführungspfad zwischengespeichert wird. Können Sie diesem hartnäckigen Entwickler helfen?
Antworten
Zu viele Anzeigen?Ich würde nur ein paar Dinge zu Robs Antwort hinzufügen:
Erstens: Stellen Sie sicher, dass die Datenmenge der Testfälle den Produktionswerten entspricht. Mit anderen Worten: Wenn Ihre Abfragen normalerweise gegen Tabellen mit Hunderttausenden von Zeilen gerichtet sind, sollten Sie eine solche Testumgebung erstellen.
Zweitens, machen Sie alles andere gleich, außer der Verwendung einer von nHibernate generierten Abfrage und eines s'proc-Aufrufs. Hoffentlich können Sie den Test ausführen, indem Sie einfach einen Anbieter austauschen.
Schließlich sollten Sie sich darüber im Klaren sein, dass in der Regel viel mehr auf dem Spiel steht als nur Stored Procedures vs. ORM. In diesem Sinne sollte der Test alle Faktoren berücksichtigen: Ausführungszeit, Speicherverbrauch, Skalierbarkeit, Debugging-Fähigkeit, usw.
Die meisten Menschen lassen sich am besten überzeugen, wenn sie "den Beweis" antreten. In diesem Fall würde ich ein paar einfache Testfälle erstellen, um denselben Datensatz abzurufen, und dann die Zeit messen, die die Verwendung von Stored Procedures im Vergleich zu NHibernate benötigt. Sobald Sie die Ergebnisse vorliegen haben, übergeben Sie diese und die meisten skeptischen Leute werden den Beweisen nachgeben.
Das Problem dabei ist, dass Sie die Beweislast akzeptiert haben. Es ist unwahrscheinlich, dass Sie jemanden auf diese Weise umstimmen können. Ob es Ihnen gefällt oder nicht, die Menschen - selbst Programmierer - sind einfach zu emotional, um sich leicht von Logik umstimmen zu lassen. Sie müssen die Beweislast wieder auf ihn abwälzen - bringen Sie ihn dazu, Sie vom Gegenteil zu überzeugen - und das wird ihn dazu zwingen, zu recherchieren und die Antwort selbst zu finden.
Ein besseres Argument für die Verwendung von gespeicherten Prozeduren ist die Sicherheit. Wenn Sie nur gespeicherte Prozeduren, mit keine dynamic sql können Sie SELECT-, INSERT-, UPDATE-, DELETE-, ALTER- und CREATE-Berechtigungen für den Benutzer der Anwendungsdatenbank deaktivieren. Dies schützt Sie vor den meisten SQL-Injections zweiter Ordnung, während parametrisierte Abfragen nur gegen Injektionen erster Ordnung wirksam sind.
- See previous answers
- Weitere Antworten anzeigen
0 Stimmen
Hier ist ein weiterer Link zu einem Artikel von Franz Bouma. Und eine weitere über die Skalierung von gespeicherten Prozeduren. Und natürlich CodingHorror zur Frage der gespeicherten Verfahren.