Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%)
|
Witam, ostatnio postanowilem sie zajac cachowaniem zapytan z bd. I tak pomalutku stworzylem swoja klase do cachowania/odczytywania zapytan z PostgreSQL. Klasa po malych przerobkach bedzie dzialac rowniez z MySQL.
Na poczatek, co by nie byc posadzony o plagiat (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) od razu przyznam sie ze korzystalem z rozwiazania mike_mecha (http://php.nq.pl/index.php?showtopic=22487&hl=cache) - ale oczywiscie tyko pogladowo (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Na poczatek moze diagram mojego rozwiazania Diagram klas (uml znam slabo wiec pewnie sa bledy w diagramie jesli chodzi o oznaczenie relacji) Co do kodu to znajduje sie on tutaj: (podaje linki bo kodu jest za duzo na wklejanie) Klasa DB -glowna klasa bazy danych Db_result - abstrakcyjna klasa wyniku zapytania Db_Result_orig - wynik zapytania wykonanego z bazy Db_result_cache - wynik zapytania wykonanego z cachu (lub z bazy z pozniejszym cachowaniem) GenericException - Rozszerzenie klasy Exception o zapis wyjatkow do loga PGException - klasa wyjatku bazy danych Klasy dodatkowo korzystaja z kilku stalych (np. connection string, sciezka do katalogu z cachem itp), ktore trzymam w osobnym pliku -> gdyby ktos chcial przetestowac na zywo dzialanie klasy to trzeba odpowiednie pliki wygenerowac wraz ze stalymi. Najwazniejsze cechy moich klas to: - cachowanie zapytan do pliku tekstowego / odczytywanie zapytan z takiego cachu - system obslugi wyjatkow z zapisem bledow do logow - mozliwosc iterowania wyniku - zastsowany interfejs iteratora Jako ze jestem poczatkujacy prosze o ocene kazdego aspektu, ktory przyjdzie wam do glowy - poczynajac od kodu a na organizacji projektu konczac - kazda rada / wytkniecie bledu mile widziane. Przykladowe zastosowanie
Ten post edytował athabus 15.06.2006, 19:28:22 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%)
|
Zrobile maly test.
Wykonalem 1000 zapytan uzywajac funkcji query_cache() (z cachowaniem) i query_db() (bez cachowania). Zapytania byly identyczne (select * from tabela), gdzie tabela miala 5 rekordow tylko. Uzylem nastepujacego testu (athlon barton 2,5 GHz, 512 Ramu, WinXP)
Z gory zaznaczam ze zdaje sobie sprawe ze wynik nie jest do konca miarodajny gdyz raczej rzadko zdarza sie taka sytuacja jak powyzej ale wyniki byly nastepujace (w obu przypadkach nastapilo polaczenie z baza danych) -> z cachowaniem srednio zapytania zostaly odczytane w 0,2 - 0.25 s -> bez cachowania 0,6-0,7 s Czyli różnica jest 3 krotna. Rozwarzajac dalej mysle ze w swiecie realnym roznica moglaby byc wieksza z nastepujacych powodow: ->tak jak mowi AcitvePlayer serwer bd moze byc na innej maszynie (nazwa.pl zdaje sie tak ma) ->Zapytania byly wykonywane na bardzo prostej bazie (5 rekordow - 4 pola) w rzeczywistosci tabele sa znacznie bardziej skomplikowane wiec wydluza sie czas odczytania zapytania + pobrania wyniku ->Trzecia sprawa (tu zupelnie teoretyzuje bo nie mam pojecia jak jest w rzeczywistosci) przy cachowaniu wynik jest od razu jako tablica w przypadku odczytu z bd wynik jest podawany jako dataset i trzeba go obrobic - nie wiem czy to nie wydluza czasu dostepu do bazy danych W czy na pewno sie z toba zgodze to kwestia nawiazania polaczenia - na tym najwiecej mozna by bylo prawdopodobnie zaoszczedzic - no ale jak sam mowisz w realnych warunkach jest to praktycznie niemozliwe. Na pewno tez mozna wykorzystac bardziej profesjonalne narzedzia napisane w C ktore na 100% zadzialaja szybciej... ale chcialem napisac cos sam (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) PS. Czy taki sposob testowania szybkosci dzialania jest w ogole uzasadniony -> tylko to mi przyszlo do glowy (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) PS2 . Nie liczylem ze wywiaze sie az taka ciekawa dyskusja - fajnie sie czegos nowego nauczyc. |
|
|
|
athabus [zestaw klas PHP5]Cachowanie zapytan db 15.06.2006, 18:55:09
dr_bonzo Przyklad uzycia jest lipny -- co bedzie jak nie po... 15.06.2006, 19:17:13
athabus Dodałem die() w razie bledu polaczenia. Faktycznie... 15.06.2006, 19:33:23
dr_bonzo CytatDodałem die() w razie bledu polaczenia
Tez zl... 15.06.2006, 20:25:19 
athabus Cytat(dr_bonzo @ 15.06.2006, 19:25 ) Tez ... 15.06.2006, 20:45:58
mariuszn3 Nie wiem jak jest z Postgre ale przecież w MySQL c... 16.06.2006, 12:41:57
ActivePlayer CytatPo co więc pisać w php klasę, która by przejm... 16.06.2006, 12:46:03
Cysiaczek Nie chcę przesadzić, ale muszę z wnioskiem formaln... 16.06.2006, 12:51:30
dr_bonzo CytatTu sie gdzies zgubilem - o jakich blokach mow... 16.06.2006, 14:00:17
athabus @Cysiaczek
Czy chodzi Ci o cos takiego?
[PHP] pobi... 16.06.2006, 14:52:34 
mariuszn3 Cytat(athabus @ 16.06.2006, 13:52 ) @mari... 16.06.2006, 17:28:15
ActivePlayer CytatPrzykładowo u mnie na Win XP PIV: pierwsze za... 16.06.2006, 18:21:23
ActivePlayer jesli chodzi o nawiązywanie połączenia... przeciez... 16.06.2006, 18:48:15
athabus To prawda, ale wyszedlem z zalozenia, ze jeszcze n... 16.06.2006, 19:20:01
mariuszn3 Zrobiłem parę testów na MySQL. Niestety ... 16.06.2006, 22:06:13
athabus mariuszn3Dzieki za przeprowadzenie testow. Mysle z... 16.06.2006, 22:56:00 
mariuszn3 Cytat(athabus @ 16.06.2006, 21:56 ) Teraz... 16.06.2006, 23:31:09
eai Nie szyfrujesz danych zapisanych w cache. Powinien... 11.08.2006, 13:50:24 
NuLL Cytat(eai @ 11.08.2006, 14:50:24 ) Ni... 6.10.2006, 00:37:47
pawel_ z tego co widze, to zapomniałeś o jednej małej rze... 14.08.2006, 15:45:10
alpin19 btw... UML jest baaardzo marny. Polecam szczegółow... 6.10.2006, 00:31:16 ![]() ![]() |
|
Aktualny czas: 26.12.2025 - 20:02 |