Ich muss einige Datenbanktabellen entwerfen, bin mir aber nicht sicher über die Auswirkungen auf die Leistung. In meinem Fall geht es mehr um die Leseleistung als um das Speichern der Daten.
Die Situation
Mit Hilfe der Mustererkennung finde ich heraus, wie viele Werte eines bestimmten Objekts in meiner postgresql-Datenbank gespeichert werden müssen. Amount other sagen wir feste Eigenschaften der einzige Unterschied ist, wenn 1, 2 oder 3 Werte des gleichen Typs gespeichert werden müssen.
Gegenwärtig gibt es 3 Entitäten / Tabellen, die sich nur dadurch unterscheiden, dass sie 1, 2 oder 3 nicht nullbare Eigenschaften desselben Typs haben.
Zum Beispiel:
%Vor%Ich erwarte mehrere Millionen Datensätze in der Produktion und ich denke, was könnte die Leistung Auswirkungen dieser Variante und was Alternativen sein könnten.
Alternativen
Andere Optionen, die mir in den Sinn kommen:
Zum Beispiel:
%Vor%Da ich im Datenbankdesign nicht so stark bin und mit Hibernate arbeite, bin ich an den Vor- und Nachteilen dieser Ansätze interessiert und wenn es noch mehr Alternativen gibt. Ich möchte sogar die Frage stellen, ob postgresql die richtige Wahl dafür ist oder ob ich darüber nachdenken sollte, eine andere (freie) Datenbank zu verwenden.
Danke!
Der Fall ist meiner Meinung nach ziemlich klar: Wenn Sie eine Obergrenze von drei Eigenschaften pro Objekt haben, verwenden Sie eine einzige Tabelle mit nullwertfähigen Attributen.
Ein NULL-Wert belegt keinen Speicherplatz in der Datenbank. PostgreSQL speichert für jede Zeile eine Bitmap, die angibt, welche Attribute NULL sind. Diese Bitmap wird immer gespeichert, außer wenn für alle Attribute keine Nullwerte zulässig sind. Einzelheiten finden Sie in der Dokumentation Machen Sie sich in diesem Fall also keine Gedanken über Speicherplatz.
Wenn Sie drei verschiedene Tabellen verwenden oder die Attribute in einer separaten Tabelle speichern, führt dies wahrscheinlich zu UNION
s oder JOIN
s in Ihren Abfragen, wodurch die Abfragen komplizierter und langsamer werden.
Es gibt viele Vererbungsstrategien für die Erstellung von Entitätsklassen. Ich denke, Sie sollten mit der Einzeltischstrategie gehen, wo es eine Diskriminatorspalte gibt (verwaltet von hibernate selbst), und alle gemeinsamen Felder werden von jeder Entität und bestimmten verwendet Felder werden von bestimmten Entitäten verwendet und bleiben für andere Entitäten null. Dies wird die Leseleistung verbessern. Für Ihre Ref. : Ссылка
Tags und Links database hibernate postgresql database-design