Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [zestaw klas PHP5]Cachowanie zapytan db, prosze o ocene/sugestie
athabus
post 15.06.2006, 18:55:09
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 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 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
  1. <?php
  2.  include_once ('db/db.class.php');
  3.  include_once ('const_db.php'); 
  4.  
  5.  $sql='select * from produkty';
  6.  
  7.  try
  8.  {
  9.  $db=Db::getInstance();
  10.  }
  11.  catch (Exception $e)
  12.  {
  13.  echo $e; 
  14. [indent] die()
  15.  }
  16.  
  17.  try
  18.  {
  19. //odczyt zapytania z cachu. Jesli brak cachu dla zapytania to odczyt z bazy
  20. //nastepnie cachowanie jest zapisywane
  21. // 2 parametr mowi ze wynik ma byc jako tablica asocjacyjna, 3 parametr
  22. //mowi ze cache bedzie wazny przez godzine (3600 sekund) - oba parametry sa opcjonalne
  23.  foreach ($db->query_cache($sql, true, 3600) as $row)
  24.  {
  25.  echo $row['nazwa_produktu'] . '<br/>';
  26.  }
  27.  }
  28.  catch (Exception $e)
  29.  {
  30.  //wyswietla pelen opis bledu wraz z zapytaniem i opisem bledu
  31.  //uzywac tylko przy testowaniu - w kodzie produkcyjnym raczej
  32.  //nie powinno sie znalezc gdyz haksior moze poznac strukture bazy
  33.  $e->toScreen();
  34.  }
  35.  
  36.  try
  37.  {
  38.  //przyklad uzycia zapytania bez cachowania (drugi parametr oznacza odczyt numeryczny)
  39.  foreach ($db->query_db($sql,false) as $row)
  40.  {
  41.  echo $row[0] . '<br/>';
  42.  }
  43.  }
  44.  catch (Exception $e)
  45.  {
  46.  echo $e;
  47.  }
  48.  
  49.  //oczywiscie mozna rowniez odczytywac pojedyncze wyniki
  50.  $result=$db->query_cache($sql);
  51.  //odczyt 4 wiersza
  52.  $row=$result->fetch_row(3);
  53.  
  54.  
  55. ?>


Ten post edytował athabus 15.06.2006, 19:28:22
Go to the top of the page
+Quote Post

Posty w temacie
- 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
- - 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


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.06.2025 - 18:03