Ruby 构建唯一标识符生成的最佳方法

Ruby 构建唯一标识符生成的最佳方法,ruby,ruby-on-rails-4,Ruby,Ruby On Rails 4,我在rails中有一个API,可以处理很多请求。比如说每天数百万。我希望能够为每个请求分配一个唯一的id。我这样做的方式是从一个3个字母/数字的uid开始,然后继续到前面括号中的9个字母/数字 我正在做的一件事是在请求到来时实时生成uid,因此应用程序将尝试找到第一个可用的uid并分配它。但过了一段时间,我觉得这会影响应用程序的性能 我想的第二种方法是提前自动生成所有可能的uid,并为它们分配一个标志[free/take],这样当请求传入时,我会将第一个空闲uid分配给它,如果该字段被索引,这应

我在rails中有一个API,可以处理很多请求。比如说每天数百万。我希望能够为每个请求分配一个唯一的id。我这样做的方式是从一个3个字母/数字的uid开始,然后继续到前面括号中的9个字母/数字

我正在做的一件事是在请求到来时实时生成uid,因此应用程序将尝试找到第一个可用的uid并分配它。但过了一段时间,我觉得这会影响应用程序的性能

我想的第二种方法是提前自动生成所有可能的uid,并为它们分配一个标志[free/take],这样当请求传入时,我会将第一个空闲uid分配给它,如果该字段被索引,这应该非常快


任何建议都将不胜感激。谢谢

我只会生成一个随机字符串,并在它不存在时分配它。在我开始之前,让我先提一下
SecureRandom.uuid
是最好的方法。它生成随机UUID,其碰撞概率在数学上是不可能的

无论如何,这里有一种方法可以使用您自己的自定义随机字符串生成器,该生成器仅在不存在时才进行分配:

def generate_random_uid
  begin
    uid = my_custom_random_string_method
    object.uid = uid
  end while ObjectModel.exists? uid: uid

  object.save
end

do while块将执行一次,并将名为
uid
的变量设置为在方法
my\u custom\u random\u string\u method
中生成的随机字符串,然后在while部分检查是否存在
uid
属性与刚生成的随机uid匹配的记录,如果存在,则再次运行do块,冲洗并重复,直到while部分中的表达式返回false,表示uid不存在,然后保存对象并将uid写入数据库。这保证了您只能使用数据库中不存在的uid保存
对象。

由于平台限制,uid的实际生成需要自定义。我把那件工作得很好。所以需要是我拥有的子集的3到9个字符。我只是不确定该使用什么架构。我将尝试使用这种方法进行负载测试。我一做完就告诉你。谢谢迭戈。你的解决方案会奏效的。唯一语法错误的是你需要一个循环来做。。。除非在rubyGood catch中结束,否则断开,修复了答案。谢谢如果我将应用程序部署到多个服务器,并且在两个不同的服务器上同时收到两个请求,那么这种方法仍然有效吗?