繁体   English   中英

如何使用 MySQL 在 Rails 中更改大表的“id”列类型

[英]How to alter `id` column type for large tables in Rails with MySQL

考虑在 Rails 中有 2,000,000,000 多条记录的表上,将列从int(10)更改为bigint(8)的推荐方法是什么:

  1. 在生产中运行并暴露给客户
  2. 记录不断添加到表中
  3. 如上所述,桌子很大

这是一个示例迁移,说明了结果应该是什么:

class ChangeTableNameIdType < ActiveRecord::Migration
  def change
    execute('ALTER TABLE table_name MODIFY COLUMN id BIGINT(8) NOT NULL AUTO_INCREMENT')
  end
end

在 Shopify,我们使用了LHM 的一个分支,它允许在系统启动和运行时进行迁移。 比要求您使系统脱机的内联迁移要好得多。

它将处理数十亿条记录,但重要的是要了解它会在迁移过程中创建一个并行表,然后切换到新表,因此您需要确保有可用的数据库空间。

具体回答你的观点:

在生产中运行并暴露给客户

是的,这将在生产中运行,并且可以在客户使用您的产品时安全地并行运行。

记录不断添加到表中

在写入 LHM 表时,新记录将同时写入现有表和 LHM 表。 一旦现有表和 LHM 表更新为日期/同步,您就可以切换到 LHM 表,从而完成迁移。

如上所述,桌子很大

适用于数十亿条记录。 有在这种规模下使用它的个人经验。 有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM