Redukcja ilości zapytań do Bazy Danych - warto?

Odpowiedz Nowy wątek
2011-10-13 11:01
0

Zastanawia mnie, jak rozwiązujecie następującą kwestię: w niektórych aplikacjach internetowych czasami trzeba sprawdzać wiele rzeczy (czy użytkownik jest zalogowany, czy ma odpowiednie uprawnienia, dane aplikacji, kontekst strony, ewentualne preferencje itd.). W sieci wszystko może się zmieniać w każdej chwili, np. ilość zalogowanych i zarejestrowanych użytkowników, i niektóre dane muszą być brane pod uwagę przy wyświetlaniu każdej podstrony aplikacji.

Niestety, jak sobie przeglądam, ile aplikacja wydaje zapytań do bazy danych, łapię się za głowę. W każdej podstronie, często po każdym kliknięciu, za każdym razem wydaje SELECT COUNT(USERS) ..., SELECT LOGIN... , SELECT ACCOUNT..., a jak są redirecty (przekierowania, np. aby użytkownik mógł wykonać operacją A, musi najpierw wybrać odpowiednie konto...), to te zapytania się jeszcze dublują!

Logika podpowiada, że są tu 2 sprzeczne kwestie: z jednej strony wszystko może się zmienić w każdej chwili (np. osoba ustawi w aplikacji ACCOUNT=null), z drugiej strony zazwyczaj jednak tego nie zrobi.

Pytanie jednak jest ogólnej natury: jakie macie sposoby na redukowanie ilości zapytań do Bazy Danych w internetowej aplikacji?

Pozostało 580 znaków

2011-10-13 11:32
ASP.NET Newbie

Ładować do cache, jak się zmieni (a jak mówisz zmienia się rzadko) to pukać do db

Pozostało 580 znaków

2011-10-13 16:42
wskaźnik
0

No to pytanie za sto punktów. Jak sprawdzić, czy coś się zmieniło, bez wykonywania zapytania do bazy?
Skoro masz taką masę zapytań to ustawienie żywotności cache na powiedzmy 1 min powinno znacząco zmniejszyć ilość zapytań a jedna minuta to nie tak dużo. Co więcej, możesz ustawić możliwość wyczyszczenia cache w jakiś tam warunkach.

Pozostało 580 znaków

2011-10-13 17:54
ASP.NET Newbie
0

Odpowiedź na pytanie za 100 punktów : dependency cache

Pozostało 580 znaków

2011-10-13 18:05
0

Podzielić cache na "logiczne" fragmenty i czyścić odpowiednie przy zapisie do bazy. Trik polega na dynamicznym obliczaniu, które elementy z cache wywalić.

Generalnie do każdego języka/ platformy powinna być odpowiednia biblioteka. sql dependency cache jest pod .NETa, ale pod Javę czy PHP też coś jest.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit, 2011-10-13 18:13

Pozostało 580 znaków

2011-10-13 20:51
0

Jeśli w aplikacji operowanie na obiektach jest mniej problematyczne, niż na bazie danych, można dodatkowo utworzyć wspólny dla wszystkich obiekt z ww. istotnymi (ale nieczęsto zmienianymi) danymi. Przy każdorazowej aktualizacji bazy danych, również ten obiekt jest aktualizowany. Na przykład: ilość użytkowników zmienia się tylko w dwóch wypadkach: nowy się rejestruje lub jest usuwany; albo inny przykład: aktualne wiadomości, dostępne dla wszystkich, mogą być skopiowane "na stałe" do obiektu. W Javie są na to "firmowe" rozwiązania. Natomiast zastanawia mnie, jak najlepiej tego dokonać w Symfony? Stworzyć własną klasę w katalogu 'lib', a następnie utrzymywać taki trwały obiekt? A może w inny sposób?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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