Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wydajność
angerthor
post
Post #1





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 13.02.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Witam,

Jestem bardziej programistą Javy, jak PHP, dlatego nie jest pewien jaki sposób pisania kodu jest najbardziej wydajny.

Załóżmy, że mam obiekt komentarz, który w konstruktorze łączy się z bazą danych i pobiera z niej wszystkie wartości odnośnie danego komentarza, typu np. id_komentarz, tresc, autor no i id_artykul, czy id artykulu w bazie do którgo komentarz się odnosi.

I teraz, aby wydajnie pobierać dalsze informację odnośnie tego artykułu z poziomu klasy komentarz, mam jako pole pustą zmienną, która jest inicjalizowana raz, kiedy na obiekcie pola komentarz wywoła się metoda chcąca pobrać dodatkowe info odnośnie komentarza, np. getArticleTitle();. Inicjalizacja czyli wywołanie konstruktora z parametrem id, który łączy się z bazą danych i pobiera dane artykułu.

Zastanawiam się tylko, czy to jest dobre rozwiązanie pod względem wydajności i bezpieczeństwa.

Dzięki za wszelkie opinie
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Nie ma.

Skoro punkty są przyznawane przy jakiś akcjach: dodanie komentarza, dodanie materiału, dodanie aktualności, dodanie galerii itp. i odejmowane w momencie gdy na przykład moderator usunie komentarz to po prostu po dodaniu komentarza zwiększasz użytkownikowi ilość punktów. Przy usunięciu zmniejszasz:

  1. START TRANSACTION;
  2. INSERT INTO comment VALUES (...);
  3. UPDATE member SET points = points + :newCommentPoints WHERE id = :id;
  4. COMMIT;
Jeżeli ilość przyznawanych punktów ma być zawsze stała dla danego zasobu i jesteś pewien, że nie będziesz w niedalekiej przyszłości zmieniał tej wartości sensownym wydaje się utworzenie wyzwalacza, który zajmie się drugim zapytaniem:
  1. CREATE TRIGGER increasePointsAfterNewComment AFTER INSERT ON comment FOR EACH ROW BEGIN
  2. UPDATE member SET points = points + 3 WHERE id = NEW.member_id;
  3. END;


PS. Tutaj akurat w przykładzie MySQL, ale każdy liczący się RDBMS również ma takie funkcje delikatnie różniące się swoją składnią.

Ten post edytował Crozin 3.12.2010, 15:58:47
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 16.10.2025 - 16:22