【发布时间】:2018-09-27 13:18:07
【问题描述】:
我在 Apache + mod_passenger 上有一个胖多租户 Rails 应用程序,它从 PostgreSQL 表中输出产品价格,如下所示:
Table "public.products"
Column | Type
id | bigint
name | character varying(100)
price | numeric(8,2)
然后在 products.rb 我有...
class Product < PostgresDatabase
self.table_name = "products"
# ... yadda yadda
end
我想要的是以一种非常具体的方式对“产品”表进行分区,以便我最终为每个租户得到类似 products_TENANT-ID 的东西(基本上是主产品表的视图,但这是另一回事)并且能够像这样查询:
Products.for_tenant(TENANT-ID).where(:name => "My product")......
我想我可以创建一个方法:
class Product < PostgresDatabase
self.table_name = "products"
# ... yadda yadda
def for_tenant(tid)
self.table_name = "products_" + tid.to_s
self
end
end
但是考虑到大量流量(每秒数千个请求),这会对应用程序产生什么样的影响?有什么我想念的吗?我应该尝试不同的策略吗?
非常感谢您的任何反馈/想法!
【问题讨论】:
标签: ruby-on-rails ruby activerecord rails-activerecord