我是商业 Windows 应用程序 (c#) 的首席开发人员。一项新要求是跟踪滥用许可证的客户。
例如:假设客户购买了 10 个用户许可协议,即在任何给定时间有 10 个并发用户。
我需要能够在回顾历史记录时报告客户同时登录的用户数超过 10 的情况。
我已经有一个用户表,其中包含以下列:userid(主键)、pw、lastLogin、lastLogout。
我正在考虑创建一个新的“日志记录”表,每次用户注销时都会在其中添加一个新行......列可能包括:
日志 ID、用户 ID、登录日期时间、注销日期时间
...然后我就会有每次用户登录/退出应用程序的历史记录...
但我不确定这个表设计是否有助于高效的报告计算...无论我使用 SQL 还是 C# 来执行计算对我来说并不重要,只要它相当快...
希望有人对如何更好地设计此表有一个好主意,以便我可以快速计算客户超出许可证限制时的任何/所有时间点。
注意:我不想阻止第 11 个、第 12 个等用户使用该应用程序...要求是向用户显示警告消息,但允许他继续工作...
将开始和结束会话视为需要记录的事件。您创建一个表来记录这些事件。
因此,开始和结束的会话在表中将有两个条目 - 一个用于会话开始,一个用于会话结束。您只需向表中添加记录,而不会修改以前的记录。现在,通过向记录添加“会话计数”字段,该表可以非常简单地跟踪打开的会话数,该字段在会话开始事件发生时从前一个记录的会话计数值递增,在会话结束事件发生时递减。
“会话计数”列现在为我们提供了并发会话数量随时间变化的分段连续函数。
示例数据:
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 键)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)