MeliGraph.Graph.SegmentManager (MeliGraph v0.2.1)

Copy Markdown View Source

GenServer que gerencia os segmentos temporais do grafo.

Responsável por:

  • Manter o segmento ativo (escrita)
  • Rotacionar segmentos quando o ativo atinge capacidade máxima
  • Fornecer acesso de leitura a todos os segmentos
  • Remover segmentos expirados (chamado pelo Pruner)

Summary

Functions

Retorna lista de todos os segmentos (ativo + congelados). Leitura direta via ETS (sem GenServer).

Returns a specification to start this module under a supervisor.

Insere uma aresta no segmento ativo. Se o segmento está cheio, rotaciona automaticamente e insere no novo segmento.

Retorna todos os vizinhos de entrada de um vértice, agregando todos os segmentos.

Retorna vizinhos de entrada filtrados por tipo de aresta.

Retorna todos os vizinhos de saída de um vértice, agregando todos os segmentos. Operação de leitura direta nas ETS (sem passar pelo GenServer).

Retorna vizinhos de saída filtrados por tipo de aresta.

Remove segmentos criados antes de cutoff_time (monotonic ms). Chamado pelo plugin Pruner.

Retorna o número total de arestas em todos os segmentos.

Types

state()

@type state() :: %{
  conf: MeliGraph.Config.t(),
  active: MeliGraph.Graph.Segment.t(),
  frozen: [MeliGraph.Graph.Segment.t()],
  next_id: non_neg_integer()
}

Functions

all_segments(conf)

@spec all_segments(MeliGraph.Config.t()) :: [MeliGraph.Graph.Segment.t()]

Retorna lista de todos os segmentos (ativo + congelados). Leitura direta via ETS (sem GenServer).

child_spec(init_arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

insert(conf, source, target, edge_type, weight \\ 1.0)

@spec insert(
  MeliGraph.Config.t(),
  non_neg_integer(),
  non_neg_integer(),
  atom(),
  float()
) :: :ok

Insere uma aresta no segmento ativo. Se o segmento está cheio, rotaciona automaticamente e insere no novo segmento.

neighbors_in(conf, target)

@spec neighbors_in(MeliGraph.Config.t(), non_neg_integer()) :: [
  {non_neg_integer(), atom()}
]

Retorna todos os vizinhos de entrada de um vértice, agregando todos os segmentos.

neighbors_in(conf, target, edge_type)

@spec neighbors_in(MeliGraph.Config.t(), non_neg_integer(), atom()) :: [
  non_neg_integer()
]

Retorna vizinhos de entrada filtrados por tipo de aresta.

neighbors_out(conf, source)

@spec neighbors_out(MeliGraph.Config.t(), non_neg_integer()) :: [
  {non_neg_integer(), atom()}
]

Retorna todos os vizinhos de saída de um vértice, agregando todos os segmentos. Operação de leitura direta nas ETS (sem passar pelo GenServer).

neighbors_out(conf, source, edge_type)

@spec neighbors_out(MeliGraph.Config.t(), non_neg_integer(), atom()) :: [
  non_neg_integer()
]

Retorna vizinhos de saída filtrados por tipo de aresta.

prune(conf, cutoff_time)

@spec prune(MeliGraph.Config.t(), integer()) :: {:ok, non_neg_integer()}

Remove segmentos criados antes de cutoff_time (monotonic ms). Chamado pelo plugin Pruner.

start_link(opts)

total_edge_count(conf)

@spec total_edge_count(MeliGraph.Config.t()) :: non_neg_integer()

Retorna o número total de arestas em todos os segmentos.