我正在使用脏写向mnesia写记录
:mnesia.dirty_write({Table_Name, id, Node.self(), timestamp, msg})
我想删除超过1小时的记录,如何设置到期或TTL?
Mnesia没有内置支持记录到期/ TTL。您必须自己实现此功能,例如通过定期扫描表中的过期记录并删除它们。
由于mnesia没有任何ttl机制(至少我找不到),我写了一个gen服务器,它删除了milsia超过1小时的所有记录。此gen服务器每1小时激活一次,删除旧记录并返回睡眠状态。这是逻辑的代码片段
{:atomic, list} =
:mnesia.transaction(fn ->
:mnesia.select(Table_Name, [
{{Table_Name, :"$1", :"$2", :"$3", :"$4", :"$5", :"$6", :"$7", :"$8", :"$9", :"$10"},
[{:<, :"$3", cutoff_time}], [:"$$"]}
])
end)
for record <- list do
[id, _, _, _, _, _, _, _, _, _] = record
:mnesia.dirty_delete(Table_Name, id)
end
注 - 表中的每个记录都有10个字段,第一个字段(id)是密钥。参数$ 3是时间戳和截止时间=当前时间戳 - 1小时