相关文章:
时序数据库 InfluxDB(一)
时序数据库 InfluxDB(二)
时序数据库 InfluxDB(三)
时序数据库 InfluxDB(四)
时序数据库 InfluxDB(五)正则表达式
InfluxDB 数据的写入以下图所示:数据库
全部数据先写入到 WAL( Write Ahead Log )预写日志文件,并同步到 Cache 缓存中,当 Cache 缓存的数据达到了必定的大小,或者达到必定的时间间隔以后,数据会被写入到 TSM 文件中。segmentfault
为了更高效的存储大量数据,存储引擎会将数据进行压缩处理,压缩的输入和输出都是 TSM 文件,所以为了以原子方式替换以及删除 TSM 文件,存储引擎由 FileStore 负责调节对全部 TSM 文件的访问权限。缓存
Compaction Planner 负责肯定哪些 TSM 文件已经准备好了能够进行压缩,并确保多个并发压缩不会互相干扰。数据结构
Compactor 压缩器则负责具体的 Compression 压缩工做。并发
为了处理文件,存储引擎经过 Writers/Readers 处理数据的写和读。另外存储引擎还会使用 In-Memory Index 内存索引快速访问 measurements、tags、series 等数据。函数
存储引擎的组成部分:性能
为了应对不一样的负载状况,我须要机器具备怎样的硬件配置?编码
因为集群模式只有商业版本,所以这里只看免费的单机版的状况。spa
为了定义负载,咱们关注如下三个指标:
对于查询状况,咱们根据复杂程度分为三级:
简单查询:
中等复杂度查询:
复杂查询:
硬件配置须要关注的有:CPU 核数,RAM 内存大小,IOPS 性能。
IOPS( Input/Output Operations Per Second ):每秒读写数,衡量存储设备(如 SSD 固态硬盘、HDD 机械硬盘等)的性能指标。
不一样负载状况下的硬件配置参考以下:
因为 SSD 固态硬盘的性能更高,官方也建议使用 SSD ,上图也是使用 SSD 的状况。
对于元数据,诸如 database name、measurement、tag key、tag value、field key 都只会存储一次,只有 field value 和 timestamp 每一个点都存储。非字符串的值大约须要三个字节,字符串的值须要的空间大小不固定,须要由压缩状况肯定。
内存确定是越大越好,可是若是 series 基数超过千万级别,在默认使用的 in-memory 索引方式下,会致使内存溢出,在数据结构设计时须要注意。
经过将 wal 和 data 目录设置到不一样的存储设备上,有利于减小磁盘的争用,从而应对更高的写入负载。相关配置项(默认的配置文件为 influxdb.conf ):
[data] dir = "/var/lib/influxdb/data" wal-dir = "/var/lib/influxdb/wal"
我的公众号持续输出原创文章,有兴趣的能够关注下。