2010-02-03 11 views
8

Mam zamiar zmienić niektóre moje jednostki z tożsamości na hilo id-generator.Generator NHibernate i hilo: jak zaprojektować kluczowe stoły?

Nie mam pojęcia, jak powinny być zaprojektowane tabele zawierające wartości o następnych wysokich wartościach.

  • Czy należy używać pojedynczej tabeli dla wszystkich podmiotów lub grupy powiązanych podmiotów?
  • Czy powinienem użyć innej tabeli dla każdej jednostki?
  • Czy należy używać pojedynczej tabeli z innym wierszem lub kolumną na jednostkę?

Czy są jakieś sprawdzone metody? Co należy wziąć pod uwagę? Czy są jakieś plusy lub minusy dla każdego z podejść?

Odpowiedz

3

Nie sądzę, nie ma jednego „najlepszego” praktyka, ale ważne jest, aby zrozumieć, jak HiLo działa:

  • Generator stół hilo przeznaczony jest do baz danych, które nie obsługują sekwencje, które są bardziej naturalne dopasowanie do tego zadania.
  • Wartość dla klasy jest pobierana i aktualizowana przy pierwszym zapisaniu instancji tej klasy lub po wyczerpaniu wartości Lo.
  • Dla każdej klasy używana jest inna wartość Hi.

Tak, trzeba rozważyć co najmniej dwie zmienne:

  • niezgody. Możesz poprawić nieco wydajność , korzystając z oddzielnych tabel
  • Zasięg. Przy bardzo dużej bazie danych istnieje większe ryzyko, że ostatecznie wyczerpią się wartości Hi.

Po rozważeniu tego, to tylko kwestia gustu.

+0

Więc należy rozważyć użycie oddzielnych tabel? Spór: czy masz na myśli równoległe transakcje? W jaki sposób pojedyncza tabela wpływa na wydajność? Przez blokady na nim? Z drugiej strony, przy korzystaniu z wielu tabel dostępnych jest więcej wyborów i aktualizacji, po jednym dla każdej tabeli dotkniętej problemem. Przydatna może być mieszanka: tabela dla każdej grupy powiązanych tabel. –

+0

Tak, używałbym oddzielnych tabel ze względu na blokady. Ilość wyborów/aktualizacji jest taka sama, ponieważ wartości generatora nie są współużytkowane przez klasy, nawet jeśli używa się tej samej tabeli. Ponownie, należy pamiętać o kluczowej koncepcji: jest to po prostu użycie tabeli jako generatora sekwencji. –

+0

Dlaczego liczba wyborów/aktualizacji jest taka sama? Kiedy mam jedną tabelę, dlaczego powinien wybrać i aktualizować tę samą tabelę dla każdej klasy, której potrzebuje ids? –