2010-02-03 5 views
8

Ich bin dabei, einige meiner Entitäten von Identität zu hilo id-Generator zu wechseln.NHibernate und hilo generator: Wie man Schlüsseltabellen gestaltet?

Ich habe keine Ahnung, wie die Tabellen mit den nächst höheren Werten entworfen werden sollten.

  • sollte ich eine einzelne Tabelle für alle Entitäten oder für eine Gruppe verwandter Entitäten verwenden?
  • sollte ich für jede Entität eine andere Tabelle verwenden?
  • sollte ich eine einzelne Tabelle mit einer anderen Zeile oder Spalte pro Einheit verwenden?

Gibt es Best Practices? Was muss beachtet werden? Gibt es irgendwelche Vor- oder Nachteile für einen der Ansätze?

Antwort

3

Ich glaube nicht, dass es eine einzige „best practice“, aber es ist wichtig zu verstehen, wie HiLo funktioniert:

  • Die Tabelle hilo Generator für Datenbanken ausgelegt ist, die Sequenzen nicht unterstützen, die eine mehr sind natürlich fit für diese Aufgabe.
  • Der Hallo Wert für eine Klasse abgerufen und das erste Mal, wenn Sie eine Instanz dieser Klasse speichern aktualisiert, oder beim Ausführen von Lo Werten.
  • Ein anderer Hi Wert wird für jede Klasse verwendet.

So werden Sie mindestens zwei Variablen zu berücksichtigen haben:

  • Contention. Sie könnten die Leistung verbessern ein wenig mit separaten Tabellen
  • Bereich. Mit einer sehr großen Datenbank haben Sie ein größeres Risiko, dass die Hi Werte zu Ende gehen.

Nach Berücksichtigung, ist es nur eine Frage des Geschmacks.

+0

Sie würden also separate Tabellen verwenden? Konkurrenz: meinst du gleichzeitige Transaktionen? Wie sollte eine einzelne Tabelle die Leistung beeinträchtigen? Durch Schlösser darauf? Auf der anderen Seite, wenn Sie viele Tabellen verwenden, gibt es mehr Auswahl und Aktualisierungen, eine für jede betroffene Tabelle. Eine Mischung könnte nützlich sein: eine Tabelle für jede Gruppe verwandter Tabellen. –

+0

Ja, ich würde wegen der Sperren separate Tabellen verwenden. Die Anzahl der Auswahlen/Aktualisierungen ist gleich, da Generatorwerte nicht zwischen Klassen aufgeteilt werden, selbst wenn Sie dieselbe Tabelle verwenden. Denken Sie wieder an das Schlüsselkonzept: Es wird nur eine Tabelle als Sequenzgenerator verwendet. –

+0

Warum ist die Anzahl an Selects/Updates gleich? Wenn ich eine einzelne Tabelle habe, warum sollte sie dieselbe Tabelle für jede Klasse auswählen und aktualisieren, für die sie IDs benötigt? –

Verwandte Themen