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? |
|
|
|
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 
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
athabus Zrobile maly test.
Wykonalem 1000 zapytan uzywaja... 16.06.2006, 18:22:18
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: 27.12.2025 - 12:24 |