Frage

In meinem Rails App ich mehrere Modelle haben den Umgang mit Vermögenswerten (Anhänge, Bilder, Logos etc.). Ich verwende attachment_fu und so weit ich habe 3 verschiedene Tabellen für die Informationen in meiner MySQL DB zu speichern.

Ich frage mich, ob es einen Unterschied in der Leistung macht, wenn ich STI verwendet und alle Informationen in nur 1 Tisch, eine Art Spalte und verschiedene, geerbten Klassen hat. Es wäre DRY und leichter zu pflegen, weil alle viele Attribute und Eigenschaften aufweisen.

Aber was ist schneller? Viele Tabellen und weniger Zeilen pro Tabelle oder nur eine Tabelle mit vielen Zeilen? Oder gibt es keinen Unterschied überhaupt? Ich werde mit vielen Informationen und viele Anfragen pro Sekunde zu tun haben.

Vielen Dank für Ihre Meinung!

War es hilfreich?

Lösung

Viele Tabellen und weniger Zeilen sind wahrscheinlich schneller.

Das ist nicht, warum Sie es tun sollten, aber: Ihre Datenbank sollte Ihr Problem Domain modellieren. Ein Tisch ist ein armes Modell vielen Entitätstypen. So werden Sie viel, viel Code am Ende Schreiben der Teilmenge der Tabelle zu finden, die den Entitätstyp darstellt, die Sie gerade beschäftigt sich mit.

Regelmäßige, akzeptiert, saubere Datenbank und Front-End-Client-Code werden nicht funktionieren, weil Ihr one-table-was-ist-all-things-und-nicht-was-at-all.

Es ist langsamer, zerbrechlich, wird Ihr Code alle über euch App multiplizieren, und macht ein schlechtes Modell.

Dieser Do nur , wenn alle Dinge haben genau die gleichen Attribute und die gleiche (oder möglicherweise Liskov substituierbar) semantische Bedeutung in Ihrem Problembereich.

Ansonsten nicht einfach einmal versuchen, dies zu tun.

Oder wenn Sie das tun, fragen, warum dies jeder ist besser als eine große Karte / Hash-Tabelle / assoziatives Array mit allen Einheiten in der App (und viele Funktionen zu halten, die meisten von ihnen duplicared, Ausschneiden und Einfügen, und aus Bisher tun switch Fällen oder RTTI die reale Art jeder Einheit, um herauszufinden).

Andere Tipps

Der einzige Weg, um sicher zu wissen ist, beiden Ansätze zu versuchen, die Leistung zu messen.

Generell hängt es, wenn Sie schließt sich in diesen Tabellen zu tun, und wenn Sie sind, wie die Tabellen indiziert werden. Generell Datenbank verbindet teuer sind, weshalb Datenbankschemata manchmal denormalized Leistung zu verbessern. Dies gilt in der Regel nicht passieren, bis Sie mit einem schweren Datenmenge obwohl das heißt Millionen von Datensätzen zu tun. Sie haben wahrscheinlich nicht das Problem noch und vielleicht auch nie.

Wenn Zeilen dann dieselben Attribute haben, ja, das ist eine Tabelle sehr besser, und nur eine Zeile Datentyp angeben, andernfalls verwenden Tabellen differents zu behandeln, dass eine bessere Performance, Codemenge und sogar in der lisibility von Code ebenfalls.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top