是否可以使用rails中的单个模型管理多个表?

时间:2016-06-20 11:55:48

标签: ruby-on-rails ruby

是否有任何方法可以为不同的表使用单个模型 表有相同的字段和属性?我有第一张表有3百万条记录。所以我想创建另一个像'tablename_2'这样的表来进行快速查询。

我想使用现有模型,但根据某些条件,它应该决定需要访问哪个表。

我想知道这是否可行?

2 个答案:

答案 0 :(得分:3)

你可能想尝试这样的事情:

convertPoint:CGPointZero toView:tableView

用这个称呼它:

class Example < ActiveRecord::Base
  def self.within_table(name)
    begin
      previous_table_name = self.table_name
      self.table_name = name if name.present?
      yield if block_given?

    ensure
      self.table_name = previous_table_name
    end
  end

  # ...
end

请记住,此代码可能非线程安全,应谨慎使用。此外,在不同的表之间拆分模型内容不是一个好主意。您应该使用不同的模型,或single table inheritange

答案 1 :(得分:3)

是。它被称为水平数据库扩展或扩展 out ,从而将大型数据库拆分为较小的集合以处理负载。 垂直缩放或缩放 up 是通过增加硬件来完成的。

有两种缩放 out 的选项:

<强> 1。阅读副本

这些通常用于具有高读/写比率的应用。想想新闻网站,一些作家撰写的文章可以被世界各地的数百万人使用。基本上,您有一个主数据库处理所有写入,然后将其复制到处理读取操作的从属数据库中。

<强> 2。数据库分片

数据库可以按行,按表,按功能,按地理位置,按客户端或任何其他度量进行拆分。数据库之间不共享数据。如果您的数据之间有明确的界限,即您在不同国家/地区拥有Saas客户,并且他们不可能需要来自其他国家/地区的数据,您将使用此架构。

在此处阅读更多https://www.wikiwand.com/en/Shard_(database_architecture)

然而,这个问题与您的数据库架构有关,而不是Rails。如果我在你的鞋子里,我会专注于非规范化,索引,查询优化和垂直缩放,然后才考虑将其缩小。

对于postgreSQL来说,300万条记录不应该是一个问题,但如果你逐月增长100%,那么开始在数据库中加入一些可扩展性是明智的。