Worauf sollten Sie beim Datenbankdesign achten, wenn Sie wissen, dass der Zugriff auf die Datenbank mit einer Object Relational Mapper- Wikipedia (ORM) möglich ist ? Siehe auch Entity Framework NHibernate oder LLBLGenPro.
Als Beispiel nehme ich das 2100-Parameterlimit beim RPC-Aufruf von SqlServer zur Kenntnis. Dies ist ein Problem bei der Verwendung von LLBLgen und beim Verknüpfen von Tabellen, wenn Verbundprimärschlüssel verwendet wurden. Informationen zu Verbundschlüsseln finden Sie im MSDN-Artikel .
performance
orm
BozoJoe
quelle
quelle
Antworten:
Gehen Sie durch Standardnormalisierungstechniken, hauptsächlich zur 3. Normalform. Einige ORMs können die auf Datenbankebene definierten Beziehungen übernehmen, sodass Sie nicht manuell vorgehen müssen.
Ich würde wirklich in die andere Richtung gehen und fragen, was ich über ORMs wissen sollte. Stellen Sie sicher, dass Sie Folgendes wissen: - Wie kann ich die Abfragen profilieren? - Wie kann ich den ORM überschreiben und meine eigene Abfrage schreiben? - Kann ich stattdessen gespeicherte Procs verwenden?
Die Datenbank sollte ORM-unabhängig sein, da sie höchstwahrscheinlich die App überdauert.
quelle
Lassen Sie den ORM niemals das Schema erstellen oder aktualisieren. Verwenden Sie immer das generierte SQL als Vorlage, aber gehen Sie es durch, bevor Sie die Änderung vornehmen.
Seien Sie sich bewusst, was Ihr ORM nicht kann. Django unterstützte eine Weile keine Gruppe durch das ORM, was eine Qual war (immer noch macht Legacy-Systemen Spaß!). Daher ist es für den DBA ein Muss, sich der Einschränkungen des ORM bewusst zu sein, auch wenn er nicht derjenige ist, der den Code für den ORM schreibt
Nehmen Sie regelmäßig Ihre langsamen Protokolle zur Hand, fassen Sie sie in mysqlslowlog zusammen und schauen Sie sich die Top 10 an. Grundsätzlich werden Ihnen die Abfragen angezeigt, die insgesamt die meiste Zeit in Anspruch genommen haben. Eine Abfrage, die nur durchschnittlich 1 Sekunde dauerte, aber im letzten Monat 50.000 Mal ausgeführt wurde, sticht in diesem Gesamtbericht hervor wie ein Daumenschmerzen;)
Ich würde nicht sagen, dass es so extrem ist, den ORM komplett zu löschen. Wenn Ihre Entwickler, die den ORM verwenden, keine DBAs sind, schreiben sie wahrscheinlich SQL, das genauso schlecht oder schlechter ist als der ORM. So wird es irgendwann auf den DBA fallen, zu schauen, was los ist.
quelle
Es gibt ein paar Dinge, die ich sofort an einer älteren Datenbank bemerke, die sich von einer Datenbank unterscheidet, die von ORMs wie Sequel und ActiveRecord for Ruby erstellt wurde.
'id'
. Ja, das kann überschrieben werden, ist aberid
die Standardeinstellung._id
an Fremdschlüssel angehängten: Das Layout ist in der Regel ähnlichreferenced_table_id
.Ich habe mein SQL jahrelang von Hand geschrieben, weil ich keinem ORM vertraut habe, aber in den letzten zwei oder drei Jahren habe ich angefangen, die beiden zuvor erwähnten ORMs zu verwenden, und bin beeindruckt, wie gut sie in vorhandene Datenbanken integriert sind. und wie gut sie eine Datenbank entschlüsseln können, wenn ihre Konventionen befolgt werden, oder ich nehme mir die Zeit, ihnen die Hinweise zu geben, die zum Verständnis einer alten Datenbank erforderlich sind.
Ich weiß nicht, ob es gemeinsame Richtlinien für das Entwerfen von Schemas gibt, die mit ORMs gut funktionieren, aber ich denke, wir alle würden davon profitieren, wenn wir einige Standards hätten. Es gibt definitiv eine Zeit und einen Ort für ein ORM, besonders wenn Sie eine gute OO-Sprache verwenden und einen engen Zeitplan haben.
quelle
Es hängt (:)) ein wenig davon ab, welchen OR-Mapper Sie verwenden. Informieren Sie sich daher, welche DB-Funktionen der betreffende OR-Mapper unterstützt bzw. nicht unterstützt.
Zum Beispiel unterstützen die OR-Mapper von Microsoft nicht alle integrierten SQL Server-Datentypen, und einige der neueren / erweiterten TSQL-Funktionen (rekursive Abfragen, Optimierungshinweise usw.) werden nicht unterstützt.
Theoretisch sollte ein guter OP-Mapper flexibel genug sein, um ein gut gestaltetes relationales Datenbankschema einem guten Objektmodell zuzuordnen. In Wirklichkeit haben wir noch ein bisschen Zeit, bis alle Teile des Puzzles vorhanden sind. Obwohl viele OP-Mapper erweiterte Zuordnungen unterstützen, geht dies häufig zu Lasten komplexer Abfragen und Leistungsprobleme.
Um eine gute Datenbankleistung zu erzielen (und die Integrität der Datenbank zu erhalten :)), sollten Sie beim Entwurf von DB-Schemas weiterhin die empfohlenen Vorgehensweisen befolgen. Zuerst normalisieren und wo nötig denormalisieren. Auf der Codeseite sollten Sie Ihr Objektmodell nicht übertreiben . Auch wenn der OR-Mapper komplexe Vererbungsmodelle und Entitäten unterstützt, die viele Tabellen zusammenführen, besteht die Gefahr, dass Sie Probleme mit übermäßig komplexen Abfragen in der Datenbank usw. haben. Profil, Profil, Profil und nicht nur das ORM generierte Abfragen für selbstverständlich. Beachten Sie, dass vom OR-Mapper generierte Abfragen oft genau wie normale SQL-Abfragen optimiert werden können und dass zwei funktional äquivalente Abfragen auf der Objektseite (z. B. Linq-Abfragen) manchmal zu sehr unterschiedlichen SQL-Abfragen führen können.
quelle