![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 350 Pomógł: 31 Dołączył: 23.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
Cześć.
Tworzę serwis na frameworku i będzie on miał charakter sklepu internetowego - więc wiadomo podstawową rzeczą będą atrybuty i wartości do nich. Takich atrybutów może być ok. 15-20 (maks) i wartości atrybutów to ok. do 100 (zwykłe stringi nie przekraczające 25 znaków). Plus dodatkowo robię cache ORMa (w sensie pobieranie struktury kolumn). Ogólnie plików cache będę miał dużo - bo nie tylko atrybuty+wartości+orm wrzucam do cache - staram się wrzucać do cache dane, które zmieniają się z częstotliwością raz na pół roku! Zastanawiam się czy to jest wydajne rozwiązania - przy zapytaniach typu:
itd - czy to gra warta świeczki? Dodam, że atrybuty to serce serwisu więc wiadomo dużo requestów byłoby. Obecnie pracuje na plikach (file cache) - ale jeśli serwerownia ogarnie konfiguracje to przerzucę się na APC. /PS. Ważność cache ustawiam w zależności od ich zmiany - najcześciej jest to 7 dni. Macie wyrobioną opinie odnośnie "pchania" wszystkiego do CACHE? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 890 Pomógł: 339 Dołączył: 14.12.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Tworzę serwis na frameworku Są frameworki, Frameworki i FRAMEWORKI. Cacheowanie jest oczywiście bardzo dobrym sposobem na odciążenie bazy danych i (czasami) samej aplikacji. Jeśli pytasz czy jest sens cache'ować - oczywiście tak. Tylko musisz zrobić to z głową, żebyś np. nie wyświetlił dwóch identycznych paneli edycji profilu dwóm różnym użytkownikom. Jeśli masz jakieś dane zmieniające się raz na pół roku, to jak najbardziej jest sens ich cache'owania. Tylko musisz pamiętać o refreshu/usunięciu cache po każdej zmianie, żeby administrator nie musiał czekać 2 miesiące na zobaczenie zmian na liście atrybutów. Tak czy siak - temat rzeka. Na pewno znajdziesz sporo ciekawych artykułów. Na forum na pewno dostaniesz lepsze odpowiedzi na konkretne pytania niż ogólne. Jako ciekawostkę polecam lekturę o ciekawym rozwiązaniu - Cache Dependency z Yii |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 350 Pomógł: 31 Dołączył: 23.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
Wiadomo odświeżanie cache - podstawa. Nurtuje mnie jeszcze jedna kwestia - produktów będzie maksymalnie 20 i zastanawiam się czy wszystkie 20 upchać do cache (product_id, title, cover_image, description, seo_title, seo_description, itd) czy jednak darować sobie już to? Takie cache będzie już sporo ważyć (dzięki kolumnie "description")
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
Ja bym przestrzegł przed nadmiernym cachowaniem/buforowaniem danych szczególnie, tych które są newralgiczne i mają duże znaczenie przy użytkowaniu portalu/serwisu. Pomyślałeś co będzie np. przy restarcie systemu bo przykładowo prądu braknie?
Dane zalokowane w bazie danych są dużo bezpieczniejsze. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
W moim frameworku są cztery metody cachowania.
- output cache - czyli cała strona (localne pliki) - database cache - czyli wynik zapytania SELECT połączony ze ścieżką URI (lokalne pliki) - variable cache - czyli standardowo klucz:wartość (lokalne pliki, memcache, apc) - pyro cache - cachowanie wyniku wywołania metody dowolnego objektu (lokalne pliki) Pamiętaj że MySQL też ma wbudowany cache, więc można spokojnie trzaskać prostymi zapytaniami, każde wykona się w 0,00008 sek. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 350 Pomógł: 31 Dołączył: 23.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
Nie rozumiem do końca Twojej wypowiedzi Niktoś. Tylko, że system cache będzie opierał się na takim algorytmie:
Kod 1. Data utworzenia cache większa niż 7 dni? -> USUŃ OBECNE CACHE i UTWÓRZ NOWE // pobieramy z bazy np. wszystkie produkty i zapisujemy ponownie na 7 dni // i tak w kółko Kod 2. Stworzenie funkcji w stylu: function pobierzProdukty() { $cache = Cache::instance(); if ( ! $data = $cache->get('produkty') ) { $data = ORM::factory('produkty')->pobierzwszystko(); $cache->save($model, 7 dni); return $data; } else return $data; } i jestem kryty - w przypadku edycji/usuwania produktu - robie delete cache i ponownie wywołuje funkcje pobierzProdukty i spełni się pierwszy warunek |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
W sumie to po co cachować, skoro robi to MySQL?
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
@wNogachSpisz możnaby, także dodać cache serwera który przy odpowiedniej konfiguracji cachowałby natywne pliki jak obrazy(jpg,png itp), css'y.
Chodziło mi, że dane należałoby najpierw gdzieś umieścić na stałe(np.baza danych) i potem cachować(np. z bazy danych). Bezpośrednie wrzucanie wszystkiego do cache jest bezsensowne. Cytat Nie rozumiem do końca Twojej wypowiedzi Niktoś Przy ewentualnym restarcie systemu , jeśli będziesz używał cache to utracisz bezzwrotnie wszystkie dane , gdyż pamięć jest niejako czyszczona. Po za tym cachować należy dane , które nie ulegałyby zmianie. Ten post edytował Niktoś 27.11.2012, 18:18:23 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
Wyciągać dane z bazy tylko po to, żeby za chwile te same dane w niej umieścić ( w nieco ptrzetworzonej formie ).
Efekt - program działa wolniej ![]() Ten post edytował wNogachSpisz 27.11.2012, 18:39:34 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
Cytat Ale po co najpierw wyciągać z bazy żeby potem znowu w niej umieścić? Miałoby to sens, jeśli dane nie ulegałyby zbyt często zmianie(jak już wyżej pisałem). |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 890 Pomógł: 339 Dołączył: 14.12.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Ale po co najpierw wyciągać z bazy żeby potem znowu w niej umieścić? ![]() MySQL też jest dobrym storage'm dla cache'owanych danych. Robisz zapytanie z 10 JOIN'ami a jego wynik zapisujesz do bazy. Dzięki temu kolejne zapytanie o to samo (cache) będzie wykonane na podstawie PRIMARY_KEY, więc będzie o niebo szybsze. Ten post edytował sowiq 27.11.2012, 18:41:28 |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
Cytat Jeśli dane nie ulegają zmianie, to MySQL cachuje zapytania. Nie jest aż taki głupi. Ależ ja nie twierdzę, że piszesz bzdury, wręcz masz rację. Cache MySQL+ natywny cache serwera w zupełności wystarczą. No, ale kto jak woli ![]() Ten post edytował Niktoś 27.11.2012, 18:44:09 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 22:24 |