Проблема дизайна: symfony2, doctrine2, mysql DB - PullRequest
0 голосов
/ 30 марта 2012

Мне интересно, как спроектировать это лучше всего, поэтому я не заново изобретаю колесо.

У меня есть рейтинг. Сущность:

    /**
 * 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;

, где тип - это типрейтинг, например, для «file.quality» или «file.story», для общих видео.

Теперь я хочу открыть страницу сведений о видео и показать общий рейтинг (как среднее значение для всехпользователи .... также есть рейтинги, которые не имеют ничего общего с пользователями, но приходят из других мест .... как IMDB (база данных фильмов в Интернете).

Я думаю о добавлении CompleteRating сущность, где я сохраняю средний рейтинг и обновляю его напрямую, когда пользователь добавляет новый голос в Rating сущность. Может быть, через класс слушателя в symfony2.

это лучший способ разработки?Вы справляетесь с этим лучше всего?

1 Ответ

1 голос
/ 30 марта 2012

Я полагаю, что есть несколько способов сделать это независимо от того, существует ли наилучший способ, зависит от того, как часто вы хотите, чтобы ваши рейтинги обновлялись, хотите ли вы, чтобы сервер подвергался стрессу, и т. Д.

1) У вас может быть два столбца в вашей видео сущности: CompleteRating, LastRatingUpdateTime.В вашем хранилище может быть функция GetRating, при каждом вызове она проверяет время последнего обновления, если, скажем, на час позже по сравнению с последним обновлением рейтинга, запускает запрос к базе данных, который обновляет рейтинг и выводит новый рейтинг.Это, конечно, означает, что пользователям нужно подождать, чтобы увидеть количество своих голосов, но это означает, что нагрузка на сервер будет ниже.

2) Возможно, вы могли бы ненавидеть два отдельных рейтинга, 1 для внешних рейтингов (IMDB и т. Д.)это обновляется только каждую ночь через cronjob, а затем отдельные рейтинги, которые рассчитываются, когда пользователь добавляет рейтинг, или даже просто на лету, базы данных очень быстры при таких вещах.

Мой голос будет2, это действительно зависит от того, насколько интенсивен код, который вы используете для очистки рейтингов IMDB.

...