7.VictoriaMetrics的其他相关知识
并发管理
See: VictoriaMetrics中协程优先级的处理方式
VM中的golang代码优化技巧
See: VictoriaMetrics中的golang代码优化方法
用 golang 开发系统级的软件,还有一篇总结:《用golang开发系统软件的总结》
vm不使用WAL的理由
see: https://valyala.medium.com/wal-usage-looks-broken-in-modern-time-series-databases-b62a627ab704
在现代时间序列数据库中,WAL 的使用看起来很糟糕。它不能保证最近插入的断电数据的数据安全。WAL 还有两个额外的缺点: 预写日志往往会消耗很大一部分磁盘 IO 带宽。由于这个缺点,建议将 WAL 放入单独的物理磁盘中。“直接写入 SSTable”的方式需要更少的磁盘 IO 带宽,因此在没有 WAL 的情况下,数据库可能会消耗更多的数据。 WAL 可能会由于缓慢的恢复步骤而减慢数据库启动时间,甚至可能导致OOM 和崩溃循环。
VM代码不够好的地方
1.用上了goto
2.成员变量应该根据分类再封装成具体的类
3.游标类的操作,封装得很丑陋
4.命名太短了
5.a.b.c.d这样的操作太魔性了,应该封装起来
6.对象的封装不够好,大量的直接引用对象的成员
7.层次性不好
8.文件太长
9.函数太长
10.任何一个错误都不会影响整体流程
很可能某些情况下数据莫名其妙的丢失了
引用文章
本文大量引用了其他作者的文章,对前人的专业和分享精神表示感谢!
valyala
valyala是fasthttp, fastcache等知名组件的作者,同时也是VM团队的CTO。很多VM的设计细节可以从他的博客了解到。
- valyala的博客:https://valyala.medium.com/
- WAL usage looks broken in modern Time Series Databases?
- VictoriaMetrics开发历史: VictoriaMetrics — creating the best remote storage for Prometheus
- VictoriaMetrics 中的 Go 优化
- VictoriaMetrics: achieving better compression than Gorilla for time series data
- valyala: How VictoriaMetrics makes instant snapshots for multi-terabyte time series data
- How ClickHouse Inspired Us to Build a High Performance Time Series Database
其他作者
- jiangmo: 《时间序列数据库 (TSDB)》
- 刘家财: 《Prometheus 存储引擎分析》
- 无毁的湖光: 《[Prometheus时序数据库-磁盘中的存储结构]》
- 时序数据库tsdb世界排名
- wikipedia: Log-structured merge-tree
- 维基百科: 时间序列
- 详解SSTable结构和LSMTree索引
- 各年份各种设备的访问延迟表
- Time-series compression algorithms, explained
- 介绍一个golang库:fastcache
- 介绍一个golang库:zstd
- golang源码阅读:VictoriaMetrics中协程优先级的处理方式
- ahfuzhang随笔分类 - VictoriaMetrics
- 大铁憨(胡建洪)的知乎专栏
- blackbox:VictoriaMetrics阅读笔记
- 单机 20 亿指标,知乎 Graphite 极致优化!
- ClickHouse for Time-Series
- Victoria Metrics 索引写入流程
- victoria-metrics-1.72.0源码中文注释
- 布谷鸟索引:轻量级的二级索引结构