在我的数据库中存储随机数的正确方法是什么?

时间:2013-04-27 09:26:38

标签: ruby-on-rails ruby ruby-on-rails-3

我正在开发一个应用程序,它将生成唯一的随机数,然后将它们存储到数据库中。我将通过HTTP请求检查是否存在数字。最初,为了入门,我会使用大约10,000个数字。

这是正确的方法吗?

  1. 生成一个随机数,并逐个将它们存储到数组中并继续检查数组唯一性,当数组完成后,将整个数组存储到数据库中。
  2. 使用数据库并检查数字是否存在。
  3. 我应该使用哪个数据库,因为该应用程序可以扩展到100万个数字。

2 个答案:

答案 0 :(得分:1)

它可能更有效,特别是如果你想生成1000000个数字,一次一个,并在模型/数据库中使用验证防止重复。

关于选择数据库,它将取决于你想要的应用程序。这里有一些信息:Which is the Best database for Rails application?

我无法评论直接从没有rails的ruby使用数据库,因为我还没有这样做。对我来说,rails的一大优点是它可以轻松创建使用数据库的应用程序。

答案 1 :(得分:1)

一些想法:

  1. 如果您要存储10个或10,000个“随机”数字,它们是否随机进入数据库,或者数据库是否随机选取一个10,000个连续数字范围内的数字会有什么不同?你需要双倍随机数选择吗? MySQL,PostgreSQL和其他DBM可以生成随机数,并且您可以使用它们的随机数生成器来检索行,因此您可以让它直接从其生成器返回值,或者获取一行。无论哪种方式,您都不必担心Ruby会创建一个随机值 - 除非您真的想要“三重” - 随机数。我只是将(1..10_000)范围的值粘贴到数据库中并调用该部分并处理查询以随机获取记录。
  2. 如果您想要真正随机的数字,则无法保证唯一性。如果您对伪随机感到满意,那么您仍然会遇到问题,因为您最终可能会从范围内返回重复项,除非您跟踪之前用于特定会话的数字。如果您的网站受欢迎,如何在一堆会话中跟踪唯一性将是一个有趣的问题。
  3. 如果我这样做,我会反转一些过程。我不会将“随机”值存储在数据库中,我会使用Ruby的built-in random number generator,然后检查数据库以查看我之前是否为该特定会话生成了该数字。总的来说,数据库中存储的值越少,因此查找确定唯一性的速度会更快。

    这仍然是一个尴尬的代码系统,随着会话“独特”记录的增长,随着时间的推移会变得效率低下。

    要在没有数据库的情况下执行此操作,我会使用以下内容创建随机/唯一范围:array = (1..10_000).to_a.shuffle,然后每次我需要一个值时,我会使用pop从中提取最后一个值随机数组。我很想从所有会话的价值池中拉出来,直到它耗尽,然后重新生成它。此时可能存在重复的“唯一”值,但同一数字连续两次重新出现的可能性很小。