从mnesia中选择随机记录

发布于 2024-11-11 06:31:50 字数 179 浏览 3 评论 0原文

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

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

谢谢,
-tjw

I have an mnesia table t that contains records with a single field x. How can I select a random value x from t?

To avoid the entire of process of mathematical pedantry: I don't care about the details of the random number generation, I just want my result to generally not be the same every time.

Thanks,

-tjw

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

谷夏 2024-11-18 06:31:50

效率不高,但可以工作:

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

更复杂:

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

还有一个:

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

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

not really efficient but will work:

  1. generate random integer X
  2. get table size
  3. get pointer using mnesia:first
  4. iterate X times to random record
  5. lookup record

more sophisticated:

  1. create extra field containing integer
  2. integer is incremented on ever set
  3. create index over extra field
  4. random number X
  5. dirty read indexed row with X as a Key

one more:

  1. use int as primary key
  2. random int
  3. retrieve the row

Each of those solution has important faults: concurrent write performance, read overhead etc.

彡翼 2024-11-18 06:31:50

通过使用 mnesia:all_keys/1 (或 dirty 等价物)函数和 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 初始化您的种子。

By using the mnesia:all_keys/1 (or dirty equivalent) function and the random module.

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.

Don't forget to initialize your seed using random:seed/3.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文