Hasty Briefsbeta

双语

How VictoriaLogs Stores Your Logs in a Columnar Layout

14 days ago
  • #Columnar Database
  • #Log Storage
  • #VictoriaLogs
  • VictoriaLogs在通过多种协议接收日志后,会将其规范化为统一的内部格式,包含时间戳、命名字段和流标识。
  • 具有相同流字段的日志被视为单个流,通过将它们分组存储在磁盘上,以优化压缩和查询性能。
  • 接收到的日志会在内存中累积,大约每秒刷新一次到可搜索的部分中,并通过跨CPU核心分片来实现并行摄取。
  • 日志按UTC日期进行分区,以实现高效的保留和查询,每个分区包含内存中和磁盘上的部分。
  • 部分分为三种类型:内存部分、小部分和大部分,每个部分都是不可变的、自包含的日志包,增强了耐久性并减少了磁盘I/O。
  • 部分以列式布局存储,其中每个字段都保存在自己的列中,这使得查询可以只读取相关列,并有效地压缩相似值。
  • 在部分内部,日志按流组织成块并按时间排序,块头信息使查询时能快速跳过不相关的块。
  • 部分中的关键文件包括metadata.json、timestamps.bin、特定列的分片文件(values.binN、bloom.binN)以及索引文件(index.bin、metaindex.bin),这些文件支持有针对性的数据访问。
  • 布隆过滤器通过检查令牌是否可能存在于块中,提供了快速预过滤机制,减少了对实际日志数据的不必要读取。
  • 两级索引系统(metaindex.bin和index.bin)使VictoriaLogs能够基于流和时间范围高效定位相关块,而无需扫描整个数据集。