3

我有一个 mnesia 表t,其中包含具有单个字段的记录x。如何从中选择随机xt

为了避免整个数学学究的过程:我不关心随机数生成的细节,我只是希望我的结果每次都不一样。

谢谢,
-tjw

4

2 回答 2

5

不是很有效,但会起作用:

  1. 生成随机整数 X
  2. 获取表格大小
  3. 使用 mnesia:first 获取指针
  4. 迭代 X 次以随机记录
  5. 查询记录

更复杂:

  1. 创建包含整数的额外字段
  2. 整数在任何集合上递增
  3. 在额外字段上创建索引
  4. 随机数 X
  5. 以 X 为键的脏读索引行

多一个:

  1. 使用 int 作为主键
  2. 随机整数
  3. 检索行

这些解决方案中的每一个都有重要的缺陷:并发写入性能、读取开销等。

于 2011-06-01T05:53:03.270 回答
4

通过使用mnesia:all_keys/1(或脏等价的)函数和random模块。

random_value(Table) ->
    Keys = mnesia:dirty_all_keys(Table),
    Key = lists:nth(random:uniform(length(Keys)), Keys),
    [#record{x = X}] = mnesia:dirty_read({Table, Key}),
    X.

不要忘记使用random:seed/3.

于 2011-06-01T08:01:38.543 回答