Как установить срок действия рекордов в Мнесии - PullRequest
0 голосов
/ 20 февраля 2019

Я пишу записи в mnesia, используя грязную запись

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

Я хочу удалить записи старше 1 часа , как я могу установить срок действия или TTL?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Поскольку у mnesia нет никакого механизма ttl (по крайней мере, я не смог его найти), я написал сервер gen, который удаляет все записи из mnesia старше 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 час

0 голосов
/ 22 февраля 2019

Mnesia не имеет встроенной поддержки истечения срока записи / TTL.Вы должны реализовать эту функцию самостоятельно, например, периодически сканируя таблицу на наличие просроченных записей и удаляя их.

...