![]() |
![]() |
![]()
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%) ![]() ![]() |
@Cysiaczek
Czy chodzi Ci o cos takiego?
Czyli ze klasa DB includuje klasy db result itd? Robilem to dlatego, ze np. klasa Db "zwraca" wynik jako obiekt db_result. Czy includowanie powinno byc w osobnym pliku (dajmy na to w pliku korzystajacym z Db)? Myslalem ze tak jak jest teraz jest ok bo nie trzeba pamietac o includowaniu pozostalych klas. @mariuszn3 - nawet nie wiedziale ze mySql cachuje wyniki (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Ale mi bardziej chodzi o to, ze np. masz elementy ktore sie rzadko zminiaja (np. opis produktu w sklepie internetowym) - moja klasa przechowuje informacje w cachu domyslnie przez 24 godziny. Jesli ktos w tym czasie bedzie probowal odczytac ten wynik zrobi to znacznie szybciej niz laczac sie z baza. Nawet jesli wynik jest cachowany przez baze to i tak trzeba go pobrac. Musze zrobic dokladne testy na jakiejs bazie sensownej wielkosci ale powinno to dzialac szybciej niz standardowo. @dr_bonzo - myslalem ze to byl jeden ciag myslowy (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Co do blokow try-catch wydaje mi sie ze tak jak sa teraz (po drobnej korekcie z die() ) w przykladzie jest ok (ale tak jak mowilem dopiero zaczynam php wiec moge sie mylic), jedyne co warto by tam poprawic to to, zeby lapac wyjatek PgException zamista standardowego - tyle ze tutaj nie bylo sensu bo i tak nie podajmowale zadnej decyzji w zaleznosci od rodzaju wyjatku. W prawdziwej aplikacji nalezalo by to zmienic. A i jeszcze jedno - zapomniale o to spytac w pierwszy poscie. Wynik cachowanych zapytan przechowuje w pliku o nazwie 'typ zapytania (assoc/numeric)' . sha1 z zapytania . 'txt' czyli np: as_asdlkjqasdf02dd2lj3jv09qnajkfa.txt myslicie ze tak jest poprawnie? Bo w innych przykladach widzialem nazwy plikow nadawane recznie lub zapytanie jako nazwa pliku. Ale w 1 przypadku wydaje mi sie ze jest to niewygodne w uzytkowaniu a w 2 nazwy przy skomplikowanych zapytaniach byly zbyt dlugie. Jestem swiadom ze moje rozwiazanie tez nie jest doskonale ale co o nim myslicie? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 2.10.2025 - 17:34 |