2

我们正在开发具有类似于 Amazon DynamoDB 定价模型的 Rails 应用程序(即,灵活地提供您需要的东西)。为了简单起见,假设您可以配置:

  1. 用户数
  2. 您可以创建的文档数量

要求

简而言之,您根据您的配置付费。我们的具体要求如下:

  1. 您根据当月的最高金额支付月费。如果你3号升级到1000个用户,10号降级到500个,你就为1000个用户支付一整个月的费用。
  2. 您可以随时升级。
  3. 您可以每天降级一次。

(乍一看这可能听起来不公平,但我们在这里分配了一些重要的资源。)

我正在寻找一种方法来设计一个数据模型,它可以做我们想要的,而不会妨碍太多。

我考虑过的事情

审计宝石

据我所知,我不能使用像simple_auditpaper_trail这样的宝石。

它们在数据库中存储序列化的模型更改。这对于撤消和版本控制非常有用,但不适用于要求 #1,因为您无法在日期范围内获取更改然后找到 MAX 值(无需在 Ruby 中计算大部分)。

自制解决方案

我可以想象以下自制的解决方案:一个存储类似记录的数据库表

(model, metric, value, time_of_change, user_who_made_the_change)

这使得可以:

  • 将所有更改集中在一个地方
  • 查询一个日期范围内的最大值(需求#1)
  • 查询何时允许下一次更改(要求 #3)

该表将在 ActiveRecord(假定after_save)回调中更新,该回调包含在事务中save

由于NIH 综合症,我对自制解决方案感到担忧,也许我对审计宝石的担忧完全没有根据。

或者,只是也许,我忽略了一个方面或整个其他解决方案。你怎么看?

4

0 回答 0