лучший способ хранить данные опроса? - PullRequest
3 голосов
/ 11 февраля 2009

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

кстати, до сих пор я придумал следующие способы.

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

  2. сохранить в сеансах и затем сохранить в базе данных, когда пользователь отправит последнюю форму опроса.

что вы думаете об этих методах?

Ответы [ 7 ]

3 голосов
/ 11 февраля 2009

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

Я бы пошел, чтобы поместить его в базу данных как можно скорее. Используйте Guid.NewGuid () для генерации уникального неузнаваемого ключа, который вы можете передать с одной страницы на следующую в строке запроса: это будет ваш ключ для извлечения записи из базы данных.

Два других варианта, которые вы не рассматривали:

  1. Разместите ответ с одной страницы на другую. (Это может быть больше хлопот, чем стоит.)

  2. Используйте элемент управления asp: Wizard. Таким образом, ваши 3-4 страницы на самом деле будут 3-4 шага на одной странице. Данные каждого этапа автоматически сохраняются в ViewState для вас, поэтому поля ввода с первого шага по-прежнему будут доступны вам, когда вы перейдете на последний шаг.

(Я бы все же выбрал ваш вариант № 1).

2 голосов
/ 11 февраля 2009

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

2 голосов
/ 11 февраля 2009

Не используйте сессии для этого. У Microsoft есть фантастический пример того, как не проводить опросы в своих приложениях, которые они используют в TechEd. Каждый раз, когда вам нужно подумать об ответе, сессия заканчивается. Используйте ajax, сохраняйте каждый ответ, даже частичный. Если вы столкнулись с проблемами производительности БД, соберите все ответы для всех опросов за определенное время и сохраните их вместе. С помощью некоторого javascript вы можете сделать обратный вызов на сервер, только когда что-то изменилось за последние несколько секунд или до закрытия окна.

Если, конечно, у вас нет времени на ответы на вопросы.

1 голос
/ 11 февраля 2009

Вот как я это делаю:

  • Я генерирую «вопросы» из базы данных, поэтому для отображения разных вопросов используется только одна страница.
  • Я сохраняю ответы на каждый вопрос, как только пользователь нажимает «Далее». Это имеет большое преимущество в том, что пользователь может вернуться и начать с того места, где он ушел.
  • Я отслеживаю прогресс с помощью указателя, который обновляется вместе с сохранением результата.
  • Я не использую сессию, потому что не хочу рисковать потерей данных и не хочу напрягать память.
  • Если указатель == количество вопросов, отметьте как выполненное.
0 голосов
/ 11 февраля 2009

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

Первый метод позволит пользователям вернуться обратно (даже после закрытия браузера), чтобы завершить опрос. Это хороший момент, если ваш опрос был большим, и пользователи не могут закончить его, прежде чем потеряться в чем-то другом, но это также является негативным моментом, если вы хотите заставить пользователей закончить, я имею в виду, если вы не хотите завершать обзоры.

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

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

0 голосов
/ 11 февраля 2009

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

0 голосов
/ 11 февраля 2009

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

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

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