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

问题描述:

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

这是正确的做法吗?

  1. 生成一个随机数,一个接一个,将它们存储到一个数组中,并继续检查阵列的独特性,以及阵列完成时,整个数组存储数据库整理之后。
  2. 使用数据库并检查数字是否存在。

应该使用哪个数据库,因为应用程序最多可以扩展到100万个数字。

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

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

我不能评论直接从没有导轨的ruby使用数据库,因为我没有这样做。对我来说,Rails的一大优势就是创建使用数据库的应用程序是多么容易。

+0

那么,我将如何排序数据库..以使搜索更快。 – 2013-04-27 10:10:39

+0

将索引添加到要在 – 2013-04-27 10:16:01

+0

上排序的列中,哪个数据库最适合这样做? – 2013-04-27 10:50:55

一对夫妇的想法:

  1. 如果要存储10万家“随机”的数字,又有什么区别他们是否是随机进入数据库,或者如果数据库随机选择的一个数10,000个连续数字的范围?你需要双倍随机数字选择吗? MySQL,PostgreSQL和其他DBM可以生成随机数,并且可以使用它们的随机数生成器来检索一行,因此您可以让它直接从其生成器返回值,或者获取一行。无论如何,你不需要担心Ruby创建一个随机值 - 除非你真的想要“三倍”随机数。我只是将(1..10_000)范围内的值粘贴到数据库中,然后调用该部分并对查询进行处理以随机抓取记录。
  2. 如果你想要真正的随机数字,你不能保证唯一性。如果您对伪随机感到满意,则仍然存在问题,因为您可能最终会从范围内返回重复项,除非您跟踪之前用于特定会话的数字。如果您的网站受欢迎,那么如何跟踪一系列会话的独特性将成为一个有趣的问题。

如果我这样做,我会扭转一些过程。我不会将“随机”值存储在数据库中,我会使用Ruby的built-in random number generator,然后可能检查数据库以查看是否以前为该特定会话生成了该数字。总体而言,数据库中存储的值越少,查找以确定唯一性的速度就越快。

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

要做到这一点没有数据库我会创建随机/独特的范围使用类似于:array = (1..10_000).to_a.shuffle,然后每次我需要一个值我会使用pop从随机数组中拉最后一个值。我很想从所有会话的价值池中拉出,直到它耗尽,然后重新生成它。在这一点上可能会出现重复的“独特”值,但同一个数字连续出现两次的概率应该很小。