【发布时间】:2012-08-29 10:45:50
【问题描述】:
我有一个大型网络应用程序,它每天将数百万行写入 PostgreSQL 中的分区表(这意味着每天的数据都有一个新表)。
我们正在使用PostgreSQL's table inheritance and partitioning 来加快速度:
由于我们的数据库中有一年的数据,我们无法有效地使用插入触发器将内容路由到正确的表(函数的长度变得非常非常长)。
长话短说,我们需要 ActiveRecord 知道 insert 和 update 的数据在哪个表上。但是,不要更改用于选择和其他数据库任务的表。
显然,为模型定义表名很简单,但是否可以仅针对特定操作覆盖表名?
这里有更多细节:
数据库:
- 表格:dashboard.impressions(id、host、data、created_on 等)
- 表格: data.impressions_20120801(继承自dashboard.impressions,created_on 的约束等于表格日期)
Impression.create :host=>"localhost", :data=>"{...}", created_on=>DateTime.now 应写入data.impressions_20120801 表,其中Impression.where(:host=>"localhost") 应搜索dashboard.impressions 表,因为它包含所有数据。
编辑:我正在运行 PostgreSQL 9.1 和 Rails 3.2.6
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 postgresql partitioning