如何解决从健忘症中选择随机记录
| 我有一个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作为主键
随机整数
检索行
这些解决方案中的每一个都有重要的缺陷:并发写入性能,读取开销等。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。