zhscn / lognav

0 stars 0 forks source link

Ideas #1

Open condy0919 opened 5 months ago

condy0919 commented 5 months ago

只是控制内存的话vlf倒是够用了 我想加一些过滤合并相关的功能 debug用。。 比如rg搜索一个keyword,我想跳回到某个element在日志中原始的位置 多个keyword搜索出来的结果按原始日志的位置merge 之类的操作 之前就有想法做,但是还没开始做bug就修完了(

能做到上面两个case就能省不少事了。另外比较常见的操作就是以某一行为中心同时向前向后搜索特定 keyword 就是一个事务的起止日志 这三个基本就是我刨日志时最常用的方法了 还有些别的 feature 可以抄这个:https://lnav.org/

zhscn commented 5 months ago

基本目标

  1. 大文件支持,不需要完整载入文件即可以行号(正序/逆序)为索引操作日志。
  2. 关键字过滤,记录日志项在文件中的原始位置。
  3. 以原始文件位置合并搜索结果。
  4. 任意位置为起点,同时向前向后搜索关键字作为边界切分日志。

实现思路

将文件按固定大小切分为 Chunk 序列。每个 Chunk 应该具有如下属性:

  1. 所在文件中偏移。
  2. Chunk 内部每行的起始位置。
  3. 当前 Chunk 前/后换行符数量。

每个 Chunk 载入到内存时需要初始化相关属性,用于后续以行号索引的查询。

可能需要解决的问题

  1. 持久化索引(真的有必要吗)
  2. 从文件中间载入 Chunk 而不是从头/尾开始(应该不常见)
  3. 添加更多自定义索引(时间,事件id等)
  4. 结构化日志(好像和上一条重复了)
  5. 虽然大文件的text storage结构本身不需要考虑支持修改操作,但是对搜索结果的操作需要实现一个功能完备的text storage structure。目前看直接使用chained lines就可以(大概)。