我有一个非常大的表Metrics
,主整数键名为id。
主键为32位整数,即将溢出。我试图解决这个问题的方法是:
- 用(几乎)相同的模式创建一个新表,但是用64位整数代替ID。
- 在
Metric
模型上设置self.table_name = "metrics_with_bigints"
- 在
metrics_with_bigints
表中创建(31 ^^ 2)
+ 1 ID 的记录
对于NEW记录可以正常工作。然而,我希望能够调用Metrics.find(1)
,仍然让它返回记录。
该表是APPEND ONLY,记录不能被修改。
我认为我想在默认情况下UNION ALL
这两个表,但我有问题解决这个
我的想法是:
class Metric < AR::Base
def self.find_by_sql(*args)
sql = args.first
# do something here that unions the 2 tables?
super
end
end
我不确定这种方法是否可行。
我相信你可以改变主键的类型。并将其改为UUID。它是128位数字,有几个额外的优点。遵循这个->https://andycroll.com/ruby/choose-uuids-for-model-ids-in-rails/