【问题标题】:Ruby on Rails / ActiveRecord and Table PartitionsRuby on Rails / ActiveRecord 和表分区
【发布时间】:2015-05-18 14:40:33
【问题描述】:

到目前为止,我已经阅读了文档并且能够找到任何可以帮助我的东西。我也阅读了大量的博客文章,但似乎没有直接回答我的问题:

是否可以使用 ActiveRecord 管理 InnoDB 表中的表分区? 我真的希望保持非常干净,并且我试图避免编写外部脚本来尝试自动化随着时间的推移创建/删除分区。

【问题讨论】:

  • 你想要什么分区管理?
  • @RickJames 好吧,让我们从任何类型开始。我目前正在跨两天宽的日期范围运行分区。我完全不知道使用 Rails 对分区进行任何内置管理,也没有遇到任何声称以任何智能方式执行此操作的 gem。
  • 手动分区的最终目标是什么?也许您试图以错误的方式给猫剥皮,并且手动过程较少(例如,添加适当的索引)? ActiveRecord 是一种抽象,添加对 MySQL 已经尝试抽象掉的东西(AFAIK)的支持似乎确实很容易泄漏。
  • 我们有大量的行(数亿行)。整个表的索引 > 256 gigs。对表进行分区可以将索引降低到可以保存在 RAM 中的合理值,从而大大提高性能。
  • 顺便说一句,在您说行中的数据必须太多之前,有问题的表只有三列。这是一个只有整数的连接表。

标签: mysql ruby-on-rails postgresql activerecord database-partitioning


【解决方案1】:

是的,你可以! 但我不认为有什么宝石可以为你做到这一点。

为了执行分区管理,您需要自己做艰苦的工作,并通过以下方式直接通过连接发送您需要在DB上运行的命令

ActiveRecord::Base.connection.execute("ALTER TABLE your_table drop partition p0")

【讨论】:

  • Mm.. 这句话的意思是,“没有内置的支持它,所以你自己做原始 SQL..” 不是我要找的。如果我必须自己执行 SQL,我不会为首先加载 Rails 框架的所有开销而烦恼。我会继续使用我拥有的脚本。
  • 有几个工具可以管理 postreSQL 的分区,也许你应该尝试它而不是 MySQL,或者自己编写这个 gem,让地球上所有的 Rails 程序员受益。
  • 我在 mysql 中广泛使用分区,除了在 activerecord 中使用原始 SQL 来定义和管理它们之外,从未遇到过其他任何事情。
  • 对于 Postgres 列表分区,它是 ActiveRecord::Base.connection.execute('DROP TABLE p0;'),其中 p0 是分区名称,以防万一有人偶然发现。
【解决方案2】:

自从我第一次提出这个问题以来,已经出现了一个额外的解决方案。虽然该解决方案确实需要在 MySQL 或 Maria 上使用 Postgresql,但这并不是一个高障碍,因为它或多或少是 Rails 的默认数据库。

Github 上的 Partitioned gem 专门以一种不错的 Railsy 方式处理所有分区机制。

【讨论】:

    【解决方案3】:

    我看不出 ActiveRecord 是如何做到DROP PARTITIONREORGANIZE PARTITION 这样的事情的。它甚至可以调用存储过程吗?如果是这样,那么构建一个类似于 my blog 中的内容并从 Rails 中调用它。

    【讨论】:

    • 然而迁移绝对支持它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多