0

有设计问题,希望得到一些建议。

我预计 540 名参与者将完成 18 项调查。每个调查应该有正好 30 名参与者(完成/提交调查 - 而不仅仅是访问调查)。这些调查非常相似(结构相同;仅在某些措辞/图像上有所不同。可以来自相同的 html)。

我以前这样做的方式是只托管一个 html,并在 html/JavaScript 中有一个随机数生成器。当请求页面时,将生成一个介于 1 到 18 之间的随机数,并根据该数字生成 18 个调查中的一个并返回给参与者。这真的很方便,因为我只需要维护一个 html 页面,并且担心根据给定的数字生成不同的调查。但是我注意到参与者的分布并不完全均匀——我可能在一项调查中有 25 名参与者,而在另一项调查中可能有 35 名参与者。这可能是由于来自随机数生成器的随机性(我认为对此我无能为力 - 如果我错了,请纠正我)。

我正在寻找更好的解决方案。我想在服务器端有一个计数器,并根据计数重定向参与者(例如,每 1 名参与者参加第 1 次调查,每 2 名参与者参加第 2 次调查……每 18 名参与者参加第 18 次调查) . 然而,这只能保证参与者均匀地访问调查,而不是完成/提交调查 - 参与者可以完全增加计数但不完成调查。如果他不提交调查,则不应增加计数。但是,如果计数没有增加,他(和连续的参与者)就不能被分配调查。锁定柜台是不现实的,因为会有很多参与者等待获得号码并因此进行调查......啊我需要一些帮助@.@

任何解决方案/建议?

提前感谢您的回复!

4

3 回答 3

0

您的服务器端计数器想法很棒。要解决人们未完成调查的问题,请使用 cookie 或某种登录系统,参与者需要在其中表明自己的身份(我认为这是一项匿名调查,所以 cookie 更好)。

  1. 在服务器端有一个柜台。
  2. 当用户到达时,为他们设置一个带有从计数器 (1 - 18) 计算出来的调查 ID 的 cookie,这样您就可以记住用户属于哪个调查。
  3. 当用户到达时,检查带有 ID 的 cookie - 如果他们有 cookie,请将它们发送到适当的调查而不增加计数器。如果他们不这样做,则增加计数器并为用户设置一个带有新 ID 的 cookie。

怎么想?:)

于 2013-11-07T03:16:06.327 回答
0

这个怎么样:

为每个调查创建单独的计数器,并将它们存储在数据库中。每次用户请求调查时,从数据库中获取计数器,遍历它们,并返回计数小于 30 的第一个调查。将用户重定向到所述调查,并增加该调查计数器。

为确保实际提交调查,您可以执行以下操作: 在数据库中创建另一个表。每次为用户提供调查时,将新记录插入包含以下内容的表中:unique_id, survey_id, timestamp。将 unique_id 与调查一起传递给用户,并在提交后从数据库中删除相关条目。现在在选择调查之前(如上所述),您获取此数据,对于时间戳大于 10 分钟之前的任何条目,您可以假设它没有提交,并减少调查计数器。

于 2013-11-07T03:28:13.347 回答
0

鉴于 A:: 您有 18 个调查需要由 540 名参与者随机填写,每个调查完全分为 30 个提交 B:您仅托管一个 html 文件,根据从发送的数字通过 javascript 生成 18 个调查中的 1 个服务器

不知道您如何存储调查结果,我想说一个好的策略可能是:在 BE 上保留一个由序列号 1-540 组成的随机数组(用作每个调查的 id)和一个从 0 开始的指针。参与者请求页面,为他们分配数组中的下一个数字并增加指针。通过 cookie 将该号码与该用户保持一致,以便他们始终看到相同的号码。根据该数字为他们分配调查,1-30 是调查 1,依此类推。

这将确保如果您预计有 540 名访问者,每个人都会随机获得 540 份调查中的一项。如果他们重新访问,他们仍然会收到相同的调查。

如果您想处理超过 540 个请求页面能够接收年长用户从未提交过的调查的其他用户,您可以将指针增加到超过 540,但使用模运算符。

nextSurveyId = randomSurveyIDs[surveyPointer%540]; 调查指针++;

这将确保最旧的分配调查首先被重新分配。您还可以按编号维护一个单独的已完成调查字典,以便在从原始数组中选择下一个随机调查 ID 时进行检查,递增指针直到您确定要重新分配的下一个最旧的未完成调查。当两个数组的长度相同时,所有调查都已提交。

于 2013-11-07T04:36:04.477 回答