【问题标题】:How to check a database table frequently?如何经常检查数据库表?
【发布时间】:2016-03-24 14:40:06
【问题描述】:

我正在开发一个升级系统,当用户达到一定数量的点时,用户就会升级,当他/她获得 100 点时将升级到 2 级。

为此,我能够“实时”进行练级,因为我会检查是否有新点添加到表中,系统将计算他/她是否符合标准。

但是现在,有一个等级下降的场景,如果用户在当前等级到期之前未能升级到下一个等级(以到期日期和时间表示),用户将被降级。如果我将所有级别的到期时间设置为午夜(凌晨 12 点)并运行作业以扫描所有用户以检查是否有任何用户必须降级,我就能够做到这一点。

我的问题是,如果我允许级别到期时间不仅是午夜,而是按照他/她升级的时间,如果用户在 2016 年 3 月 24 日上午 9:30 升级到 2 级,那么该级别到期时间为 2016/4/24 上午 9:30。

在这种情况下,我如何检查该用户是否应该被降级,如果该用户当时没有登录或获得任何新积分?由于所有用户的到期时间可能不同,因此我无法为此级别降低设置任何作业。

提前致谢。

【问题讨论】:

    标签: c# database real-time sql-job


    【解决方案1】:

    使用多种技术组合:

    1) 您确实需要一个定期安排的作业(无论运行多么频繁,例如每 10 分钟甚至每小时一次),它会扫描自上次作业运行以来已过去的新到期时间(您可以为此将作业执行时间存储在单独的表中)。顺便说一句,这个计划的作业还可以处理任何其他需要无人参与处理的事件(即无需用户登录)

    2) 当用户登录时,明确检查他们的级别、有效期以及您需要的任何其他内容。这将确保您对它们的状态进行同步(近乎实时)准确的检查,即使作业最近运行的时间不够长。

    这些技术的组合应该允许您处理任何这样的场景。

    【讨论】:

      【解决方案2】:

      我在商业供应系统中遇到过类似的情况,用户应该在 30/60/90 天不活动后被标记。对于每个标志,我在数据库中创建了一个 Computed Column(s),当扫描记录时(对表进行选择),它将返回一个布尔值(位)计算 at当前日期的那个时间 用户是否在这些不同的时间范围内登录。

      您可以通过将最后升级时间包含为一列来提供类似的逻辑,然后让一个单独的列应用业务逻辑以查看它们是否已升级......等等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-10
        • 2020-07-15
        • 1970-01-01
        • 2015-04-06
        • 2023-01-17
        • 2021-06-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多