2013-07-07 13 views
5

Rozważając wydajność,Gdzie sprawdzić ograniczenia, w django lub bazie danych?

1) Czy lepiej zaimplementować i sprawdzić ograniczenie w python/django lub w bazie danych? A może jedno i drugie?

2) W django, gdzie najlepiej sprawdzić ograniczenia? na przykład w funkcji zapisu modelu?

+0

ograniczenia w tej bazie danych służą między innymi do optymalizacji wydajności zapytań. więc możesz sprawdzać ograniczenia tam, gdzie chcesz, ale sugerowałbym utrzymanie ograniczeń w bazie danych włączonych i sprawdzonych pod kątem użycia optymalizatora. – haki

Odpowiedz

6

Django już implementuje ogólne ograniczenia, takie jak klucz podstawowy/obcy i unikalny (dla pojedynczych pól lub kombinacji) bezpośrednio do poziomu bazy danych. Aby uzyskać bardziej szczegółowe ograniczenia, najlepiej umieścić je w Django pod numerem model validation methods. W ten sposób możesz korzystać z funkcji Django, takich jak dziedziczenie modeli i formularze modelowe, bez konieczności przepisywania sprawdzeń ograniczeń w każdym odziedziczonym modelu lub procedurze obsługi formularzy odpowiednio.

Skuteczność metod walidacji będzie tak dobra, jak to możliwe. W rzeczywistości mogą istnieć przypadki, w których nie trzeba będzie trafiać w bazę danych, więc wydajność prawdopodobnie byłaby lepsza niż wdrożenie tego samego ograniczenia na poziomie bazy danych. Na przykład, jeśli zdarzy ci się sprawdzić jakąś kombinację wartości pól modelu w obiekcie, który ma zostać zapisany (nie w porównaniu z innymi zapisanymi obiektami), nie musisz uderzać w bazę danych, ale szybko sprawdzaj na poziomie obiektu Pythona.

+4

Czy to nie oznacza również, że współbieżność może prowadzić do niespójności, ponieważ dwa różne wątki przechodzą weryfikację modelu, a następnie zapisują do bazy danych, nie znając się nawzajem? Nie dla prostych ograniczeń "unikatowych", ponieważ są one przekazywane do bazy danych przez Django, ale jakikolwiek inny rodzaj ograniczenia w zależności od innych wierszy? – spectras

Powiązane problemy