设计审计跟踪以进行计费

时间:2013-03-21 15:29:11

标签: ruby-on-rails-3 data-modeling audit audit-logging

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

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

    简单地说,您根据配置付费。我们的具体要求如下:

    1. 您根据当月的最高金额支付月费。如果您在3日升级到1,000个用户并在10日降级到500,那么您需要为整个月支付1,000个用户。
    2. 您可以随时升级。
    3. 您可以每天降级一次。
    4. (乍一看这可能听起来不公平,但我们在这里分配了一些严肃的资源。)

      我正在寻找一种方法来设计一个能够完成我们想要的数据模型而不会过多地使用它。

      我考虑过的事情

      审核宝石

      据我所见,我无法使用simple_auditpaper_trail等宝石。

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

      自制解决方案

      我可以想象以下自制解决方案:存储

      等记录的数据库表
      (model, metric, value, time_of_change, user_who_made_the_change)
      

      这使得:

      成为可能
      • 在一个地方进行所有更改
      • 查询日期范围内的最大值(要求#1)
      • 查询何时允许下一次更改(要求#3)

      此表格将在ActiveRecord(可推测的after_save)回调中更新,即wrapped in the transaction around save

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

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

0 个答案:

没有答案