【问题标题】:How to to store production data to a reporting DB in a Rails app?如何将生产数据存储到 Rails 应用程序中的报告数据库?
【发布时间】:2011-03-12 14:45:55
【问题描述】:

我们想要跟踪 Rails 应用程序的生产数据,以便我们可以在几个月内对其进行分析。

更准确地说,我们有一些带有“状态”和日期列的数据模型,这些列可以经常更改。 这个想法是在每次状态或任何其他属性更改时在数据库或日志文件中的某处写一个新行。这些行包含该对象所有属性的副本。

我看到了不同的解决方案:

  • 使用带有 after_save 的观察者,并将保存的数据复制到报告 Mysql Db
  • 使用记录器系统。
  • 在数据库级别执行不同的操作,检测表中的更改并将受影响的行复制到报告数据库。

如果将数据存储在数据库中,则更容易提取数据。日志文件速度更快,并且不会使过程减慢太多。我不知道什么是最好的方法,或者是否有任何其他解决方案/实现。

【问题讨论】:

    标签: mysql ruby-on-rails logging reporting


    【解决方案1】:

    你看过acts_as_versioned 吗?我确信为此目的编写了一个更现代的库,但它可能会满足您的需要:对更新数据进行版本控制,以便您以后可以跟踪它。无论如何,它可能会给你一个模板。

    【讨论】:

    • acts_as_versioned:我担心性能,我必须破解它以使用不同的数据库(我不想混合生产和报告),我不需要所有方法(object.version.before、Object.version.after 等)。但是,是的,这很有趣。
    • 我发现了一个更现代的 gem,并且有一个截屏视频:railscasts.com/episodes/177-model-versioning。但同样,这并没有达到相同的目标。我不想回到版本“xxx”。而且我猜它正在停止在版本控制表中写入的正常流程,所以这需要时间。
    • 昨晚我并没有真正想到这一点,但我想你可能会使用谷歌分析,但 CSV 文件也是一个好主意,或者你可以写一些类似 json 键/值对的东西归档,然后不必担心模型结构的变化。在审计说明中,我更认为这些版本将允许您基于审计状态和日期列来构建信息。不完全确定您的具体需求,但我认为您走在正确的轨道上。
    【解决方案2】:

    有一个选项作为宝石:http://github.com/andersondias/acts_as_auditable

    现在我正在犹豫是保存在审计表中还是保存在 CVS 格式的文件中。我的感觉是第二种选择更好,因为写入文件更快,而且我们不依赖与数据库服务器的连接。

    任何单个 BI 工具都可以使用 CVS 文件作为数据源。问题是每次更改表的结构时都必须创建一个不同的文件。但这有问题吗?

    【讨论】:

      【解决方案3】:

      我终于使用了一个观察者,以及一个带有 FasterCSV 的 Logger 来生成审计日志。

      我无法正确复制/粘贴所有代码,因此这里是博客文章的链接,供感兴趣的人使用:

      log rails production data to perform some audit (bi)

      这可以很容易地适应任何 Rails 模型。 :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-03
        • 1970-01-01
        相关资源
        最近更新 更多