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

时间:2014-07-21 20:56:02

标签: ruby ruby-on-rails-4

我在rails中有一个API可以处理很多请求。让我们说每天有数百万。我希望能够为每个请求分配唯一的ID。我这样做的方式是从一个3个字母/数字的uid开始,并在前一个括号全部拍摄时继续直到9个字母/数字。

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

我想的第二种方法是提前自动生成所有可能的uid并为它们分配一个标志[free / taken],以便在请求进入时我将第一个免费uid分配给它,如果该索引已编入索引,则速度非常快。

非常感谢任何建议。谢谢

1 个答案:

答案 0 :(得分:2)

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

无论如何,这是一种使用您自己的自定义随机字符串生成器的方法,只有在它不存在时才会分配:

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_custom_random_string_method中生成的随机字符串,然后在while部分中检查是否存在其uid的{​​{1}} 1}}属性匹配刚刚生成的随机uid,如果是,则再次运行do块,冲洗并重复直到while部分中的表达式返回false表示uid不存在,然后保存对象并使用uid写入数据库。这样可以保证只使用数据库中不存在的uid保存object