首页 > 解决方案 > 存储 UpdatedAt 或 ExpireAt 时间戳以通过超时限制更新是正确的

问题描述

我需要实现功能来存储一些值,并限制每周更新一次。我通过以下方式实现:

class Example
{
    //Stored in db
    public int _value;

    //Stored in db
    public DateTime _updatedAt;

    //Stored in db
    public DateTime _canUpdateAfter;

    //Constant in code
    public TimeSpan _updateTimeout = TimeSpan.FromMinutes(1);
        
    public void StoreValue1(int value)
    {
        if (DateTime.Now - _updatedAt < _updateTimeout)
        {
            return;
        }

        _value = value;
        _updatedAt = DateTime.Now;
    }

    public void StoreValue2(int value)
    {
        if (_canUpdateAfter > DateTime.Now)
        {
            return;
        }

        _value = value;
        _canUpdateAfter = DateTime.Now + _updateTimeout;
    }

}

我有两种实现方式:

  1. 将更新的时间存储在 db 中并计算超时是否在 .net 代码中传递。
  2. 当超时到期时将值存储在 db 中,并将其与 .net 代码中的当前值进行比较。

使用哪个,为什么?

标签: databasedesign-patternsdatabase-designarchitecture

解决方案


两种解决方案都是有效的。

方式之间的唯一区别是决定设置下一次更新可能性的时间。

使用解决方案 1,您每次都在代码评估上做出决定,而其他人则强制决定过去。

我更喜欢解决方案1;更灵活,更可持续。

请记住您的业务更改更新频率的情况。使用解决方案 1 有足够的新代码部署或更改假设配置表的一行,而使用解决方案 2 您将需要更新表的所有行。


推荐阅读