MeliGraph.Graph.Segment (MeliGraph v0.2.1)

Copy Markdown View Source

Um segmento temporal do grafo, inspirado no GraphJet.

Cada segmento contém um subconjunto de arestas inseridas em um intervalo de tempo. Quando o segmento atinge max_edges, um novo é criado. Segmentos antigos são read-only e podem ser removidos pelo Pruner.

Armazenamento

Usa ETS com tipo :bag para listas de adjacência, evitando cópia de listas grandes. Duas tabelas por segmento:

  • ltr (left-to-right) — source → {target, edge_type}
  • rtl (right-to-left) — target → {source, edge_type}

Summary

Functions

Destrói as tabelas ETS do segmento, liberando memória.

Número de arestas no segmento.

Verifica se o segmento está cheio.

Insere uma aresta com peso no segmento. Retorna {:ok, segment} se sucesso ou :full se o segmento atingiu a capacidade máxima.

Retorna os vizinhos de entrada (incoming) de um vértice neste segmento. Cada entrada é {source, type, weight}.

Retorna os vizinhos de entrada filtrados por tipo de aresta.

Retorna os vizinhos de saída (outgoing) de um vértice neste segmento. Cada entrada é {target, type, weight}.

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

Cria um novo segmento com tabelas ETS.

Types

t()

@type t() :: %MeliGraph.Graph.Segment{
  created_at: integer(),
  edge_count: non_neg_integer(),
  id: non_neg_integer(),
  ltr: :ets.tid(),
  max_edges: pos_integer(),
  rtl: :ets.tid()
}

Functions

destroy(map)

@spec destroy(t()) :: :ok

Destrói as tabelas ETS do segmento, liberando memória.

edge_count(map)

@spec edge_count(t()) :: non_neg_integer()

Número de arestas no segmento.

full?(map)

@spec full?(t()) :: boolean()

Verifica se o segmento está cheio.

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

@spec insert(t(), non_neg_integer(), non_neg_integer(), atom(), float()) ::
  {:ok, t()} | :full

Insere uma aresta com peso no segmento. Retorna {:ok, segment} se sucesso ou :full se o segmento atingiu a capacidade máxima.

neighbors_in(map, target)

@spec neighbors_in(t(), non_neg_integer()) :: [{non_neg_integer(), atom(), float()}]

Retorna os vizinhos de entrada (incoming) de um vértice neste segmento. Cada entrada é {source, type, weight}.

neighbors_in(map, target, edge_type)

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

Retorna os vizinhos de entrada filtrados por tipo de aresta.

neighbors_out(map, source)

@spec neighbors_out(t(), non_neg_integer()) :: [{non_neg_integer(), atom(), float()}]

Retorna os vizinhos de saída (outgoing) de um vértice neste segmento. Cada entrada é {target, type, weight}.

neighbors_out(map, source, edge_type)

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

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

new(id, max_edges)

@spec new(non_neg_integer(), pos_integer()) :: t()

Cria um novo segmento com tabelas ETS.