如何设置Mnesia中的记录到期日

问题描述 投票:1回答:2

我正在使用脏写向mnesia写记录

:mnesia.dirty_write({Table_Name, id, Node.self(), timestamp, msg})

我想删除超过1小时的记录,如何设置到期或TTL?

erlang elixir mnesia
2个回答
2
投票

Mnesia没有内置支持记录到期/ TTL。您必须自己实现此功能,例如通过定期扫描表中的过期记录并删除它们。


-1
投票

由于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小时

© www.soinside.com 2019 - 2024. All rights reserved.