Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Widoki vs cache
Forum PHP.pl > Forum > Bazy danych > MySQL
athabus
Witam, pracuje właśnie nad projektem sklepu internetowego. Opieram się tu o Symfony (Propel jako ORM). Mam dość skomplikowaną strukturę tabel z produktami, której raczej nie da się już uprościć - ogólnie instancja produktu tworzona jest z wielu tabel gdzie joiny są 2-3 stopniowe tj. tabela a join tabala b join tabela c itd. Ogólnie kluczowe zapytania są na tyle złożone, że mam do wyboru 2 opcje:
- stworzyć dodatkową tabelę z cachem produktów gdzie są dostępne wszystkie potrzebne pola
- stworzyć widok

Z perspektywy utrzymania tego kodu lepiej jest zrobić widok - nie będę musiał powielać operacji zapisu itd. Z drugiej strony cache ma ta przewagę, że jest szybszy w odczycie. No i tu pojawia się właśnie problem - na ile widok oparty na dość złożonym zapytaniu sql łączącym około 6-7 tabel i zawierającym około 20-25 pól będzie obciążeniem dla bazy. Czy taki widok jest cachowany w jakiś sposób czy raczej zapytanie jest wywoływane za każdym razem od nowa? Boję się, że widok przy większym obciążeniu może dać się we znaki. Macie z tym jakieś doświadczenia.

pozdrawiam i z góry dzięki za pomoc
mike
Cytat(athabus @ 30.05.2008, 12:14:38 ) *
Czy taki widok jest cachowany w jakiś sposób czy raczej zapytanie jest wywoływane za każdym razem od nowa? Boję się, że widok przy większym obciążeniu może dać się we znaki. Macie z tym jakieś doświadczenia.
Masz na myśli zapytanie tworzące widok? Nie, nie jest wykonywane za każdym razem. Widoki to obiekty, które są cacheowane.
Pamiętaj, że widoki powstały w końcu, żeby pomagać a nie szkodzić.

Ja na Twoim miejscu postawiłbym w pierwszej kolejności na widok. Jeśli będziesz chciał całość obwarować dodatkowo mechanizmem cacheu to nic nie będzie stało na przeszkodzie by połączyć te dwa rozwiązania.
ActivePlayer
sprawdz czy zapytanie tworzące twoj view, bedzie uzywalo kluczy, jesli tak to wszystko w normie. jesli nie to masz problem, proponuje pgsql:)
Loozak
W mysql widoki nie zawsze są optymalnym rozwiązaniem - polecam lekturę http://www.mysqlperformanceblog.com/2007/0...e-troublemaker/
athabus
Czytałem właśnie dzisiaj ten artykuł i trochę mnie źle nastroił ;-( Zwłaszcza, że optymalizacja BD nie jest moją silną stroną. Trochę się boję, że w pewnym momencie wszystko "padnie i nie wstanie" bo ogólnie struktura musi być elastyczna a zarazem dużo oferować przez co niektóre zapytania są dość złożone.

Ale chyba zrobię tak jak mówi mike - spróbuję oprzeć wszystko o widoki, wypełnię tabelę danymi docelowymi i zrobię testy. Jeśli pojawią się problemy to najwyżej przejdę na opcję z cachowaniem - stracę 2-3 dni a przynajmniej będę miał trochę doświadczeń.

ActivePlayer - zastanawiałem się nad PG, ale trochę boję się tej bazy. Chyba pora kupić jakąś cegłę i usystematyzować trochę wiedzę ;-)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.