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

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?

0

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

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.

0

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

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.

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?

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