2012-03-30 10 views
0

Ich frage mich, wie diese am besten zu gestalten, so dass ich nicht neu erfinden das RadDesign Ausgabe: Symfony2, Doctrine2, mysql DB

i ein Rating Entity haben:

/** 
* Type of the read of this comment,for example quality 
* 
* @ORM\Column(type="string") 
*/ 
protected $type; 
/** @ORM\Column(type="datetime") */ 
protected $created; 

/** @ORM\Column(type="integer") */ 
protected $thread; 
/** 
* 
* 
* @ORM\ManyToOne(targetEntity="User") 
*/ 
private $user; 

/** 
* @ORM\Column(type="decimal", scale=2) 
*/ 
protected $value; 

wo die Art , ist die Art der Bewertung, zum Beispiel für "file.quality" oder "file.story", für freigegebene Videos.

jetzt möchte ich die detailseite für das video öffnen, und haben die gesamtbewertung angezeigt (als durchschnitt aller benutzer .... auch gibt es einteilungen, die nichts mit benutzer zu tun haben, sondern von anderen orten kommen .... wie IMDB (Internet Movie Database) Bewertungen

Ich denke über das Hinzufügen einer CompleteRating Einheit, wo ich die durchschnittliche Bewertung speichern und direkt zu aktualisieren, wenn ein Benutzer eine neue Abstimmung in Rating Entity eine Listener-Klasse in symfony2

ist dies die beste Design-Möglichkeit? Wie würden Sie damit am besten umgehen?

Antwort

1

Ich glaube, es gibt ein paar Möglichkeiten, wie Sie es tun können, ob oder ob nicht, ist es am besten abhängig davon, wie oft Sie Ihre Bewertungen aktualisieren möchten, ob der Server gestresst sein soll, etc.

1) Sie könnten in Ihrer Video-Entity zwei Spalten haben, CompleteRating, LastRatingUpdateTime. In Ihrem Repository könnten Sie eine GetRating-Funktion haben, wenn es aufgerufen wird, überprüft die letzte Aktualisierungszeit, wenn es eine Stunde später als die letzte Ratingaktualisierung sagt, führen Sie eine Datenbankabfrage durch, die die Bewertung aktualisiert und die neue Bewertung ausgibt. Dies bedeutet natürlich, dass die Nutzer warten müssen, bis ihre Stimmen gezählt sind, aber das bedeutet, dass die Serverbelastung geringer ist.

2) Vielleicht könnten Sie zwei separate Bewertungen hassen, 1 für ausgelagerte Bewertungen (IMDB, etc), die nur jede Nacht über einen Cronjob aktualisiert wird und dann die individuellen Bewertungen, die entweder berechnet werden, wenn ein Benutzer eine Bewertung oder sogar nur hinzufügt im laufe der Zeit sind Datenbanken sehr schnell in dieser Art von Sache.

Meine Stimme wäre 2, es hängt wirklich davon ab, wie intensiv der Code, den Sie für das Scraping von IMDB-Bewertungen haben, vorhanden ist.

+0

danke Mann, wie wäre es mit 3. Hinzufügen einer Zeile mit IMDB Rating (nicht Benutzerbewertung), in der Bewertungstabelle, aber mit 0 oder Null als Benutzer-ID? Ich versuchte es aber mit doctrine2, und es gibt mir einen Fehler, da der Benutzer nicht existiert ... also vielleicht ist dies eine andere Problemumgehung? .... auch gibt es verschiedene Arten von Bewertungen in der gleichen Bewertungstabelle: "rating_quality" , "rating_sound" .... etc ... plane ich in Zukunft auch die Bewertung für Nutzer wie "rating_user_credibilty" .... etc. – Confidence

+1

/** @ORM \ Spalte (name = "user_id", nullable = true) */wird sich um den Benutzer kümmern, existiert nicht Problem. – Cerad