相关文章:
时序数据库 InfluxDB(一)
时序数据库 InfluxDB(二)
时序数据库 InfluxDB(三)
时序数据库 InfluxDB(四)
时序数据库 InfluxDB(五)数据库
InfluxDB 是一个无结构模式,这也就是说你无需事先定义好表以及表的数据结构。segmentfault
InfluxDB 支持的数据类型很是简单:缓存
你能够看到除了 field value 支持的数据类型多一点以外,其他全是字符串类型。数据结构
固然还有最重要的 timestamp ,InfluxDB 中的时间都是 UTC 时间,并且时间精度很是高,默认为纳秒。性能
在实际使用中,数据都是存储在 tag 或者 field 中,这二者最重要的区别就是,tag 会构建索引(也就是说查询时,where 条件里的是 tag ,则查询性能更高),field 则不会被索引。spa
存储数据究竟是使用 tag 仍是 field ,参考如下原则:设计
对于标识性的名称,如 database、RP、user、measurement、tag key、field key 这些应该避免使用 InfluxQL 中的关键字。日志
其它须要注意的原则:code
InfluxDB 经过构建索引能够提升查询性能。InfluxDB 中的索引有两种:In-memory 和 TSI 。这两种索引只能选择一种,且没法动态更改,一旦更改必须重启 InfluxDB 。索引
In-memory :索引被存储在内存中,这也是默认使用的方式,性能更高。
TSI( Time Series Index ):In-memory 索引能够支持千万级别的 series ,然而内存资源终归是有限的,为了支持亿级和十亿级别的 series 数据,TSI 应运而生,其会将索引映射到磁盘文件上。
索引相关配置项(默认的配置文件为 influxdb.conf ):
index-version = "inmem"
max-series-per-database = 1000000 max-values-per-tag = 100000
max-series-per-database :每一个数据库容许的最大 series 数量,默认一百万,一旦达到上限,再写入新的 series 则会获得一个 500 错误,向已经存在的 series 写入数据不受影响。设置为 0 则意味着没有限制。
max-values-per-tag :每一个 tag key 容许的最大 tag values 数量,默认十万,相似的,一旦达到上限,没法写入新的 tag value ,而向已经存在的 tag value 写入数据不受影响。设置为 0 则意味着没有限制。
max-index-log-file-size = "1m" series-id-set-cache-size = 100
max-index-log-file-size :预写日志的文件大小达到多大的阈值以后,将其压缩为索引文件,阈值越低,压缩越快,堆内存使用率越低,但会下降写入的吞吐量。
series-id-set-cache-size :使用内存缓存的 series 集的大小,因为 TSI 索引存储在了磁盘文件中,所以使用时须要额外的计算工做,但若是将索引结果缓存起来的话就能够避免重复的计算,提升查询性能。默认缓存 100 个 series ,这个值越大则使用的堆内存越大,设置为 0 则不缓存。
我的公众号持续输出原创文章,有兴趣的能够关注下。