lib/markov/database.ex

use Amnesia

defdatabase Markov.Database do
  deftable Master, [:model, :state], type: :set do
    @type t :: %Master{
      model: term(),                       # model name
      state: Markov.ModelServer.State.t(), # server state
    }
  end

  deftable Link, [:mod_from, :tag, :to], type: :bag, fragmentation: [number: 128] do
    @type t :: %Link{
      mod_from: {term(), [term()]},   # model name and link source ("from")
      tag: term(),                    # tag
      to: term(),                     # link target ("to")
    }
  end

  deftable Weight, [:link, :value], type: :set, fragmentation: [number: 128] do
    @type t :: %Weight{link: Link.t(), value: non_neg_integer()}
  end

  deftable Operation, [:model, :type, :ts, :argument], type: :bag do
    @type t :: %Operation{
      model: term(),                 # model name
      type: Markov.log_entry_type(), # entry type
      ts: non_neg_integer(),         # unix millis
      argument: term(),              # custom term
    }
  end
end