问题描述
|
我有一个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作为主键
随机整数
检索行
这些解决方案中的每一个都有重要的缺陷:并发写入性能,读取开销等。