Was sind die Hauptgründe ( abgesehen von der "Datenbankunabhängigkeit" ), dass die meisten IT-Projekte heutzutage die Fülle an Funktionen zu ignorieren scheinen, die in modernen Datenbank-Engines wie Oracle 11g und SQL Server 2008 vorhanden sind?
Oder aus dem Blog der Helsinki-Erklärung zu leihen, in dem es so heißt:
In den letzten zwanzig Jahren haben wir festgestellt, dass die Funktionalität (Features), die uns im DBMS zur Verfügung steht, exponentiell gewachsen ist. Mit diesen Funktionen konnten wir Datenbankanwendungen erstellen. Und genau das haben wir alle in den boomenden Neunzigern begonnen.
Aber dann, zu Beginn des neuen Jahrtausends, passierte etwas. Und dass etwas auf mysteriöse Weise dazu führte, dass die Rolle des DBMS in einem Datenbankanwendungsprojekt unbedeutend wurde. (...) Ab dem neuen Jahrtausend verschieben wir die gesamte Anwendungslogik aus dem DBMS auf Server der mittleren Ebene. Die Funktionalität von Dingen, die außerhalb des DBMS implementiert sind, ist explodiert, und das funktionsreiche DBMS wird kaum für etwas anderes als Zeilenspeicherung verwendet.
Wir reden über Sachen wie
- Gespeicherte Prozeduren, die als Daten-APIs verwendet werden (zur Sicherheit und zur Vermeidung übermäßigen Netzwerkverkehrs)
- Materialisierte Ansichten
- Statt-Auslöser
- Hierarchische Abfragen (verbinden durch)
- Geographie (räumliche Datentypen)
- Analytics (Lead, Lag, Rollup, Cube usw.)
- Virtuelle private Datenbank (VPD)
- Prüfung auf Datenbankebene
- Rückblende-Abfragen
- XML-Generierung und XSL-Transformation in der Datenbank
- HTTP-Callouts aus der Datenbank
- Hintergrund Job Scheduler
Warum werden diese Funktionen nicht verwendet? Warum halten die meisten Java-, .NET- und PHP-Entwickler am Ansatz "SELECT * FROM mytable" fest?
Antworten:
Weil gespeicherte Prozeduren:
Dies ist jedoch eine gängige Methode für C # ASP.NET-Anwendungen.
Wie Jeff Atwood es ausdrückte, sind gespeicherte Prozeduren die Assemblersprache von Datenbanken, und Benutzer tendieren nicht dazu, in Assemblersprache zu codieren, es sei denn, dies ist erforderlich.
Ich habe häufig materialisierte Ansichten und manchmal CONNECT BY in Oracle verwendet, von denen ich glaube, dass sie in MySQL nicht existieren.
Ich neige nicht dazu, XML / XSLT in der Datenbank zu verwenden, da dies bedeutet, dass ich XML und XSLT verwende.
Der Grund für geografische oder räumliche Datenstrukturen liegt wahrscheinlich darin, dass sie nur schwer "erfasst" werden können. Es ist ein ziemlich spezialisiertes Gebiet. Ich habe das MySQL-Handbuch zu Geodatenstrukturen gelesen und bin mir sicher, dass es für jemanden mit umfassender GIS-Erfahrung sinnvoll ist, aber für mich und meine begrenzten Bedürfnisse (die dazu neigen, den Breiten- / Längengrad eines Punkts zu markieren) ist dies einfach nicht der Fall Es scheint die Zeitinvestition nicht wert zu sein, es herauszufinden.
Ein weiteres Problem ist, dass Sie sich, wenn Sie über ANSI SQL (viel) hinausgehen, nur ein wenig an einen bestimmten Datenbankanbieter und möglicherweise an eine bestimmte Version gebunden haben. Aus diesem Grund werden Anwendungsentwickler häufig feststellen, dass ihre Datenbanken auf dem kleinsten gemeinsamen Nenner behandelt werden, was bedeutet, dass sie als Speicherplatz für relationale Daten behandelt werden.
quelle
Weil Entwickler nichts über SQL wissen. Sie basieren auf DDL und DML, die von Tools wie Hibernate und Konstrukten auf Sprachebene wie JPA-Annotationen generiert werden. Entwicklern ist es egal, ob diese schrecklich ineffizient sind, weil sie von normalen Protokollstufen gnädigerweise verborgen werden und weil Datenbankadministratoren nicht Teil von Entwicklungsteams sind.
Deshalb mag ich Werkzeuge iBATIS . Sie ermöglichen Ihnen das Schreiben und Verstehen von SQL, einschließlich DBMS-spezifischer Funktionen.
quelle
Dies wird nicht allzu oft gesagt, aber die Vorteile der Verwendung herstellerspezifischer Funktionen müssen gegen die Kosten abgewogen werden. Hauptsächlich die Kosten für das Umschreiben der Teile, die auf herstellerspezifischen Funktionen für jede Datenbank basieren, die Sie unterstützen möchten. Es gibt auch Leistungskosten, wenn Sie etwas allgemein implementieren, wenn der Anbieter einen besseren Weg bietet.
Ich werde dieses Beispiel ansprechen: Möglicherweise ist das "Lockin" von SQL Server akzeptabler, wenn man erkennt, was Analysis Services, Reporting Services usw. für Ihre Anwendung tun können. Bei großen kommerziellen Datenbanksystemen muss nicht "nur" das SQL-Datenbankmodul berücksichtigt werden.
quelle
"Warum werden Datenbankfunktionen ignoriert?"
Da viele sogenannte Entwickler das Datenmanagement nicht kennen und was noch schlimmer ist, wissen sie auch nichts über ihre Unwissenheit. "Ungelernt und ahnungslos", für den dies eine Glocke läutet.
quelle
Wenn Ihre Software auf der Hardware Ihres Clients ausgeführt wird, sind für Änderungen an der Datenbank (neue gespeicherte Prozeduren, aktualisierte Ansichten usw.) DB-Administratorrechte erforderlich. Dies ist fast immer ein Problem für Kunden. Das Einbeziehen der DB-Gruppe erschwert alle Aktualisierungen, die Sie durchführen müssen. Es gibt viele gute Gründe, die hier vorgestellt werden, aber dies ist der einzige, den ich vermeiden muss, um Code wie die Pest in die Datenbank aufzunehmen.
quelle
Ich denke, ein Grund ist die Angst vor dem Locker des Anbieters. Diese DBMS-Funktionen sind nicht standardisiert. Beispielsweise sind gespeicherte Prozeduren sehr DB-spezifisch. Wenn Sie Inhalte mithilfe gespeicherter Prozeduren implementiert haben (anstelle von beispielsweise Webdiensten, die über eine mittlere Ebene verfügbar gemacht werden), bleiben Sie für immer bei dem zuerst ausgewählten DBMS , (es sei denn, Sie sind bereit, Zeit / Geld für die erneute Implementierung in einem anderen DBMS aufzuwenden, wenn Sie das DBMS ändern möchten).
quelle
MySQL.
Als Webanwendungen in den späten 1990ern und frühen 2000ern explodierten, war MySQL auf Version 3.3 oder 4.0 und unterstützte nichts über einfache
SELECT
s. Es war jedoch kostenlos und wurde mit den meisten Linux-Distributionen installiert. Infolgedessen hat eine Generation von Programmierern nichts über Datenbanken gelernt und weiß nicht, wie sie verwendet werden sollen.Selbst jetzt, da MySQL auf 5.1 ist und die meisten Funktionen eines kommerziellen Systems unterstützt, werden beim Start eines neuen LAMP-Projekts dieselben groben alten Blogs und Artikel als Vorlagen verwendet, und MySQL wird mit MyISAM-Tabellen und Funktionen der 3.3-Ära bereitgestellt .
quelle
SQL schlägt aus demselben Grund fehl wie z. B. Haskell. Die Metrik, die den Spracherfolg bestimmt, ist nicht die Reinheit, nicht die einfache Interpretation durch Computer, sondern wie schwierig es ist, darin geschriebene Programme zu verwalten.
Bloße Sterbliche scheitern selbst mit der einfachsten Sprache. Vielleicht hat jeder zehnte Mensch die Fähigkeit, eine einfache Sprache wie C # zu verwenden. Aber von diesen 10% kann nur 1 von 10 oder 1% aller Menschen Sprachen wie SQL oder Haskell effektiv verwenden.
Jetzt ist SQL als Sprache unvollständig, da es nur sehr wenige Dinge gibt, die Sie nur mit SQL tun können. Sie benötigen immer eine andere Sprache. Welche Rolle bleibt das für SQL? Entwickler werden die ACID-Vorteile gegenüber dem Flat-File-Speicher verstehen, aber abgesehen davon haben Datenbanken wirklich nichts zu bieten.
Ein zweites Problem ist, dass SQL effektiv nicht sehr kompatibel mit der Quellversionierung ist. SQL scheint wirklich auf der Vorstellung aufgebaut zu sein, dass Sie es beim ersten Mal richtig machen. Es ist also nicht nur für Entwickler ungeeignet, sondern passt auch schlecht zum Entwicklungsprozess.
quelle
Es ist einfacher, die mittlere Schicht zu reparieren / erneut bereitzustellen als das DBMS.
Dies hängt wahrscheinlich von Ihrer Architektur ab, ist aber unser Grund. Verbinden Sie das mit der Tatsache, dass wir einen DBA haben, der geschäftiger ist und (wahrscheinlich) mehr bezahlt als unsere Entwickler. Alle Entwickler kennen sich mit SQL aus und einige von ihnen sind mit der prozeduralen Sprache bestens vertraut. Wenn ein wirklich haariges Produktionsproblem auftritt, ist es für die Entwickler einfacher und schneller, auf der mittleren Ebene als auf der Datenbank zu arbeiten, unabhängig davon, ob die Architektur auf die eine oder andere Weise besser wäre.
quelle
Ich habe einige Leute getroffen, die einfach nicht wussten, dass solche Funktionen existieren - sie haben sich in den frühen Tagen von mySQL die Zähne geschnitten, und sie haben nie wirklich etwas anderes verwendet, und sie haben nicht mitgehalten die Weiterentwicklung der neuen Speichertabellen in mySQL sogar. Oder sie haben in der Schule Datenbanken gelernt und sind nie zurückgegangen, um all die Dinge zu sehen, die sie verpasst haben.
Sie lernen das absolute Minimum an SQL, um damit auszukommen, und erkennen nicht alle unterschiedlichen Erweiterungen, die verschiedene RDBMS bieten.
Bei einem Projekt hätte ich gerne materialisierte Ansichten ... aber ich verwende Postgres. Ich würde gerne räumliche Datentypen für ein anderes Projekt verwenden, aber ich muss einen Hack durchführen oder Datenbanken ändern, um mit der Beharrlichkeit von mySQL umzugehen, dass sie nicht null sind. Ich musste sogar herausfinden, wie die Transaktionskonsistenz von Oracle deaktiviert werden kann, um lang laufende Abfragen auf einem OLTP zu verarbeiten, die in mySQL kein Problem gewesen wären.
Normalerweise kann ich die Mängel der Datenbank für ein bestimmtes Problem umgehen, aber ein Teil des Problems besteht darin, das richtige Tool für den Job auszuwählen. Bei einem aktuellen Projekt haben wir Mannmonate für die Datenreplikation verschwendet, weil wir es sind mit Postgres entschieden sie sich für Slony-1, bevor sie tatsächlich wussten, was wir replizieren würden.
... Ich betrachte diese Frage als "Warum verwenden nicht mehr Leute Feature x in Sprache y " - wenn sie kein Experte in Sprache y sind , wissen sie möglicherweise nicht, dass Feature x existiert.
(und nimm dies nicht als Unterstützung für die Erlangung der DBA-Zertifizierung ... Ich kenne einige Oracle-DBAs, die sich nicht aus einem nassen Sack heraus programmieren konnten; ich habe alle Kurse in den 8i Tagen belegt, aber weigerte sich, die Tests zu machen, da ich nicht mit dieser Gruppe zusammengewürfelt werden wollte)
quelle
Ich denke, der Hauptgrund, der den Rest überschattet, ist, dass relationale Datenbanksysteme dramatisch an Bedeutung gewinnen, wenn mehrere Anwendungen dieselben Daten gemeinsam nutzen. Codds berühmtes Papier trägt den Titel "Ein relationales Datenmodell für große gemeinsam genutzte Datenbanken" (Schwerpunkt Mine).
Die Leute neigen dazu zu glauben, dass die Bewerbung, die sie gerade schreiben, immer von ihrem Team kontrolliert wird. und dass es immer alle Bedürfnisse von Personen befriedigt, die an den von der Anwendung generierten Daten interessiert sind. Wenn ein neuer Bedarf entsteht, wird dies durch Hinzufügen einer neuen Funktion zu einer vorhandenen Anwendung und nicht durch Erstellen einer neuen Anwendung erfüllt.
Aber in vielen Fällen (natürlich nicht alle; jede Situation ist anders) funktioniert dieses Entwicklungsmodell auf lange Sicht nicht sehr gut. Da sich die von der Anwendung generierten Daten ansammeln und für das Unternehmen immer wichtiger werden, haben verschiedene Personen interessante Ideen zur Verwendung der Daten. Wenn dies passiert und Sie kein relationales Datenbankverwaltungssystem haben, stehen Sie vor einer großen Herausforderung.
quelle
Skalierbarkeit. Je mehr Arbeit Sie dem Datenbankserver geben, desto größer wird der Engpass. Es ist skalierbarer, wenn eine ganze Farm von Anwendungsservern mit Lastenausgleich die Daten verarbeitet und die Datenbank nur als Persistenzspeicher verwendet.
quelle
Ich war in zu vielen Situationen, in denen Unternehmenspolitik ("Wir haben keinen Zugriff auf den SQL Server zugelassen, also können wir ein weniger leistungsfähiges DBMS wie Access installieren, um Millionen von Zeilen zu verarbeiten und dieses mit Millionen von Zeilen in einer anderen Tabelle zu verknüpfen und diesen Import zu automatisieren .. ") oder sogar die technische Politik, die passieren kann (" Ich weiß, dass Access mit dieser Datenmenge umgehen kann, und selbst wenn dies nicht der Fall ist, können wir die MDB in mehrere MDBs aufteilen und auf sie verweisen ..... ")
PFUI. Unternehmenspolitik und technische Politik oder sogar Unwissenheit haben mich daran gehindert, viele Funktionen zu nutzen.
Ein weiteres Beispiel: Ich sehe keinen Grund, gespeicherte Prozeduren nicht in einem 100% Microsoft-Shop zu verwenden, in dem SQL Server das DBMS der Wahl ist. Aber weil der IT-Mitarbeiter, dem die Lösung schließlich gehören würde, SPs "leicht" machte, musste ich auf andere Maßnahmen zurückgreifen. Ich meine, es gibt ein perfektes Beispiel dafür, warum einige dieser "Funktionen" von ihnen in ihrem Geschäft ignoriert wurden.
Ich kenne einen anderen Shop, der immer noch DOS Foxpro 2 verwendet, weil sein einziger IT-Mitarbeiter das vorhandene System so geschrieben hat und auf diese Weise alle neuen Dinge entwickelt werden. Warum? Können wir nicht mit der Zeit gehen? Viele der Marketing-Leute dort haben mehrere DOS-Eingabeaufforderungen gleichzeitig geöffnet, in denen Foxpro-Jobs ausgeführt werden, um die hässlichsten Berichte zu erstellen, die ich je gesehen habe. Aber es funktioniert - das werde ich ihnen geben. Es funktioniert - sie haben 12 Millionen Zeilen in ihrer Haupttabelle und mehr als 50 andere Tabellen, die sie mit dieser Haupttabelle "verbinden" (offensichtlich nicht alle 50 auf einmal), aber Mann ... es ist weit nach 1991! Sie möchten nicht einmal einen Punkt aus der Aufzählungsliste diskutieren, die Sie in Ihrer Frage angegeben haben.
Sachen wie diese ist der Grund, warum ich denke.
quelle
Ich würde sagen, der größte Grund ist, dass die meisten Leute nichts über sie wissen. Sobald jemand eine Lösung für ein Problem gefunden hat, wird dies zur Standardlösung für ähnliche Probleme. SELECT * FROM table hat lange Zeit für viele Menschen funktioniert, sodass sie sich nicht die Mühe machen, nach neuen Ansätzen für alte Probleme zu suchen.
Der andere Grund ist, dass das Schreiben in Code manchmal viel einfacher ist als die Verwendung einer Datenbank. Es ist die gleiche Idee wie das Rollen Ihrer eigenen oder das Kaufen einer Standardkomponente. Die Verwendung einer vorab geschriebenen Funktion kann Ihre Probleme oft lösen, aber hin und wieder müssen Sie etwas tun, das außerhalb der Möglichkeiten der vorab geschriebenen Komponenten liegt.
quelle
Schöne Frage und gute Diskussion.
Ein anderer Ausdruck ist: "Warum haben sich Objekt-DBs nicht durchgesetzt?" Das ist die andere Seite der Medaille. DBs sind nach wie vor eine nervige Abstraktion, die immer noch in jede App eindringt, aber nicht mit der OO-Logik moderner Anwendungen kompatibel ist.
Es ist in der Tat ein seltsamer Zustand, dass wir die Funktionalität von DBs in ActiveRecord, Hibernate und anderen Middlewares verbergen und duplizieren. Dies ist jedoch das, was mit Paradigmen am Bruchpunkt geschieht (die "objektrelationale Impedanzfehlanpassung"). Werden wir jemals auf Datenbanktechnologien umsteigen, die unseren OO-Apps ähnlich sind (z. B. Objekt-DBs)?
Die Antwort lautet "nicht lange". Erwarten Sie in der Zwischenzeit, dass die Datenbank ignoriert und unterdrückt wird und in vielen Fällen nur für die Zeilenspeicherung verwendet wird, da die Funktionalität der mittleren Ebene zunimmt, um die Lücke zu schließen.
Eine andere Frage lautet: "Warum sollte ich das in der Datenbank tun, wenn die mittlere Ebene dies kann?" Die Mittelschicht ist vertraut und gewinnt ständig an Geschwindigkeit und Funktionalität. Auch hier verwenden wir die mittlere Schicht, um die OO-RDMS-Nichtübereinstimmung zu vermeiden.
quelle
Um weiter zu kommen, was Christian über Skalierbarkeit gesagt hat.
RDBMs werden einfach eher als reine Datenspeicher verwendet, während die Logik auf die Anwendungsserver migriert wurde. Die zusätzliche Ebene des AS bietet Entwicklern mehr Flexibilität als die Verwendung des RDBMS als Anwendungsserver.
Früher, in den klassischen Tagen von Fat Apps und Client Server, waren DB und Application Server im Grunde dasselbe. Sie hatten Anwendungslogik entweder in Ihren Fat Client-Code eingebettet oder Sie haben sie wieder in das RDBMS übertragen. Aber damals war die primäre Kommunikationsform SQL direkt mit der Datenbank.
Heutzutage sind andere Anwendungsprotokolle häufiger (CORBA, DCOM, Remote EJB und heutzutage immer häufiger XML / JSON / HTTP-RPC-Protokolle über HTTP). Die meisten Datenbanken reagieren nicht direkt auf diese Protokolle, daher wird eine Anwendungsschicht unterbrochen, um diese Aufrufe abzufangen, und diese Schicht ruft die Datenbank auf.
Aber wie wir gelernt haben, erhalten wir jetzt viel mehr Flexibilität, indem wir dieser Ebene Logik hinzufügen. Größere Auswahl an Tools, mehr Flexibilität beim Caching oder Failover oder sogar Datenbanktechnologie (RDMBS, OODBMS, Dokumentenspeicher wie CouchDB). Diese "neue" 3. Stufe bietet trotz der zusätzlichen Komplexität mehr Flexibilität und Leistung als die damit verbundene Komplexität.
Wenn Ihre App-Ebene ein sehr dünnes Furnier über gespeicherten Prozeduren ist, können Sie sich fragen, warum sie überhaupt vorhanden ist.
Die Nutzung der Datenbank und aller ihrer Funktionen ist auch heute noch eine gültige Anwendungsstrategie. SQL Server, Oracle usw. sind furchtbar leistungsfähige Software.
Selbst dann ist die dritte Stufe enorm hilfreich, um einem modernen System Flexibilität zu verleihen.
quelle
Für mich ist der Grund nicht nur, dass meine Anwendungen datenbankunabhängig sind, sondern dass eine Datenbank die grundlegenden CRUD-Funktionen am besten ausführt. Ja, Datenbanken sind stark optimiert und können möglicherweise ein HTTP-Callout erstellen. Aber warum sollten Sie dies tun? Ein Webservice / eine Webanwendung ist für HTTP-Aufrufe optimiert, keine Datenbank. Genau wie eine Anwendung nicht dafür ausgelegt ist, eine direkte Verbindung zu einer Datendatei herzustellen und die Daten abzurufen. Kann es gemacht werden? Ja aber warum? Das ist nicht das, was Ihre Anwendung auszeichnet.
Ich persönlich bin der Meinung, dass alles, was Sie außerhalb der gespeicherten Prozeduren erwähnt haben, in die Anwendung gehört. Wenn Sie wissen, dass Ihre Architektur X ist, nutzen Sie die Funktionen von X, laden Sie sie gegebenenfalls per Hand auf den DB-Server usw. Wenn es sich um X oder Y (oder Z) handeln könnte, sollte Ihre Anwendung agnostisch sein, es sei denn, Sie sind es Versuchen Sie, Arbeitsplatzsicherheit zu schaffen, indem Sie sicherstellen, dass Sie die Anwendung möglicherweise umgestalten müssen :). Ich denke, ein bisschen Faulheit, kombiniert mit Komfort, könnte etwas damit zu tun haben. Ich weiß, ich würde es lieber in C # als in SQL tun, wenn ich kann. . . Meine C # -Fähigkeiten sind einfach besser.
quelle
Zunächst einmal: Jeder Entwickler, der ein ORM verwendet, ist naiv, wenn er der Meinung ist, dass die Verwendung eines ORM die Notwendigkeit von SQL-Kenntnissen negiert. Die meisten ORMs, die SQL generieren, variieren die ausgegebene SQL abhängig von der Art und Weise, wie die Objektabfragen erstellt werden. Der Entwickler muss die SQL analysieren, um festzustellen, ob er eine der Objektabfragen ändern soll.
Kurze Antwort: Viele dieser Funktionen sind für die OO-Entwicklung nicht praktisch. Ich weiß, dass DBAs das nicht gerne hören, aber es ist die Wahrheit. Diese Funktionen eignen sich für Randfälle, und mit den meisten guten ORMs wie N / Hibernate können Sie SQL für diese Randfälle bereitstellen.
Wenn es darum geht, hauptsächlich an CRUD delegiert zu werden:
Lange Antwort: Ich denke, die RDBMS-Welt leidet unter reifen wachsenden Schmerzen und findet ihren Platz in der Welt. Wahrheit: OOP ist älter als RDBMS. OOP kommt gerade aus seinen wachsenden Schmerzen heraus und reift. Ich denke, SQL als Sprache ist sehr ausgereift, aber die Idee, wie ein RDBMS umgehen soll, wird gerade erst geklärt. Das RDBMS war der Inhaber der Geschäftslogik für die meisten Web-Apps, bis Java und C # auf den Markt kamen. Ich denke, wir fangen gerade erst an, diese Korrektur zu spüren.
Abgesehen davon glaube ich nicht, dass Ihnen ein ORM-Designer sagen wird, dass die Qualität der SQL-Anweisungen, die dem RDBMS zugeführt werden, keine Rolle spielt.
Wenn es um Nicht-CRUD geht, habe ich hier keine Antwort. Die meisten mir bekannten Geschäfte verwenden die DB immer noch für ETL / etc ...
quelle
Es gibt nicht genug Entwickler, die all diese Funktionen auf einer Ebene kennen, die für einen normalen "Middle Tier" -Programmierer wirklich den Unterschied ausmachen würde, wenn es darum geht, dieselbe Logik in DB oder Middle Tier zu implementieren. Vielleicht sind die einzelnen Personen, die wirklich gründliche Kenntnisse über diese Funktionen haben, Datenbankadministratoren. Und diese konzentrieren sich auf andere Probleme als die Entwicklung. Es gibt mehr "normale" Entwickler als Datenbankadministratoren. Es wäre daher sehr schwierig und kostspielig, die richtigen Leute für Ihr Team zu finden.
Ein weiterer Punkt ist, dass Sie normalerweise nur das tiefgreifende Wissen über ein Datenbanksystem sammeln und nicht alle. Sie können also SQL Server-Experten oder Oracle-Experten haben, aber nicht beide. Dies führt (teilweise) zu engen Anwendungsfeldern, in denen eine hohe Spezialisierung zählt. Dann ist der Markt für solche Anwendungen nicht so groß, selbst wenn er da ist.
quelle
Ich denke, der Grund ist eine Kombination aus Lieferantenbindung und mangelndem Wissen der meisten RDBM-Benutzer. SQL ist eine Programmiersprache, und es ist viel schwieriger, sowohl die Sprache, aus der Sie SQL aufrufen, als auch SQL zu beherrschen, als die eine oder andere, insbesondere da SQL eine besonders einzigartige Sprache ist.
Ich denke, die Lösung besteht darin, Ihre Datenbankfunktionalität in eine Dienstprogrammklasse zu abstrahieren und einigen Benutzern, die wissen, was sie mit SQL tun, das Eigentum an der Klasse zu übertragen. Dies minimiert das Risiko einer Lieferantenbindung (wenn Sie den Lieferanten wechseln, wird nur die Klasse neu geschrieben). Dies gibt Entwicklern, die keine SQL-Experten sind, auch eine abstrahierte Oberfläche, sodass sie sich nicht direkt mit der Datenbank befassen müssen.
quelle
Ein Problem, das ich bei der Nutzung der erweiterten Datenbankfunktionalität gesehen habe, ist die Skalierung. Es scheint viel schwieriger zu sein, die Datenbanklast im Vergleich zur Web- / Anwendungsserverlast zu skalieren.
Ihre Optionen sind begrenzt, skalieren mit größerer, schnellerer Hardware (mit manchmal viel höheren Lizenzkosten) oder kompliziert, skalieren mit schreibgeschützten Kopien usw.
Wenn es Leistungsprobleme gibt, möchte ich, dass diese auf der Ebene der Webserveranwendung auftreten. Zumindest besteht eine meiner Optionen darin, einen weiteren Webserver hinzuzufügen und die Last zu verteilen.
Ich argumentiere nicht gegen Code auf Datenbankebene, um den zwischen dem Webserver und dem Datenbankserver gesendeten Netzwerkverkehr (Datensätze) zu minimieren. Ich argumentiere gegen andere Merkmale, z. Umfangreiche Geschäftslogikverarbeitung auf Datenbankebene.
quelle
In einigen Beiträgen wird darauf hingewiesen, dass die Skalierung auf der Anwendungsschicht billiger ist als auf der Datenbankschicht.
Eine weitere Überlegung sind zusammengesetzte Anwendungen, die auf mehrere Datenspeicher zugreifen. Es ist viel einfacher, plattformunabhängige Abfragesprachen in der App-Ebene zu schreiben und zu verwalten als separate plattformspezifische Abfragen in der Datenbankschicht.
quelle
Da das Schreiben objektorientierter Software in der Hostsprache mit nativen Objekten in der Hostsprache das Schreiben von prozeduraler Software übertrifft.
quelle
Ich habe immer an Systemen gearbeitet, die an viele Kunden verkauft werden und auf der Hardware des Kunden laufen. Dies führt zu:
Angesichts all der oben genannten Faktoren muss der Gewinn durch die Verwendung einer Datenbankfunktion groß sein, bevor sich der langfristige Schmerz lohnt.
quelle