Sind Beziehungen langsamer als ein großer, ineffizienter Tisch?

8

Ich wurde in meinem Job mehrmals aufgefordert, gegen die erste Normalform zu verstoßen (Spalten über Spalten hinweg wiederholen, wobei Leer- / Nullwerte verwendet werden), "um die Rechenleistung des Computers zu erhöhen". Kurz gesagt, eine "Student" -Tabelle sollte mindestens 8 leere Felder (z. B. Telefone: Telefon1, Telefon2, Telefon3 ...) anstelle meines Vorschlags enthalten - eine "Telefon" -Tabelle, die eine Telefonnummer (und mögliche andere Metadaten) enthält. und der Fremdschlüssel ist die Studenten-ID. Mein Chef sagt, dass es besser ist, sie so zu speichern, weil "es weniger CPU-Zyklen gibt und das auf Webplattformen wichtig ist", anstatt Beziehungen zu verwenden. Ich sage, dass es im schlimmsten Fall vernachlässigbar ist.

In diesem Beispiel ist die Verwendung von Relationen (angenommen, die Tabellen sind mit vielen Datensätzen in einer mittelgroßen Webanwendung gefüllt) erheblich langsamer als die Verwendung dieser Art von Tabellenschema?

AeroCross
quelle
Ich glaube, es wäre tatsächlich schneller, wenn Ihr Chef sagt, aber Sie haben die möglicherweise qualvolle Aufgabe, sicherzustellen, dass Sie keine Update-Anomalien erhalten. Aber es könnte viel mehr CPU-Arbeit verursachen, wenn Sie jemals ein Datenelement ändern müssen, das der Tabelle gemeinsam ist (ändern Sie unter anderem die Vorwahl für alle Telefonnummern ...)
Patrick
3
Ich bezweifle ernsthaft, dass bei moderner Hardware, sofern Sie Ihre Fremdschlüssel indiziert haben, die zusätzliche CPU sogar messbar ist, insbesondere auf der anderen Seite eines Webservers. An meinem Standort haben wir normalisierte Tische und dienen weit nördlich von 50.000 Treffern / Sek., Ohne ins Schwitzen zu geraten. Sagen Sie Ihrem Chef, er soll beim Golf bleiben und die technischen Entscheidungen Ihnen überlassen!
Gaius
1
@Patrick Glauben Sie, dass es erheblich schneller oder nur geringfügig schneller ist? Und ich denke genauso wie @Gaius - auf moderner Hardware ist der Gewinn an Geschwindigkeit und Haltbarkeit von Hardware vernachlässigbar, selbst wenn sie "schneller" ist.
AeroCross
1
Ich denke, die Geschwindigkeitsverbesserung spielt keine Rolle. Nur wenn Sie über große Datenmengen verfügen und lächerliche Verknüpfungen durchführen, können Sie einen spürbaren Leistungsunterschied feststellen.
Patrick

Antworten:

10

Ich sehe nicht ein, wie jemand eine solche Aussage machen könnte, ohne einige tatsächliche Fakten zu haben, um sie zu stützen. Wenn Ihre Abfragen CPU-gebunden sind, sollten Sie nach Möglichkeiten suchen, um diesen Engpass zu verringern.

Es hört sich so an, als ob Ihr Chef der Meinung ist, dass eine denormalisierte Datenbank am besten funktioniert, aber ich weiß nicht genug über Ihre Anwendung, um zu sagen, ob das richtig ist oder nicht. Wie viele Löschungen, Aktualisierungen und Einfügungen werden für diese Tabelle voraussichtlich erwartet?

Ich würde erwarten, dass ein solches denormalisiertes Design zu einer verringerten CPU-Zeit führen kann, würde aber erwarten, dass Ihre Festplatten-E / A zunehmen würden. Und physische Lesevorgänge von der Festplatte sind viel teurer als ein CPU-Zyklus. Vielleicht muss Ihr Chef also eine ganz bestimmte Metrik (CPU) erfüllen und möchte daher ein ganz bestimmtes Design? In diesem Fall würde ich einfach das erstellen, wonach gefragt wird, und die CPU-Kosten für die ausgeführten Abfragen messen. Wenn Sie eine Verlängerung der Zeit feststellen, möchten Sie möglicherweise einige Designänderungen vorschlagen.

In der Tat ist es wahrscheinlich eine gute Idee, eine Liste aller Metriken zu erhalten, die Ihr Chef sehen möchte, und diese im Laufe der Zeit zu verfolgen.

SQLRockstar
quelle
Die Sache ist, dass er alte Schule ist - in seinen Tagen (20 Jahre?) War das vielleicht wichtig, wie er vorschlägt, aber die heutige Hardware und Software ist viel, viel leistungsfähiger und von Natur aus schneller. Es ist jedoch schwierig, mit jemandem wie diesem umzugehen, weil er mehr Macht hat und die empirische (aber veraltete) "Tatsache", dass es schneller ist, und es sollte so betrachtet werden.
AeroCross
1
verstanden. Versuchen Sie, ihn dazu zu bringen, die Metriken (CPU, Festplatte I? O) aufzulisten, die er messen möchte, und was er als akzeptabel ansieht. Dann messen Sie einfach diese Elemente und wenn etwas schief geht, können Sie einige Alternativen anbieten. Auf diese Weise können Sie ein besseres Design kampflos einsetzen. Lassen Sie einfach sein Design sich im Laufe der Zeit beweisen. Eigentlich ist es eine Win-Win-Situation.
SQLRockstar