|
RatDev - 29 Cze 2003, 08:12 Witam! Moja aplikacja dosc mocno korzysta z bazy danych. Wiekszosc W momencie gdy wykonam nowe zapytanie wrzucam je do To fajnie dziala, po pewnym czasie w cachu jest duzo pozycji i aplikacja prawie wogole nie korzysta z bazy. Pojawia sie tylko jedna watpliwosc. Ktos ma moze pomysl jak przebudowac ten cache by nie bylo Dzieki, Rafal 'Raf256' Maj - 29 Cze 2003, 08:12 Ktos ma moze pomysl jak przebudowac ten cache by nie bylo ryzyka zuzycia calej pamieci, a z drugiej strony by dzialal efektywnie? Najlepiej gdyby jakos sam sie oczyszczal z zadko pobieranych danych czy cos w tym stylu. Mapuj stringi na obiekty np cOdpowiedz - gdzie oprocz samej odpowiedzi zapametasz tez czas jej udzielenia, jezeli np. baza bedzie wieksza inz powiedzmy 50 mb, to wyrzucaj najstarsze odpowiedzi i juz. Oczywiscie przy kazdej "trafionej" odpowiedzi - ustawiaj ponownie zapisany mm - 29 Cze 2003, 08:12 Witam! Moja aplikacja dosc mocno korzysta z bazy danych. Wiekszosc W momencie gdy wykonam nowe zapytanie wrzucam je do To fajnie dziala, po pewnym czasie w cachu jest duzo pozycji i aplikacja prawie wogole nie korzysta z bazy. Pojawia sie tylko jedna watpliwosc. Ktos ma moze pomysl jak przebudowac ten cache by nie bylo Dzieki, http://www.onjava.com/pub/a/onjava/2002/03/06/topten.html Zobacz LRUCache mm RatDev - 29 Cze 2003, 08:28 Witam! Mapuj stringi na obiekty np cOdpowiedz - gdzie oprocz samej odpowiedzi zapametasz tez czas jej udzielenia, jezeli np. baza bedzie wieksza inz powiedzmy 50 mb, to wyrzucaj najstarsze odpowiedzi i juz. ok, tez o tym myslalem. Ale tu powstaje problem, ze co pewien czas bede musial przejsc po tych wszystkich obiektach i sprawdzic te wszystkie wartosci. Boje sie, ze w momencie gdy w cachu bedzie kilka tysiecy obiektow rd Lukjel - 29 Cze 2003, 08:43 Witam! | Mapuj stringi na obiekty np cOdpowiedz - gdzie oprocz samej odpowiedzi ok, tez o tym myslalem. Ale tu powstaje problem, ze co pewien czas Zastosuj jakas kolekcje sortowana. To powinno rozwiazac problem. KAsujesz 'najstarsze'. Ja bym jeszcze zastosowal inna strategie usuwania - notowalbym 'CZAS POTRZEBNY NA UZYSKANIE ODPOWIEDZI' i usuwal te, ktore wykonaly sie najszybciej. No bo co z tego ze jedno pytanie bylo zadane pol godziny temu jezeli na jego wykonanie porzeba bylo 5 minut. Wtedy lepiej wywalic cos co bylo zadane moze i minute temu, ale wymagalo zaledwie 5 sekund... Mozna oczywiscie to jeszcze troche skomplikowac i pamietac (tylko pytanie) nawet po skasowaniu i notowac JAK CZESTO BYLO UZYWANE - jezeli jakies pytanie jest zadawane BARDZO CZESTO to w takim wypadku powinno byc zcachowane nawet jezeli wykonuje sie stosunkowo szybko. To "szybko", "czesto" to bardzo wazne parametry. Mysle, ze moga byc one nawet pamietane DLUGOTERMINOWO tzn. wiele setek zapytan powinno byc zarestrowanych (moze i dziesiatki tysiecy). Dopiero po takim okresie mozna mowic o wprowadzaniu rzeczywistej optymalizacji. Wystarczy popatrzec na cacha oracla - to jest engin w enginie. Jego optymalizacja jest calkiem - calkiem i pozwole sobie zauwazyc, ze moze lepiej zainwestowac w optymalizacje serwera bazy danych niz w programowego cacha... U nas w firmie dzieki drobnej (pare switchow) optymalizacji uzyskalismy przyspieszenie o rzad wielkosci (chyba gdzies kolo 12 razy). Oczywiscie - po awarii, gdy zrobimy restore i tablice cache sa puste - to system dziala, jak dzialal, ale po paru chwilach - hula na calego. Teraz pracuje nad tym jakis 'macher-cudotworca' i juz dodal do optymalizacji pare procent (no chyba nawet i w paru przypadkach nawet 40). Ale uzywa jakis czarodziejskich switchow i wogle rzeczy ktorych chyba nie ma w dokumentacji! Okazalo sie, ze zapytania, ktore trwaly po minute teraz trwaja 3 sekundy (nasza optymalizacja dala 5 sekund. Zaznaczam - nie inwetsowalismy w nowy serwer - zmiana czysto konfiguracyjna. Lukjel RatDev - 29 Cze 2003, 08:59 Witam! Ja bym jeszcze zastosowal inna strategie usuwania - notowalbym 'CZAS POTRZEBNY NA UZYSKANIE ODPOWIEDZI' i usuwal te, ktore wykonaly sie najszybciej. No bo co z tego ze jedno pytanie bylo zadane pol godziny temu jezeli na jego wykonanie porzeba bylo 5 minut. Wtedy lepiej wywalic cos co bylo zadane moze i minute temu, ale wymagalo zaledwie 5 sekund... Mozna oczywiscie to jeszcze troche skomplikowac i pamietac (tylko pytanie) nawet po skasowaniu i notowac JAK CZESTO BYLO UZYWANE - jezeli na razie testuje LRUCache bo moze wystarczy, ale Twoje rozwiazania sa bardzo ciekawe i tez je przetestuje. Pozostaje mi jedno pytanie. Jak ustalic i zarzadzac sama wielkoscia cacha. Czy pobierac wielkosc dostepnej pamieci i dzielic przez srednia wielkosc obiektu i tworzyc takiej wielkosci cache czy da sie to jakos sensowneije zrobic / zautomatyzowac? Dodam, ze nie znam dostepnej wielkosci pamieci na serwerze, oraz nie wiem Jeszcze raz wszystkim dzieki za rady! -- Serwis Usenet w portalu Gazeta.pl -http://www.gazeta.pl/usenet/ Lukjel - 29 Cze 2003, 13:50 Jak ustalic i zarzadzac sama wielkoscia cacha. Czy pobierac wielkosc dostepnej pamieci i dzielic przez srednia wielkosc obiektu i tworzyc takiej wielkosci cache czy da sie to jakos sensowneije zrobic / zautomatyzowac? Mozna to zrobic np. tak: kazda pozycja ma oprocz podanych wczesniej parametrow (zapytanie, odpowiedz, kiedy_ostatnio_uzyta, ile_czasu_tworzona, ile_razy_uzyta) dodac jeszcze ile_zajmuje_miejsca Program co jakis czas sprawdza, ile jest wolnej pamieci i ile on sam zajmuje. Jezeli zostana przekroczone progi (np. mniej niz 50MB wolne, lub cos w tym stylu) to nastepuje proba oczyszczania cache. W tym celu nalezy w jakis 'sprytny' sposob wyliczyc 'WAGE' kazdego elementu w cachu (moze to byc wyliczane statycznie - przy uzyciu elementu, ale wtedy trzeba sprytnie powiazac wage z czasem...). Nastepnie elementy z najwyzsza wartoscia sa usuwane, az do momentu uzskania odpowiedniej ilosci wolnej pamieci. Oczywiscie - wszystkie progi i parametry sa ustawianlne recznie - podczas dzialania programu. Do tego (to juz zaczyna byc ciekawy problem) mozna dodac modul uczacy sie - tzn. rozpoznajacy co i kiedy jest uzywane - moze np. okaze sie, ze sa pory dnia, kiedy jakies pytanie sie pojawia bardzo czesto, a pozniej nie - az do nastepnego dnia np. pytanie pojawia sie tylko na poczatku dnia (intensywnie), a pozniej spokoj. W takim wypadku mozna sobie wyobrazic system, ktory na zasadzie predykcji SAM zadaje pytania 'w wolnej chwili' i przygotowuje sobie cache. W latwiejszym rozwiazaniu - waga jest wyliczana dynamicznie z uwzglednieniem wartosci wyliczanej kierunki rozwoju. Zastosowanie modulu opartego o np. sieci neuronowe wydaje sie miec szerokie mozliwosci - trzeba sie tylko zastanowic nad tym CO ma ta siec rozwiazac... Problem cache jest dosyc szeroko dyskutowany w necie i wcale nie jest to takie proste jak sie wydaje na poczatku. Typowe techniki wcale nie daja duzego 'kopa'. Dopiero zaawansowane rozwiazania daja naprawde duzo. Nie znam tego czegos co testujesz - moze to jest bardzo dobry wybor. I jeszcze - jakbys mial problem z sortowanymi listami to polecam Collections od apacha. (www.apache.org). I jeszcze - moze jednak zastanow sie nad pewnymi strukturami w bazie - Pozdrowienia Grzegorz Mucha - 30 Cze 2003, 02:44 Ktos ma moze pomysl jak przebudowac ten cache by nie bylo ryzyka zuzycia calej pamieci, a z drugiej strony by dzialal efektywnie? Najlepiej gdyby jakos sam sie oczyszczal z zadko pobieranych danych czy cos w tym stylu. A nie możesz skorzystać z jakiegoś gotowego kesza? Na przykład JCS (jakarta.apache.org/turbine/jcs bodaj), są i inne (całkiem przybajerowane zresztą, z keszem rozproszonym itp.) mucher incasmin - 30 Cze 2003, 07:07 Poczytaj: http://www.javaworld.com/javaworld/jw-07-2001/jw-0720-cache.html Mozna takze poczytac o slabych referencjach - mozna Michal Filip Sielimowicz - 1 Lip 2003, 06:32 To fajnie dziala, po pewnym czasie w cachu jest duzo pozycji i aplikacja prawie wogole nie korzysta z bazy. Pojawia sie tylko jedna watpliwosc. Ktos ma moze pomysl jak przebudowac ten cache by nie bylo To sie nazywa LRU Cache - poszukaj na pl.comp.lang.java, byl juz watek. LRU to skrót od Last Recently Used. Zobacz: i jak to uzyc do budowy LRU Cache (trywialne): Filip Sielimowicz Analiza zależności między klasami/funkcjami - czy są jakieś fajne narzędzia ? Regex, budowa prawidłowego Pattern, ktoś pomoże? (moze troche OT) Java i blokada www - jakies API czy ktos zna narzedzie wspomagajace budowanie specyfikacji wymagan? |