使用每分钟大量的数据库请求来优化应用程序

时间:2015-04-09 05:41:43

标签: .net sql-server performance architecture sql-server-performance

我必须向我的应用程序中的最终用户提供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,并根据我可以更新他们在数据库中的消费(分钟)。该作业将每分钟执行一次,另一方面,每个会话用户的浏览器将更新数据库中的LastActiveTime

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我建议进行一次性能测试,以评估对数据库的影响,而不是预期的最大负载。然后,根据结果,您可以考虑使用像RavenDB这样的NoSQL解决方案来持久保存使用数据。 NoSQL可以创造奇迹,并且非常适合这类问题。

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

答案 2 :(得分:0)

如果用户正在与您的服务进行互动,请将这些互动实例用作上次使用的时间,如果需要确定您没有结束时间的时间,请使用上次互动时间作为识别结束的时间会话。

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