我是商业Windows应用程序(c#)的首席开发人员。一个新的要求是跟踪滥用许可证的客户。
例如:假设某个客户购买了10个用户许可协议,即在任何给定时间同时购买10个用户。
我需要能够回顾过去的所有时间,报告客户同时登录了10个以上的用户。
我已经有一个带有列的用户表:userid(主键),pw,lastLogin,lastLogout。
我正在考虑创建一个新的“日志”表,每次用户注销时都会在其中添加新行…列可能包括:
LogId,UserId,LoginDateTime,LogoutDateTime
…然后我将拥有用户每次登录/登出应用程序的历史记录…
但是我不确定此表设计是否可以进行有效的计算以生成报告…我使用SQL还是c#进行计算对我来说都没有关系,只要它相当快…
希望有人对如何更好地设计此表有一个好主意,以便我可以快速计算出客户超出许可限制时的任何/所有时间点。
注意:我不想阻止11t,12th等用户使用该应用程序…要求是向用户显示警告消息,但允许他继续工作…
将开始和结束会话视为需要记录的事件。您创建一个表来记录这些事件。
因此,一个开始和结束的会话在表中将有两个条目- 一个用于会话开始,另一个用于会话结束。您只将记录添加到表中,而不修改以前的记录。该表现在可以非常简单地跟踪打开的会话数,方法是在记录中添加一个“会话计数”字段,该字段在会话开始事件发生时从前一个记录的会话计数值开始增加,而在会话结束事件发生时减少。
现在,“会话计数”列为我们提供了并发会话数随时间变化的分段连续函数。
示例数据:
SessionId EventType .... your session data here ... SessionCount 1. 1 Login ................ 1 2. 2 Login ................ 2 3. 3 Login ................ 3 4. 1 Logout ................ 2 5. 4 Login ................ 3 6. 4 Logout ................ 2 7. 2 Logout ................ 1 8. 3 Logout ................ 0 9. 5 Login ................ 1 10. 6 Login ................ 2
需要担心的事情:
编辑:请注意,在我放置“您的会话数据在这里”的地方,我的意思是“您的会话事件数据在这里”。诸如时间戳之类的信息将在此处输入。应该使用另一个表来跟踪两个事件共有的会话信息,例如拥有会话的用户的身份(两个表使用相同的SessionId密钥)。