导轨非常大的表

时间:2011-09-05 21:05:01

标签: ruby-on-rails rdbms

Rails喜欢使用自动增量32位整数作为表的主键。当人们接近表格中32行int#行的限制时,他们会怎么做?

2 个答案:

答案 0 :(得分:3)

您可以将密钥更改为bigint吗?这是一个8字节(64位)的整数。它为您提供最多9个quantllion而不是40亿。但是,没有本地迁移,您必须执行以下操作:

execute("ALTER TABLE massive_table CHANGE id id BIGINT")

编辑显然在字段as Alex suggested上指定限制确实允许PostgreSQLmySQL中的bigint。

答案 1 :(得分:1)

您可以使用8字节的id字段。 Rails不提供创建长整数或双精度列的类型,但可以使用:limit参数来完成:

create_table :my_table do |t|
  t.integer :long_int_column, :limit => 8
  t.float :double_column, :limit => 53
end

8和53是魔数。这适用于PostgreSQL和MySQL数据库,但我没有尝试过任何其他数据库。

如果您要更改表格,则可以编写

change_column :my_table, :my_col, :integer, :limit => 8

8字节id字段的替代方法是以某种方式处理id翻转。这取决于您的数据和应用程序的具体情况。