Roman Piekarski

Roman Piekarski Programista do
wynajęcia

Temat: cache a płaska tabela baz danych

Witam,

Mam maly dylemat optymalizacyjny. Mam kilka tabel gdzie główna tabela łączy się z kilkoma innymi w zależnościach n do m. Biorąć pod uwagę , że wyświetlając listę powiedzmy "produktów" wraz prezentacją detali muszę wykonać joina na wielu tabelach.

Przypadek pierwszy. W celu optymalizacji stosuję cache odswierzany raz dziennie. Zyskuje na tym odciążenie bazy danych i ograniczenie się do wielotabelowego joina na danych pulach id do jednego razu (przy pierwszym razie dla danej akcji/ident generuje się cache)

Przypadek drugi. W celu optymalizacji stosuję cache odswierzany raz dziennie oraz tworzę proces crona, który uzupełnia mi "jedną" tabelę we wszystkie powiązane z nią dane (n - m) tworząc tabelę płaską wraz ze wszelkimi detalami (synchronizacja raz dziennie).
Zyskuję na tym ograniczenie się do prostego selekta raz dziennie dla danych pul id (przy pierwszym razie dla danej akcji/ident generuje cache).

Moje pytanie brzmi: czy warto w takim przypadku bawic się w mechanizm synchronizujący? Logicznie rzecz biorąc zastosowanie dynamicznego cache i tak w znacznym stopniu odciąża nam bazę danych. Z drugiej strony synchronizowana "tabela płaska"/myisam i tak zostanie stworzona dla meniamizmu full text search.

Jaka jest wasza opinia? Liczę na ciekawą dyskusją

Pozdrawiam
Łukasz Giza

Łukasz Giza Tymczasowy
freelancer

Temat: cache a płaska tabela baz danych

Nie byłoby lepiej zamiast Twojego mechanizmu synchronizacji użyć widoków? Nawet MySQL je posiada.

Pod względem wydajności oba rozwiązania różnią się niewiele. Jeśli zapytanie byłoby wykonywane raz dziennie, przy odpowiednio dobranej porze dnia, to bez większego znaczenia byłoby, czy pobierasz z widoku czy z kilku tabel.
Tworząc płaską tabelę czyli widok, pozbawiasz się możliwości hydracji obiektów (chyba, że napiszesz swoją). Tracisz też prostszy dostęp do danych i w szablonach będziesz musiał raczej korzystać z mega długich zapisów. Oczywiście dużo szybsza w tym przypadku będzie hydracja, ale nie napisałeś co dokładnie chcesz cache'ować.

Może warto tworzyć cache widoków (mam na myśli warstwę prezentacji)? Będzie zajmować być może więcej miejsca na dysku, ale będzie jeszcze szybsze. Skoro dane i tak się nie zmieniają, to po co kilkaset razy dziennie przetwarzać te same dane?

Oczywiście dużo tutaj zależy od ilości produktów, ale skoro zakładasz "nie leniwie" budowanie cache'a to zakładam, że nie jest ich wiele.



Wyślij zaproszenie do