Frage

Ich arbeite mit einem Team zusammen, das versucht, ein EAV -System zu implementieren. Sie haben beschlossen, die Attributwerttabellen nach Typ zu teilen, und sie diskutieren über verschiedene Tabellen für unterschiedliche Größenbereiche von VARCHAR.

EX:

  • TABLE_1 - bis varchar (10)
  • TABLE_2 - VARCHAR (11) bis VARCHAR (500)
  • TABLE_3 - VARCHAR (501) bis varchar (max)

Ich hatte immer den Eindruck, dass varchar Ich würde nur die Größe verwenden, die es brauchte.

Wissen Sie, ob dies eine Leistungserbringung erzielen wird, und wäre es die zusätzliche Codierung / Logik wert, die benötigt werden?

War es hilfreich?

Lösung

Mein Bauch besagt, dass jeder Leistungsgewinn, den Sie erhalten, wahrscheinlich nicht den zusätzlichen Ärger (und das Potenzial für Fehler) wert ist, was darauf zurückzuführen ist, dass die Trennung durchgesetzt und mehrere Lookups in Ihrer Anwendungslogik durchgeführt werden müssen.

Wenn Sie viele kleine Werte haben und waren nur sie abfragen und keiner Von den anderen würden Sie einen gewissen Leistungsgewinn sehen, da mehr Zeilen in jede Seite passen, sodass insgesamt weniger Seiten in RAM verarbeitet oder für eine bestimmte Abfrage von der Festplatte gelesen werden müssen. Sobald Sie alle Eigenschaften auf einmal (oder nur eine Mischung) benötigen, wird dieser Vorteil aus dem Wasser geblasen, indem entweder mehrere Tabellen separat oder über eine Vereinigung abfragen müssen.

Der einzige Weg, um sicher zu sein, besteht natürlich darin, einen einigermaßen realistischen großen Datensatz aufzuregen und einige Leistungstests gegen die von Ihnen in Betracht gezogenen Arrangements durchzuführen. Aber ich bezweifle sehr, dass Sie jede Veränderung sehen werden, die die zusätzliche Komplexität wert ist. Wenn Ihre Daten auf logische Weise aufgeteilt werden können (dh von Ihrer Geschäftslogik impliziert), dann schlage ich vor, dass Sie sich mit der Datenpartitionierung befassen, insbesondere wenn Sie die Partitionen über verschiedene Laufwerke teilen können. Wenn Sie über eine potenziell komplexitätsbezogene Optimierung (einschließlich Partitionierung) nachdenken, gehen Sie immer zurück und überdenken Sie Ihre Gesamtdatenstruktur und stellen Sie sicher, dass sie nicht gegen Ihre Geschäftslogik wirkt und Ihre Hardware für die von Ihnen erwartete Ladung ausreicht - während dies nicht der Garantiert, dass Sie wahrscheinlich viel bedeutendere Gewinne finden, wenn Sie stattdessen diese Kernbereiche untersuchen.

Andere Tipps

Sie werden überhaupt keine Leistungsergebnisse erzielen.

Schnelle Gedanken, überhaupt nicht eine umfassende Analyse:

  • Irgendwann müssen Sie diese erlassen, um eine einzelne Ansicht zu erhalten, und dann wird alles Varchar (max)
  • Wie entscheiden Sie sich im Voraus Länge?
  • Indizierung für die Suche von Werten? Sie können> 900 Bytes nicht indexieren
  • Das Rollen Ihrer eigenen "einzigartigen" Einschränkungen in einem EAV wäre schlimm genug, ohne sich über mehrere Tische zu teilen

Suchen EAV Anti -Muster: Es gibt mehrere Artikel darüber, wie EAV vermeiden

Es hört sich so an, als würden sie versuchen, die EAV für Lookups zu optimieren. Dies klingt jedoch eindeutig so, als würden sie nicht versuchen, ein System für profilierte Mängel zu optimieren, sondern versuchen, über Voodoo -Vermutungen zu optimieren.

Erinnern Sie sie daran, dass die erste Regel der Optimierung die Profilerstellung ist. Nur wenige zehn Millionen von Entitäten) und dann können Sie nicht wissen, dass dies irgendwelche Auswirkungen hat.

Ich werde mit "Nein, das wird nicht so gut wie sie denken" gehen und dass die bessere Aufteilung wahrscheinlich etwas in der Größenordnung von 50 Chars und 100 Chars anstatt 10 und 500 wäre. Aber das ist nur eine Vermutung.


Beachten Sie jedoch, dass es den Effekt haben wird, den sie gewünscht haben, da es eine bessere Indexleistung ermöglicht (alle Datenverzögerungen sollten eine bessere Indexierungsleistung gegenüber der Nichtpartitionierung als allgemeine Faustregel ermöglichen).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top