Zongzi. Timeline. Query
(zongzi v0.3.0)
Copy Markdown
纯读操作且无副作用的 Timeline 的查询原语。
下游模块(如 Strategy 和 Windowing)使用这些原语来判定锚存活、选宿主、切窗口。
不变量
格子状态 仅 由 tombstones 与 seq_map 两个 O(1) 查找判定。
写操作保证:
- insert 同时写 nodes 链表和 seq_map
- gc 同时从 nodes 、 seq_map 和 tombstones 移除
因此不存在「链表里有但 tombstones 和 seq_map 都没有」的状态。
Summary
Types
格子状态。
Functions
是否为可承载锚点的活格子,仅在 :active 下返回真。
链表上两点格距(含墓碑格)。任一方不在链表中返回 error。
焦点邻域。count 是每侧收集的格子数(不是格距半径)。
有向扫描,返回候选 SeqID 列表(近→远)。
获取给定 SeqID 的格子状态。
Types
@type cell_status() :: Zongzi.Timeline.Neighborhood.status() | :missing
格子状态。
:active— 非墓碑且 seq_map 有条目:merge_tombstone— 墓碑且 seq_map 仍有(merge 保留映射):delete_tombstone— 墓碑且 seq_map 已无:missing— 两表均无(已 gc 或从未插入)
Functions
@spec active?(Zongzi.Timeline.t(), Zongzi.Timeline.SeqID.t()) :: boolean()
是否为可承载锚点的活格子,仅在 :active 下返回真。
@spec hops(Zongzi.Timeline.t(), Zongzi.Timeline.SeqID.t(), Zongzi.Timeline.SeqID.t()) :: {:ok, non_neg_integer()} | {:error, :not_found}
链表上两点格距(含墓碑格)。任一方不在链表中返回 error。
@spec neighborhood(Zongzi.Timeline.t(), Zongzi.Timeline.SeqID.t(), keyword()) :: Zongzi.Timeline.Neighborhood.t()
焦点邻域。count 是每侧收集的格子数(不是格距半径)。
选项
:count- 查找的数目,默认为 1:active_only- 仅包括活跃的 SeqID ,默认为 false
@spec scan(Zongzi.Timeline.t(), Zongzi.Timeline.SeqID.t(), :prev | :next, keyword()) :: [ Zongzi.Timeline.SeqID.t() ]
有向扫描,返回候选 SeqID 列表(近→远)。
Options
:active_only— 跳过墓碑(默认true):include_self— 默认false:limit— 最多返回几个候选;nil不限制:max_hops— 最多跨几格(含墓碑格)
@spec status(Zongzi.Timeline.t(), Zongzi.Timeline.SeqID.t()) :: cell_status()
获取给定 SeqID 的格子状态。