Liczba komentarzy dla postu w osobnej kolumnie?

0

Witam,
ostatnio przeglądając jakiegoś projektu strony WWW napisanego w Pythonie (to akurat mało ważne) znalazłem następujący koncept modelu (tabeli bazy danych) dla obiektu Post:

class Post(db.Model):
    __tablename__ = "posts"
 
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey("users.id"))
    title = db.Column(db.String)
    content = db.Column(db.Text)
    date_created = db.Column(db.DateTime, default=datetime.utcnow())
 
    comment_count = db.column_property(
        db.select([db.func.count(Comment.id)]).where(Comment.post_id == id).as_scalar())

Zainteresowała mnie ostatnia linia modelu comment_count, gdzie przechowywana jest liczba komentarzy. Myślałem, że tego typu informacje, jak wspomniana liczba komentarzy jest wyliczana na bieżąco (np. jak użytkownik wyświetli dany post lub listę postów), no ale z drugiej strony, jak chce się wyświetlić 20 wpisów na jednej stronie wraz z informacją o liczbie komentarzy, to do bazy danych poleci dużo (i stosunkowo mało istotnych) zapytań..

Podsumowując - czy tego typu praktyki, jak tworzenie osobnej kolumny i przechowywanie 'stałej' wartości (w kontekście tego, co napisałem) są powszechnie stosowane ? No i czy jest to dobre rozwiązanie?

pzdr,
adamError

0

czy powszechnie to nie wiem, ale są i nie są uznawane za herezje

takie kolumny można uzupełniać wyzwalaczami

0

@abrakadaber - czyli nie wiele wiem więcej ;> A czy ty spotkałeś się z czymś takim i było to słuszne podejście ?

1

każdy projekt bazy jest indywidualny i każde rozwiązanie miało jakieś swoje za i przeciw. Jeśli komentarzy będzie 1-2 na cały wątek to wg mnie nie warto się tym przejmować, jeśli komentarzy jest po kilkanaście do każdego postu to warto rozważyć wyliczanie tego przy dodawaniu komentarza. Szybkość kosztem nadmiarowości zazwyczaj wychodzi na plus o ile nie jesteśmy ograniczeni przez maksymalny rozmiar bazy

2
adamError napisał(a):

A czy ty spotkałeś się z czymś takim i było to słuszne podejście ?
Tak ja u siebie spotykam takie rozwiązanie. Np. mam dwie tabele:

  • DOKUMNETY
  • DOKUMENTY_POZYCJE

I w tabeli dokumentów trzymam sobie wartość żeby móc ją w pokazać userowi bez większych obliczeń. Na początku tak naprawdę nie miało to znaczenia, ale w miarę wzrostu userów jednocześnie podpiętych pod bazę oraz ilości dokumentów (niektóre dokumenty są tworzone automatem i mają po 1000-2000 pozycji, kilka razy w miesiącu zdarzają się dokumenty po 10k pozycji) szybko wyszło, że dla samej wydajności było to dobre rozwiązanie. Po prostu narzut czasowy podczas zapisu jednego dokumentu jest o wiele mniejszy niż wyliczanie tego wszystkiego w locie dla większej liczby dokumentów.

Analogicznie można pomyśleć, że mając system magazynowy w tabeli towarów trzymamy stan ogólny towarów, w dodatku można mieć tabelę w której mamy stany towaru w rozbiciu na magazyn czy co tam jeszcze chcemy mieć szybko dostępne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1