存储调查数据的最佳方式是什么?

4
我正在开发一个非常小的调查应用程序,可能是一个3-4页的网页应用程序。我的问题是什么是保存调查数据的最佳方法?
顺便说一下,到目前为止,我想到了以下几种方法。
1.将调查结果保存到数据库中,并将每个调查标记为未完成。当用户提交调查的最后一个表单时,请检查调查的完整性并将其标记为已完成(如果它是完整的)。 2.将调查结果保存到会话中,然后在用户提交调查的最后一个表单时将其保存到数据库中。
你认为这些方法怎么样?
7个回答

3
我遇到过这种问题,所以强烈建议尽可能不要使用Sessions。当你的网站流量较大,或者ASP.NET感觉自己需要时,你可能会发现所有的sessions都丢失了,因为.NET试图释放一些内存。
我建议你尽早将数据放入数据库中。使用Guid.NewGuid()生成一个唯一难以猜测的键,并在查询字符串中传递该键:这将是您从数据库检索记录的关键。
还有两个选项您未考虑:
1. 将一个页面的响应发布到下一个页面。(这可能比值得麻烦)
2. 使用asp:Wizard控件。 这样,你的3-4页实际上将成为单个页面上的3-4个步骤。每个阶段的数据都将自动存储在ViewState中,因此第一步的输入字段仍然可以在最后一步时访问。
(但我仍然建议您选择选项1。)

我会选择第一个选项,因为它比会话更健壮。guid(唯一标识符)是个好主意,我会将guid添加到表中,这将完全消除对会话的需求。谢谢。 - Mohamed

2
不要使用会话来完成此任务。微软在TechEd应用程序中的调查问卷中有一个非常好的例子,说明了如何不做。每次您需要考虑一个答案时,会话都会超时。使用ajax,保存每个答案,即使是部分答案。如果遇到数据库性能问题,请收集某段时间内所有调查问卷的所有答案,并将它们一起保存。使用一些javascript,您可以在过去几秒钟内仅在某些内容发生更改或窗口关闭之前回调服务器。当然,除非您对回答问题有时间限制。

2

如果你预计你的应用程序将来可能会增长(提供更长的调查问卷,甚至以用户可以在稍后时间保存结果并恢复的形式),我肯定会选择数据库选项。


1

这是我的做法:

  • 我从数据库中生成“问题”,因此只使用一个页面来显示不同的问题。
  • 用户点击“下一步”时,我立即保存每个问题的答案。这有一个很大的优点,即用户可以回来从她离开的地方开始。
  • 我使用指针跟踪进度,该指针与结果保存一起更新。
  • 我不使用会话,因为我不想冒失数据丢失的风险,也不想过度使用内存。
  • 当指针==问题数量时,标记为已完成。

0
如果你希望用户能够在调查的过程中保存他们的结果并在另一个时间回来完成它,那么你就需要存储调查开始时间和结束时间以知道他们何时完成。您还需要存储迄今为止所有的值。
由于数据量较小,我建议将其保存在会话中,然后在用户完成时将其保存到数据库中。

0

我认为第二个选项是最好的选择。如果您的网站接收到大量流量,选项1将会给数据库带来更大的压力,并且会在数据库中堆积未完成的调查。使用会话似乎是更好的选择,因为实际上,除非数据完整,否则您不需要这些数据,对吧?


0

两种方法都可以,这取决于您希望用户做什么或者您期望用户如何行为。

第一种方法允许用户返回(即使关闭浏览器)以完成调查。如果您的调查很大,用户无法在迷失其他事情之前完成它,那么这是一个好处,但如果您不想要不完整的调查,那么这也是一个负面因素。

第二种方法强制用户在开始时完成调查。如果您的调查很快,并且您想要完整的数据,那么这是一个好处,但如果您的调查很长,通常用户在完成之前会分心,那么这是一个坏处。

我认为每个页面的问题数量将成为我选择两种方法之间的定义因素,也许对您也是如此。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接