从健忘症中选择随机记录

| 我有一个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
初始化种子。     
        效率不高,但可以工作: 产生随机整数X 获取表大小 使用mnesia:first获取指针 重复X次以随机记录 查找记录 更复杂的: 创建包含整数的额外字段 整数在设置时递增 在额外字段上创建索引 随机数X 以X为键的脏读取索引行 多一个: 使用int作为主键 随机整数 检索行 这些解决方案中的每一个都有重要的缺陷:并发写入性能,读取开销等。     

要回复问题请先登录注册