设计订阅到期的最佳方式是什么?

时间:2013-04-28 22:35:37

标签: ruby-on-rails django database-design

我正在重新设计我们的订阅模型,并想知道什么是最好的设计模式:

模型1:

用户有结算日期。

在结算日期之上,为用户分配了特定的到期日期。到期日期= signup_date + subscription_length。

如果current_time()小于expiry_date,则授权系统授权访问。

模型2:

用户有结算日期。

如果用户订阅状态=有效,授权系统会授权访问。

使用Cronjob,如果current_time>用户的订阅状态从活动状态更改为已过期状态。 billing_date

3 个答案:

答案 0 :(得分:2)

模型1最好只进行一次修改:expiry date = subscription_date + subscription_length - 而不是signup_date,因为注册日期始终是用户第一次注册(通常)。但他们会反复重新订阅(希望如此)。在用户重新订阅到期后可能还存在差距,因此如果您只在注册日期添加订阅长度,他们将失去新订阅的时间。

正如@Will指出的那样,模型2是一种很好的方法,可以找到哪些用户的订阅即将到期。

答案 1 :(得分:1)

我个人认为 Model 1 是一种更好的方法。
即使用户在其间扩展订阅,您也可以安全地应用回调并设置适当的expiry_date 这将对cron在 Model 2 中预期的后台作业没有任何瓶颈。

我很想在这个问题上学习更有经验的开发者的观点。 :)

答案 2 :(得分:1)

模型1很好,因为您只在需要时进行评估,即当有人试图访问某些内容时,它非常有效并且可以保存一份cron作业。 Cron工作可能很难管理,并且可能会产生扩展问题,

模型2的优势在于您可以了解会话何时到期(或不久之后),即在到期时有保证的事件。这可能是件好事,例如如果您要发送一封电子邮件,说明订阅已过期,或者您想知道有多少订阅仍处于活动状态。当然还有其他模型可以获得这些功能。