随机获取可再现的随机生成的大d

2024-04-20 05:59:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要为压力测试NoSQL数据库生成大量基本数据类型的数据(现在是Cassandra,将来可能还有其他数据库)。我还需要能够在将来重新创建这个随机创建的数据,更麻烦的是,从这个已经生成的数据中检索随机条目来生成查询。你知道吗

通过向随机性生成器提供相同的种子,重新创建数据本身不会带来任何问题。困难的部分是从生成的数据中检索一个随机项。最可怕的方法是将所有数据存储在一个数据结构中,但是我们讨论的是潜在的GBs数据,所以这不应该是一个选项(或者我错了吗?)。你知道吗

先前生成的项的随机重新生成也应尽可能快,可在不同线程上同步,并理想地提供一种方法来指定生成的数据和测试数据项的选择的底层分布。你知道吗

[edit]我刚刚发现,random.jumpahead(n)-函数可能会派上用场,唯一的问题是它不能与python2.3以来使用的伪数生成器(PNGR)一起工作。但是旧的仍然可用(random.WichmannHill()),在那里我可以从我最初的种子“向前跳”n步。你知道吗

我只想说清楚:我使用的是Python2.7。你知道吗

[edit2]这个问题可以归结为跳过n生成步骤。您可以使用原始PNGR和一些代码来完成,比如我发现的here

def skip(n):
    for _ in xrange(n):
        random.random()

但是,正如我在源代码中所说的,这只对n<;~100.000有效,这太小了。使用random.WichmannHill()我可以用jumpahead(n)来处理任何具有相同性能的n。你知道吗


Tags: 数据方法数据库数据结构条目random种子数据类型
1条回答
网友
1楼 · 发布于 2024-04-20 05:59:13

如果您已经知道1)要生成的条目数,以及2)需要从该数据中获取的随机条目数,则可以在生成随机条目数时获取这些条目数,只将这些条目数存储在数据结构中。你知道吗

假设您需要为您的NoSQL数据库创建一百万个条目,并且您知道您需要从中随机抽取100个条目来测试查询。您可以生成100个介于1和1000000之间的随机数,当您为压力测试生成条目时,您可以获取与随机生成的数字匹配的条目,并将这些特定的条目存储在数据结构中。或者,您可以以某种概率m/n将随机生成的条目保存到数据结构中,其中m是您需要的随机测试查询数,n是您正在创建的数据总量。你知道吗

基本上,在生成随机数据时获取随机数据要比存储所有数据并从中随机抽取数据容易得多。至于如何生成数据,这可能取决于您的NoSQL实现和您想要使用的特定数据格式。你知道吗

编辑:正如dcocking指出的,您甚至不需要将测试项本身存储在数据结构中。您可以在生成数据时执行它们。您需要存储的只是确定运行哪些测试的序列。或者,如果您不想每次都运行相同的测试,您可以像上面提到的那样随机选择某些元素作为测试元素,而不存储任何内容。你知道吗

相关问题 更多 >