【发布时间】:2011-09-05 21:58:58
【问题描述】:
我有一个 mnesia 表 t,其中包含具有单个字段 x 的记录。如何从t 中选择随机值x?
为了避免整个数学迂腐的过程:我不关心随机数生成的细节,我只是希望我的结果每次都不一样。
谢谢,
-tjw
【问题讨论】:
-
我希望您能告诉我们表 t 中主键的性质,以及记录的性质。我认为您的问题是如何从 mnesia 表中选择随机行,对吧?
我有一个 mnesia 表 t,其中包含具有单个字段 x 的记录。如何从t 中选择随机值x?
为了避免整个数学迂腐的过程:我不关心随机数生成的细节,我只是希望我的结果每次都不一样。
谢谢,
-tjw
【问题讨论】:
通过使用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 初始化您的种子。
【讨论】:
mnesia:dirty_all_keys/1 需要 300 毫秒。
效率不高,但会起作用:
更复杂:
还有一个:
这些解决方案中的每一个都有重要的缺陷:并发写入性能、读取开销等。
【讨论】: