在ActiveRecord模型中为id使用非整数列是否有任何问题?我们将使用复制数据库,Rails应用程序的副本写入不同数据中心的数据库。我担心使用普通ID时,我们会在不同数据中心的新创建的行之间发生冲突。
我们的DBA建议只为每个不同的数据库/数据中心初始化具有不同起点的标识列,但随着时间的推移,这些最终会重叠并最终发生冲突(我担心的特定表格会非常紧张)高流量)。我相信它会在一段时间内发挥作用,但是我不希望成为那些在未来两年开始变得艰难的时候调试错误的人。
我想用GUID替换id列。数据库可以透明地生成它们,就像正常生成id一样。 MS保证它们不会在我们不同的数据库之间发生冲突。缺点是我必须确保Rails不会在不是整数的id列上进行barf。
还有其他人试过这样的事吗?你需要改变多少ActiveRecord管道?
答案 0 :(得分:1)
只是一个指针
create_table :blah, {:id => false} do |t|
t.string :my_string_id
end
execute "ALTER TABLE blah ADD PRIMARY KEY (my_string_id);"
答案 1 :(得分:1)
定义助手/ uuid_helper.rb
require 'rubygems'
require 'uuidtools'
module UUIDHelper
def before_create()
self.id = UUID.timestamp_create().to_s
end
end
并将其包含在您的模型中
class Model < ActiveRecord::Base
include UUIDHelper
# ........
end
答案 2 :(得分:0)
如果使用其他东西而不是Rails ID的默认值(我不知道)是一个问题,另一种可能性就是在本地应用中保留一般Rails的默认自动增量整数ID ,还有一个GUID字段,当你想要做多数据库的东西时,你会使用它。因此,当从一个DB插入到下一个DB时,您将指定GUID并让另一个DB生成自己的自动增量。