Frage

Was ist besser? Oder Gebrauch und OR-Mapper mit SP? Wenn Sie ein System mit SP bereits haben, ist ein OR-Mapper wert?

War es hilfreich?

Lösung

Ich mag ORM, weil Sie nicht das Rad neu erfinden müssen. Davon abgesehen, es hängt ganz von den Anforderungen Ihrer Anwendung, Entwicklung Stil und die des Teams.

Diese Frage wurde bereits abgedeckt Warum ist parametrisierte SQL erzeugt durch NHibernate genauso schnell wie eine gespeicherte Prozedur?

Andere Tipps

Es gibt nichts Gutes zu über Stored Procedures gesagt zu werden. Es gab vor eine Notwendigkeit 10 Jahre, aber jeder einzelne Nutzen sprocs der Verwendung ist nicht mehr gültig. Die beiden häufigsten Argumente in Bezug auf Sicherheit und Leistung. Die „Senden Sachen über den Draht“ Mist nicht gilt entweder, ich kann sicherlich eine Abfrage erstellen, dynamisch zu alles auf dem Server zu tun. Eine Sache, die sproc Befürworter werden Ihnen nicht sagen, ist, dass es macht Updates unmöglich, wenn Sie mit Spalte Konfliktlösung auf einer Mergeveröffentlichung. Nur DBAs, die denken, dass sie die Datenbank Oberherr sind bestehen auf sprocs weil es ihre Aufgabe mehr beeindruckend aussehen lässt, als es wirklich ist.

Dies ist ausführlich auf vorherige Fragen diskutiert.

Was sind die Vor- und Nachteile von SQL in Stored Procs gegen-Code

zu halten

Bei meiner Arbeit haben wir meist tun Linie von Business-Anwendungen - Auftragsarbeiten.

Für diese Art von Geschäft, sie ist ein großer Fan von ORM. Vor etwa vier Jahren (wenn die ORM-Tools waren weniger reifen) untersuchten wir auf CSLA und rollte eigenen vereinfachten ORM-Tool, das wir in den meisten unserer Anwendungen verwenden, darunter auch einige der Enterprise-Klasse-Systeme, die mehr als 100 Tabellen haben.

Wir gehen davon aus, dass dieser Ansatz (was natürlich eine Menge Code Generation enthält) eine Zeitersparnis von bis zu 30% in unsere Projekte schafft. Im Ernst, es ist lächerlich.

Es gibt eine kleine Leistung Kompromiss, aber es ist substanzlos, solange man ein anständiges Verständnis der Software-Entwicklung haben. Es gibt immer Ausnahmen, die Flexibilität erfordern.

Zum Beispiel extrem datenintensive Batch-Operationen sollten noch in spezialisierten sprocs wenn möglich behandelt werden. Sie wollen wahrscheinlich nicht 100.000 riesige Datensätze über den Draht senden, wenn Sie es in einem sproc direkt auf der Datenbank tun könnten.

Dies ist die Art von Problem, das Neuling Devs läuft in, ob sie ORM oder nicht verwenden. Sie müssen nur die Ergebnisse sehen, und wenn sie kompetent sind, dann werden sie es.

Was wir in unseren Web-Anwendungen gesehen ist, dass in der Regel die schwierigsten Engpässe zu lösen Leistung nicht mehr Datenbank-bezogene sogar mit ORM. Vielmehr tey're auf dem Front-End (Browser) aufgrund Bandbreite, AJAX-Overhead, etc. Auch sind Mid-Range-Datenbankserver unglaublich mächtig in diesen Tagen.

Natürlich können auch andere Geschäfte, die auf viel größeren High-Demand-Systemen arbeiten, kann es unterschiedliche Erfahrungen haben. :)

Gespeicherte Prozeduren Hände. OR Mapper sind sprachspezifisch und oft Grafik Verlangsamungen hinzufügen.

Stored Procedures bedeutet, dass Sie nicht durch die Sprache Schnittstelle beschränkt, und Sie können in vorwärts kompatibel Möglichkeiten auf, neue Schnittstellen zur Datenbank nur tack.

Meine persönliche Meinung OR Mapper ist ihre Existenz hebt einen Designfehler in der beliebten Struktur von Datenbanken. Datenbank-Entwickler sollten die Aufgaben realisieren Menschen mit kompliziertem OR-Mapper zu erreichen versuchen und serverseitige Dienstprogramme erstellen, die diese Aufgabe bei der Durchführung unterstützen.

OR Mapper sind auch epische Ziele der "leaky Abstraktion" -Syndrom ( Joel On Software: Leaky Abstraktionen )

Wo seine ganz einfach Dinge, die es einfach nicht handle, weil die Abstraktionsschicht finden nicht psychisch zu sein.

Stored Procedures sind besser, meiner Meinung nach, weil sie eine unabhängige Sicherheitskonfiguration aus den zugrundeliegenden Tabellen haben.

Dies bedeutet, dass Sie bestimmte Operationen ohne out ermöglicht schreibt / liest auf bestimmte Tabellen zulassen. Es begrenzt auch den Schaden, den die Menschen tun können, wenn sie eine SQL-Injection-Exploit entdecken.

Auf jeden Fall ORMs . Flexibler, tragbare (in der Regel dazu neigen, sie Portabilität in bauen zu lassen). Im Falle der Langsamkeit Sie können Caching oder Hand abgestimmt SQL in Hot Spots verwenden.

Im Allgemeinen gespeicherte Prozeduren haben mehrere Probleme mit Wartbarkeit.

  • getrennt von Anwendung (so viele Veränderungen haben nun an zwei Stellen durchgeführt werden)
  • im Allgemeinen schwieriger zu ändern
  • schwieriger setzen unter Versionskontrolle
  • härter um sicherzustellen, dass sie aktualisiert (Bereitstellungsprobleme)
  • Portabilität (bereits erwähnt)

Ich persönlich habe festgestellt, dass SP neigen dazu, schnellere Leistung, weise zu sein, zumindest für die großen Datenelemente, die ich auf einer regelmäßigen Basis ausführen. Aber ich kenne viele Leute, die von OR-Tools schwören und nicht etwas anderes tun.

Ich würde argumentieren, dass ein OR-Mapper verwendet wird Lesbarkeit und Wartbarkeit der Anwendungen Quellcode zu erhöhen, während SP verwendet, wird die Leistung der Anwendung erhöhen.

Sie sind nicht eigentlich gegenseitig ausschließen, obwohl sie in der Regel zu Ihrem Punkt sind so.

Der Vorteil von Object Relational Mapping ist, dass Sie Datenquellen tauschen können. Nicht nur die Datenbankstruktur, aber man konnte jede Datenquelle verwenden. Mit Aufkommen Web-Service / Service-orientierte Architektur / ESB, in einer größeren Körperschaft, wäre es klug, eine höhere Trennung von Bedenken berücksichtigen zu müssen als das, was Sie in gespeicherten Prozeduren zu bekommen. in kleineren Unternehmen und in der Anwendung jedoch, die nie eine andere Datenquelle verwenden, dann können SPs die Rechnung in Ordnung passen. Und ein letzter Punkt ist es nicht erforderlich, einen OR-Mapper zu verwenden, um die Abstraktion zu bekommen. Mein ehemaliges Team hatte großen Erfolg, indem Sie einfach mit Hilfe eines Adaptermodell Spring.NET mit Plug-in der Datenquelle.

@ Kent Friedrich

  

Meine persönliche Meinung OR Mapper ist ihre Existenz hebt einen Designfehler in der beliebten Struktur von Datenbanken "

Ich glaube, Sie sprechen über den Unterschied zwischen dem relationalen Modell und objektorientiertes Modell. Dies ist eigentlich, warum wir ORMs brauchen, aber die Implementierungen dieser Modelle wurden mit Absicht getan - es ist kein Design-Flow -. Es ist nur, wie sich die Dinge historisch sein

Verwenden Sie gespeicherte Prozeduren, wo Sie eine Performance-Engpass identifiziert haben. wenn Sie einen Engpass nicht identifiziert haben, was sind Sie mit der vorzeitigen Optimierung tun?
Verwenden Sie gespeicherte Prozeduren, wo Sie sind besorgt über die Sicherheit Zugang zu einer bestimmten Tabelle.
Verwenden Sie gespeicherte Prozeduren, wenn Sie einen SQL-Assistenten haben, der bereit ist zu sitzen und komplexe Abfragen zu schreiben, die miteinander zu verbinden Lasten von Tabellen in einem Legacy-database- die Dinge zu tun, die in einem OR-Mapper hart sind.

Mit der OR-Mapper für das andere (mindestens) 80% Ihrer Datenbank: wo die wählen und Updates so Routinen sind als Zugang über gespeicherte Prozeduren allein eine sinnlose Übung in manueller Codierung zu machen, und wo Updates sind so selten, dass gibt es keine Leistungseinbußen. Verwenden Sie einen OR-Mapper die einfachen Sachen zu automatisieren.

Die meisten OR-Mapper können gespeicherte Prozeduren für den Rest reden.

Sie sollen nicht gespeichert Procs verwenden unter der Annahme, dass sie schneller als eine SQL-Anweisung in einer Zeichenfolge, ist dies nicht unbedingt der Fall in den letzten Versionen von MS SQL Server.

Sie müssen nicht gespeichert Procs verwenden, um SQL-Injection-Angriffe zu vereiteln, gibt es andere Möglichkeiten, dass Ihre Abfrage-Parameter stellen Sie sicher, zu tun, stark typisierte und nicht nur schnur verketteten.

Sie müssen keine OR-Mapper verwenden, um ein POCO-Domäne-Modell zu bekommen, aber es hilft.

Wenn Sie bereits ein Daten-API haben, die als sprocs ausgesetzt sind, müssen Sie eine große architektonische Überholung rechtfertigen ORM zu gehen.

Für ein grün-Felder bauen, würde ich einige Dinge bewerten:

  1. Wenn es im Team ein dedizierter DBA ist, ich sprocs anlehnen würde
  2. Wenn es mehr als eine Anwendung ist die gleiche DB berühren ich sprocs anlehnen würde
  3. Wenn es überhaupt keine Möglichkeit, die Datenbankmigration ist, ich sprocs anlehnen würde
  4. Wenn ich versuche MVCC in der DB zu implementieren, ich sprocs anlehnen würde
  5. Wenn ich mit potenziell mehr Backend dbs (MySQL, MSSQL Oracle) dies als ein Produkt bin bereitstellen, ich ORM anlehnen würde
  6. Wenn ich auf einem festen Termin bin, würde ich auf ORM anlehnen, da es ein schneller Weg ist mein Domain-Modell zu erstellen und sie synchron mit dem Datenmodell zu halten (mit entsprechendem Werkzeug).
  7. Wenn ich das gleiche Domain-Modell in vielfältiger Weise (Web-App, Web-Service, RIA-Client) bin auszusetzen, ich ORM anlehnen werde wie dann Datenmodell dann hinter meiner ORM Fassade versteckt, ein robustes Domänenmodell zu machen ist wertvoller für mich.

Ich denke, die Leistung ein bisschen von einem roten Hering ist; Hibernate scheint fast so gut oder besser ab als von Hand codierte SQL (aufgrund seiner Cachen tiers), und es ist einfach eine schlechte Abfrage in Ihrem sproc so oder so zu schreiben.

Die wichtigsten Kriterien sind wahrscheinlich das Skillset-Team und langfristige Datenbankportabilität muss.

Nun, die SP sind schon da. Es macht keinen Sinn zu können, um sie wirklich machen. Ich denke, macht es Sinn, einen Mapper mit SP zu benutzen?

„Ich versuche, einen Nagel zu fahren. Sollte ich die Ferse meines Schuh oder eine Glasflasche?“

Beide Stored Procedures und ORMs ist schwierig und ärgerlich für einen Entwickler zu verwenden (wenn auch nicht unbedingt für einen DBA oder Architekten, respectively), weil sie eine Anlaufkosten und höhere Wartungskosten anfallen, die keine Pay- garantiert aus.

Beide werden sich auszahlen gut, wenn die Voraussetzungen nicht viel über die Lebensdauer des Systems ändern erwartet werden, aber sie werden in die Quere kommen, wenn das System Gebäude sind die Anforderungen an erster Stelle zu entdecken.

Gerade kodierte SQL oder quasi-ORM wie LINQ und Active ist besser für Build-to-Projekte entdecken (die viel mehr ist als die PR im Unternehmen passieren möchte, dass Sie denken).

Stored Procedures sind besser in einer sprachunabhängig Umgebung oder wo feinkörnige Kontrolle über Berechtigungen erforderlich. Sie sind auch besser, wenn Ihr DBA ein besseres Verständnis für die Anforderungen als Ihre Programmierer hat.

Voll geblasen ORMs besser sind, wenn Sie große Design-Up Front tun, viele UML verwenden, zu abstrahieren wollen, dass die Datenbank-Backend und Ihr Architekt hat ein besseres Verständnis für die Anforderungen als entweder Ihre DBA oder Programmierer.

Und dann gibt es Option # 4: Verwenden Sie alle von ihnen. Ein ganzes System ist nicht in der Regel nur ein Programm, und während viele Programme auf die gleiche Datenbank sprechen können, könnten sie jede Verwendung Egal welche Methode ist geeignet sowohl für die spezifische Aufgabe des Programms, und für den Grad der Reife. Das heißt:. Sie beginnen mit gerade codierten SQL oder LINQ, dann das Programm reifen, indem sie in ORM Refactoring und Stored Procedures, wo Sie sehen, dass sie Sinn machen

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