相关文章:时序数据库InfluxDB(一)时序数据库InfluxDB(二)时序数据库InfluxDB(三)时序数据库InfluxDB(四)时序数据库InfluxDB(五)时序数据库数据库InfluxDB(6)数据类型InfluxDB是一种非结构化模式,也就是说你不需要事先定义表和表的数据结构。InfluxDB支持的数据类型很简单:measurement:stringtagkey:stringtagvalue:stringfieldkey:stringfieldvalue:string,float,integer,boolean可以看到除了fieldvalue支持的数据类型多一点,其他都是字符串类型。当然,还有最重要的时间戳。InfluxDB中的时间是UTC时间,时间精度非常高。默认值为纳秒。数据结构设计在实际使用中,数据存储在标签或字段中。两者最重要的区别是tag会建立索引(即查询时,如果tag在where条件下,查询性能会更高),field不会被索引。使用tag还是field存储数据,参考以下原则:查询条件中常用的数据存储为tag。计划使用GROUPBY()的数据存储为tag。计划使用InfluxQL函数作为字段存储数据。数据不仅存储为字符串类型的字段。对于数据库、RP、用户、度量、标签键和字段键等标识名称,应避免使用InfluxQL中的关键字。其他需要注意的原则:不要有太大的系列。在tag中使用UUID、hash、randomstring等会导致series数量庞大,导致内存占用较高,尤其是在系统内存有限的情况下,需要格外注意。测量名称不能包含具体的数据(表名只是一个表名),应该使用不同的标签来区分数据,而不是测量名称。不要在一个标签中放置多条信息。将复杂信息拆分为多个标签有助于简化查询并减少正则化的使用。索引InfluxDB可以通过建立索引来提高查询性能。InfluxDB中有两种类型的索引:In-memory和TSI。这两个指标只能选择一个,不能动态改变。更改后,必须重新启动InfluxDB。In-memory:索引存储在内存中,也是默认的方式,性能更高。TSI(TimeSeriesIndex):内存中的索引可以支持千万级的序列,但是内存资源毕竟是有限的。为了支持数十亿级的系列数据,TSI应运而生,它将索引映射到磁盘文件上。索引相关配置项(默认配置文件为influxdb.conf):索引方式、inmem或tsi1:index-version="inmem"in-memory相关设置:max-series-per-database=1000000max-values-per-tag=100000max-series-per-database:每个数据库允许的最大系列数,默认为100万。一旦达到上限,写新系列时就会报500错误。将数据写入现有系列不受影响。设置为0表示没有限制。max-values-per-tag:每个标签键允许的最大标签值数量,默认为100,000。同样,一旦达到上限,就不能写入新的标签值,写入已有标签值的数据也不会受到影响。设置为0表示没有限制。TSI(tsi1)相关设置:max-index-log-file-size="1m"series-id-set-cache-size=100max-index-log-file-size:写入文件大小的阈值-aheadlog之后,被压缩成一个索引文件。阈值越低,压缩越快,堆内存占用越低,但是写入的吞吐量会降低。series-id-set-cache-size:使用内存缓存的系列集的大小。由于TSI索引保存在磁盘文件中,使用时需要额外的计算工作,但如果将索引结果缓存起来,可以避免重复计算,提高查询性能。默认情况下,缓存100个系列。该值越大,使用的堆内存越大。如果设置为0,则不会缓存。个人公众号持续输出原创文章,感兴趣的可以关注。
