5

我必须free demo在我的应用程序中为最终用户提供一些服务。免费演示可能是30 mins, 1 hours, 5 hours等 ( predefined time) 为新用户一次。

用户也可以部分地消耗这些时间。就像在 30 分钟的免费演示中一样,他们可以使用今天的 10 分钟、明天的 15 分钟和第二天的其余时间等。现在,如果用户选择 30 分钟的免费演示并登录并使用该服务。我可以通过他的开始时间和结束时间限制用户 30 分钟。如果开始和结束时间的总和等于 30 分钟,我可以将它们发送到付款页面。

现在问题出现在一些不确定的情况下,例如用户在活动会话期间关闭浏览器或他们的互联网停止工作或其他任何事情。在此,由于缺少结束时间,我无法计算他们消耗的时间。

场景可能如下所示(30 分钟演示)。

UserID  StartTime           EndTime             Consumed(mins)
10      09-04-2015 10:00    09-04-2015 10:10        10
10      10-04-2015 05:00    10-04-2015 05:04        4
10      11-04-2015 07:46    11-04-2015 07:56        10
10      11-04-2015 10:00    // Browser closed or any uncertain condition
10      11-04-2015 11:00    // How to restrict user to use actual 30 mins because I do not have EndTime in above row to calculate Consumed mins.

我可能同时有超过 100000 个用户使用我们的服务,所以我正在为此寻找一个有效的解决方案。

据我了解,我可以创建一个单独的作业来检查用户的 LastActiviteTime,并在此基础上更新他们在数据库中的 Consumed(mins)。该作业将每分钟执行一次,另一方面,每个会话用户的浏览器都会更新LastActiveTime数据库。

这可以解决我的问题,但我不太确定我的应用程序的性能,因为每分钟有大量的数据库请求。

4

3 回答 3

1

您可能还可以使用 JavaScript 通过客户端脚本进行开始、结束时间验证,并将开始时间、结束时间存储在浏览器 cookie 中并运行及时脚本(每分钟执行一次的 java 脚本),因此如果客户端验证失败本身你不需要在服务器(数据库)端验证它,这样就可以减少很多用户对数据库的查询。

于 2015-04-09T05:57:48.977 回答
0

我建议进行性能测试,以评估对数据库的影响,使其略高于预期的最大负载。然后,根据结果,您可能会考虑使用像 RavenDB 这样的 NoSQL 解决方案来持久化使用数据。NoSQL 可以创造奇迹,非常适合解决此类问题。

当然,您可以使用预定的客户端脚本和 AJAX 来执行此操作,正如 Rolwin C 已经建议的那样。请记住,即使恶意用户的方式存在一些障碍,这种方法总是存在一定程度的风险。因此,请查看您的情况是否可以接受这种风险,因为它可以大大减轻数据库服务器的负担。

于 2015-04-09T09:32:48.923 回答
0

如果用户正在与您的服务交互,则将这些交互实例用作最后使用时间,如果您没有结束时间时需要识别时间,则使用最后交互时间作为会话结束时间。

最简单的方法是在您显示为 lastInteractionTime 的表中再添加一列。如果没有结束时间,则使用 lastInteractionTime 来计算消耗的时间。

于 2015-04-09T15:39:37.880 回答