Подсчет против хранения количества сообщений - PullRequest
0 голосов
/ 16 октября 2011

Так что это более общий вопрос. Вот сделка.

Итак, я создал веб-приложение, которое должно знать, сколько сообщений пользователь сделал для системы вознаграждений. Чем больше постов, тем больше наград вы получите.

Проблема в том, что я не знаю, что будет лучшим решением.

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

  2. Другим вариантом будет динамический подсчет количества сообщений, что достаточно просто сделать. Однако это будет означать, что мне придется пересчитывать данные каждый раз, когда обновляется страница. Конечно, вы можете быть умны в этом и сделать так, чтобы он учитывался только при добавлении нового сообщения, но это потребовало бы дополнительной работы.

Теперь у меня нет проблем ни с одним из решений. На самом деле, я реализовывал оба решения раньше, однако мне было интересно, если кто-нибудь скажет мне, что лучше ИЛИ если у них есть другое решение для этого.

Ответы [ 4 ]

2 голосов
/ 16 октября 2011

Это очень субъективный вопрос. В общем, подсчет сообщений каждый раз занимал бы больше времени, но для небольшого количества сообщений это могло бы быть и хуже. Мой совет будет в профилировании вашего приложения. Загрузите 10, 100, 500, 1000 сообщений в базу данных и попробуйте каждый подход. Тогда иди оттуда. Я уверен, что здесь будет задействовано кэширование. Также посмотрите на кеширование APC, которое вы можете использовать для хранения количества ваших постов и получения его позже прямо из PHP.

2 голосов
/ 16 октября 2011

Я бы всегда использовал ваш первый вариант и сохранял количество постов по той причине, которую вы уже указали, и даже больше:

Если в какой-то момент в будущем вы намереваетесь очистить базу данных постов и очистить старые посты, ваши пользователи не потеряют свой текущий счет. Кроме того, вы будете более гибкими, чтобы улучшить систему вознаграждений позже, возможно, давая баллы за «лучшие» посты и меньше баллов за обычные. Вы также сможете вручную настраивать данные точек, не выискивая их сообщения.

Кроме того, вы можете не знать, насколько успешной будет ваша система досок. Возможно, в будущем потребуется слишком много времени, чтобы рассчитать значение на лету.

2 голосов
/ 16 октября 2011

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

1 голос
/ 16 октября 2011

Не зная слишком много о вашей системе, я думаю, что решение, объединяющее оба варианта, может быть чем-то, что можно попробовать.Рассмотрите возможность создания задания cron, которое генерирует эти значения и сохраняет их в таблице.Затем вы будете обращаться к этой таблице при поиске количества сообщений.У вас не будет самых актуальных результатов сразу, но они могут вам и не понадобиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...