【问题标题】:Rails 4 Model, switch DB depending on scenario - Seeking Optimal Design PatternRails 4 Model,根据场景切换DB——寻求最优设计模式
【发布时间】:2017-03-17 21:55:18
【问题描述】:

我有一个平台,其中大量数据(每天数百万条记录)将存储在 Amazon Redshift 中,但这些数据也将由 cronjob 定期处理,然后将在 PostgreSQL 数据库中创建聚合统计信息运行我的 Rails 应用程序,而旧数据将从 Redshift 中清除。

本质上,这意味着对于最近事件的统计信息(在最后一两天),我的 Rails 模型需要从 Redshift 中提取,否则,它需要从 PostgreSQL 中提取。由于 PostgreSQL 数据库将只包含聚合统计信息,因此查询也会有所不同。

编写这个代码并不难,但我不确定这样的模型如何适合 Rails。 ActiveRecord 似乎将模型与数据库实现紧密耦合,所以我认为我需要创建一个不扩展 ActiveRecords 的主模型,以及一个 ActiveRecord 模型和一个 lib 类来处理 Redshift 查询。这是我的方案的最佳设计,还是我应该考虑其他设计模式?

【问题讨论】:

    标签: ruby-on-rails postgresql activerecord amazon-redshift


    【解决方案1】:

    您可以尝试使用外部数据包装器从 Postgres 访问 Redshift 表。设置指南见这里:http://www.vertabelo.com/blog/technical-articles/foreign-data-wrappers-for-postgresql

    【讨论】:

    • 如何与 ActiveRecord 集成?在这种情况下,逻辑会去哪里确定是使用模型的 Redshift 版本还是 Postgres 版本?它如何解释两个数据库的查询将不同的事实?
    • 您必须向您的应用程序添加逻辑,以了解何时使用哪个数据库。或者,您可以将 Postgres 表和 Redshift 表包装在 UNION ALL 视图中,并将它们视为单个模型。 FWIW,我实际上建议将所有这些数据放入 Redshift。
    • 您似乎误解了这个问题。我不是在技术上问如何做到这一点,我知道如何做到这一点。我想要了解的是要使用的设计模式。我认为这需要一个工厂对象来生成正确版本的模型。我正在尝试确定这是否是最佳模式,以及将此类代码放入 Rails 应用程序的最佳位置 - 它是特定于应用程序的,因此它不属于 /lib。
    猜你喜欢
    • 2013-12-01
    • 2011-05-09
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多