2009-04-02 5 views
5

Es scheint mir, sowohl aus persönlicher Erfahrung und SO Fragen und Antworten, dass SQL-Implementierungen erheblich variieren. Eines der ersten Probleme bei SQL-Fragen ist: Welche dbms verwenden Sie?Wie wichtig ist SQL-Portabilität?

In den meisten Fällen mit SQL gibt es mehrere Möglichkeiten, eine bestimmte Abfrage zu strukturieren, sogar mit dem gleichen Dialekt. Aber ich finde es interessant, dass die relative Portabilität verschiedener Ansätze häufig nicht diskutiert oder gar hoch geschätzt wird.

Aber selbst wenn man die Wahrscheinlichkeit ignoriert, dass eine bestimmte Anwendung konvertiert werden kann oder nicht, würde ich meinen, dass unsere Fähigkeiten, Gewohnheiten und Muster so übertragbar wie möglich sein sollten.

Wie stark bevorzugen Sie bei der Arbeit mit SQL die Standard-SQL-Syntax? Wie aktiv scheuen Sie Eigenschaftsschwankungen? Bitte antworten Sie ohne Bezug auf proprietäre Präferenzen für den Zweck der wahrgenommenen besseren Leistung, die die meisten einräumen würde, ist in der Regel eine ausreichend legitime Verteidigung.

Antwort

6

Wir nehmen es in unserem Geschäft sehr ernst. Wir erlauben keine nicht standardmäßigen SQL oder Erweiterungen, es sei denn, sie werden auf ALLEN Hauptplattformen unterstützt. Auch dann werden sie innerhalb des Codes als nicht standardisiert gekennzeichnet, und Begründungen sind notwendig.

Es ist nicht Aufgabe des Anwendungsentwicklers, seine Abfragen schnell auszuführen, wir haben eine klare Aufgabentrennung. Die Abfrage soll nur vom DBMS selbst oder dem DBA-Tuning des DBMS optimiert werden.

Echte Datenbanken, wie DB2/z :-), verarbeiten Standard-SQL viel schneller.

Der Grund, warum wir dies durchsetzen, ist, dem Kunden die Wahl zu geben. Sie mögen die Idee nicht, in einen bestimmten Anbieter eingesperrt zu sein, genauso wenig wie wir.

+0

Interessant, ich hörte solche Dinge von Unternehmen wie SAP. Was ist der Grund für die Lösung des Problems der Herstellerunabhängigkeit auf SQL-Ebene? –

+0

Nicht sicher, ich verstehe die Frage, @Jens. Wenn Sie sich fragen, warum wir nur auf Standards basierende SQL-Standards durchsetzen, können Sie leicht zwischen Anbietern (und Plattformen) wechseln. Also, wenn MySQL es jetzt länger schneidet, können wir zu SQL Server wechseln, dann zu DB2/LUW und schließlich zu DB2/z. Alles ohne die Apps ändern zu müssen. – paxdiablo

+0

/* Aber nie zu Oracle, das kann immer noch nicht den Unterschied zwischen einer leeren Zeichenfolge und einem NULL unterscheiden :-) */ – paxdiablo

1

Es gibt keine eindeutige Antwort, ob SQL-Portabilität wünschenswert ist oder nicht - es hängt sehr stark von der Situation ab, wie zum Beispiel von der Art der Anwendung.

Wenn die Anwendung ein Dienst sein wird - dh es wird immer nur Sie es hosten, dann wird sich offensichtlich niemand aber Sie kümmern, ob Ihr SQL portabel genug ist, so dass Sie es ignorieren können, solange Sie keine haben spezielle Pläne, die Unterstützung für Ihre aktuelle Plattform einzustellen.

Wenn die Anwendung wird an einer Reihe von Standorten installiert werden, die jeweils ihre eigenen etablierten Datenbanksysteme haben, ist offensichtlich SQL Portabilität für Menschen sehr wichtig. Dadurch können Sie Ihren potenziellen Markt erweitern und Kunden, die sich in Bezug auf ihr Datenbanksystem auf dem Zahn fühlen, ein wenig Sicherheit geben. Ob Sie das unterstützen wollen oder ob Sie nur froh sind, zum Beispiel nur an Oracle-Kunden oder nur an MySQL-/PostgreSQL-Kunden zu verkaufen, hängt von Ihnen und Ihrem Markt ab.

Wenn Sie in PHP codieren, wird die große Mehrheit Ihrer potenziellen Kunden wahrscheinlich mit MySQL rechnen. Wenn ja, dann ist MySQL keine große Sache. Oder ähnlich, wenn Sie in C# /. NET sind, dann könnten Sie Microsoft SQL Server annehmen. Wiederum gibt es jedoch eine Kehrseite, da es einen kleinen, aber weniger wettbewerbsfähigen Markt von PHP- oder .NET-Benutzern gibt, die sich mit anderen Datenbanksystemen als den üblichen verbinden möchten.

Also würde ich dies weitgehend als eine Marktforschung Frage betrachten, es sei denn, in meinem ersten Beispiel bieten Sie einen gehosteten Dienst, wo es für die Benutzer keine Rolle spielt, in diesem Fall ist es nur zu Ihrer eigenen Bequemlichkeit.

12

Ich stimme gegen Standard/herstellerunabhängige SQL

  • Nur selten wird die Datenbank tatsächlich eingeschaltet.
  • Es gibt keine einzelne Datenbank, die dem aktuellen SQL-Standard vollständig entspricht. Selbst wenn Sie standardkonform sind, sind Sie nicht herstellerunabhängig.
  • Anbieter Unterschiede gehen über SQL-Syntax. Sperrverhalten ist anders. Die Isolationsstufen sind unterschiedlich.
  • Datenbank-Tests sind ziemlich hart und unterentwickelt. Du musst es nicht noch schwerer machen, indem du mehrere Anbieter ins Spiel wirfst, wenn du sie nicht unbedingt brauchst.
  • gibt es eine Menge Macht in den Verkäufer spezifischen zwickt.(Man denke an ‚Limit‘ oder ‚analytische Funktionen‘ oder ‚Hinweise‘)

So die Quintessenz: - Wenn es keine Voraussetzung für die Herstellerunabhängigkeit ist, erhalten spezialisiert für den Anbieter Sie tatsächlich verwenden. - Wenn es eine Voraussetzung für die Unabhängigkeit des Anbieters ist, stellen Sie sicher, dass, wer auch immer die Rechnung bezahlt, dass dies Geld kostet. Stellen Sie sicher, dass Sie alle verfügbaren RDBMS zum Testen zur Verfügung haben. Und verwenden Sie es auch - Setzen Sie jedes Stück SQL in einer speziellen Schicht, die steckbar ist, so dass Sie die Macht der Datenbank UND arbeiten mit verschiedenen Anbietern verwenden können - Nur wo der Unterschied ist eine reine Frage der Syntax mit dem Standard gehen , z.B Verwenden der Orakel-Notation für (äußere) Joins gegenüber der ANSI-Standardsyntax.

+0

Dieser zweite Anspruch ist ein mutiger; Was ist deine Quelle? Du hast einen Downvote von mir, den ich gerne rückgängig mache (also bitte nicht unnötig vergelten), wenn du den Anspruch begründest oder entfernst. Ich bin sicher informiert, dass DB2/z streng konform ist. – paxdiablo

+0

Wenn Ihre Projekte nicht von Anfang an mehrere Datenbanken angeben und auf mehrere Datenbanken abzielen, ist die Wahrscheinlichkeit für einen Wechsel nahezu gleich Null - kein Grund, portabel zu sein. Ich stimme zu –

+0

Haben Sie die Frage gelesen? 1. Ich habe bereits Datenbankwechsel diskontiert. 2. Denken Sie, dass Auto-Sicherheitsausrüstung irrelevant ist, weil kein Auto crashsicher ist? 3. Nicht-Syntax-Unterschiede sind ein Ablenkungsmanöver. 4. Ich habe nicht mehrere Anbieter geworfen. 5. Und ich habe Leistung als legitime Verteidigung eingeräumt. – dkretz

2

Meiner Erfahrung nach ist die Abfrageportabilität nicht so wichtig. Wir arbeiten mit verschiedenen Datenquellen (hauptsächlich MSSQL und MySQL), aber wir wissen, welche Daten wo gespeichert sind und können entsprechend optimieren. Da wir die Systeme steuern, entscheiden wir, wann - wenn überhaupt - Strukturen verschoben und Abfragen neu geschrieben werden müssen.

Ich möchte auch bestimmte andere serverspezifische Funktionen verwenden, z. B. Abfragebenachrichtigung in SQL Server, die MySQL nicht bietet. Also, wir benutzen es wieder, wenn wir uns um die Portabilität kümmern können.

Darüber hinaus müssen Teile unserer Apps Schemainformationen abfragen und darauf reagieren. Auch hier haben wir einen serverspezifischen Code für die verschiedenen Systeme, anstatt uns auf den kleinsten gemeinsamen Nenner zu beschränken.