![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 224 Pomógł: 40 Dołączył: 6.07.2004 Skąd: Wuppertal Ostrzeżenie: (0%) ![]() ![]() |
sprawdz czy zapytanie tworzące twoj view, bedzie uzywalo kluczy, jesli tak to wszystko w normie. jesli nie to masz problem, proponuje pgsql:)
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 1 Dołączył: 31.12.2003 Skąd: Bielsko-Biała Ostrzeżenie: (0%) ![]() ![]() |
W mysql widoki nie zawsze są optymalnym rozwiązaniem - polecam lekturę http://www.mysqlperformanceblog.com/2007/0...e-troublemaker/
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
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ę ;-) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 04:58 |