2010-07-25 3 views
1

вопрос о производительности запросов/баз данных:Выполнение запроса несколько раз по сравнению с использованием печенья

У меня есть таблица, которая записывает, сколько «точек» пользователь заработал. Для каждой 1 точки есть 1 строка. Когда кто-то получает 20 очков, в базу данных вставляется 20 строк. Когда кто-то потеряет 20 очков, я добавлю строку со значением «-1» в базе данных. Таким образом, количество точек, которые есть у кого-то, можно вычислить, выполнив простой запрос SELECT, который суммирует точки вместе.

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

Мне нужно показать баллы (для одного пользователя, который вошел в систему) на «каждой» странице веб-сайта.

Вопрос: будет ли вредно работать с базой данных для выполнения этого запроса SELECT при каждой загрузке страницы или эффективнее запускать запрос один раз, сохранить значение в Cookie и просто отображать Cookie на странице? Единственный риск, который я предполагаю, заключается в том, что если браузер пользователя не поддерживает файлы cookie, и что Cookie всегда обновляется, чтобы показать правильное значение.

ответ

0

Один запрос на загрузку страницы не будет многого, но да, cookie более эффективен, хотя и не безопасен. Вы должны использовать сеансы, чтобы пользователь не мог изменять данные.

1

Это довольно дешевая операция. Если у вас много тысяч пользователей кластеризованного индекса (userid, point), вы можете ускорить поиск.

Хотя это довольно дешевая операция, все еще требуется некоторое время для выполнения дополнительного запроса. Если вы ожидаете очень высокие объемы трафика, альтернативой может быть сохранение текущей точки в пользовательской таблице в столбце рядом с именем пользователя и т. Д. Предполагаю, вы получите имя пользователя для каждой страницы, тогда вы можете получить текущую точку почти для свободно.

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

Смежные вопросы