InfluxDB2数据结构设计注意事项

说起来我最开始在使用InfluxDB数据库的时候,因为没有仔细阅读文档,数据结构设计不是很合理,好在数据量不大,影响也就不大。

InfluxDB在存储的时候有个series的概念,也就是将相同的measurement、tag值组成一个集合,并且物理存储上,相同series的数据也是存储在一起的,总之series的数量不能太多,很多资料都提到单机不要超过100万个。

一、series的数量问题

如何计算series的数量呢?简单计算就是 measurement数量、各tag的值的个数相乘。不过这个计算方法是按排列组合计算理论最大数量,实际情况有的组合不一定会存在,比如官网举例:

emailstatus
lorr@influxdata.comstart
lorr@influxdata.comfinish
marv@influxdata.comstart
marv@influxdata.comfinish
cliff@influxdata.comstart
cliff@influxdata.com finish

上面的例子有email和status两个tag,其中email有3个不同的值,status有2个不同的值,然后他们的任意一个组合都存在,所以series达到了理论最大数量2*3=6个。

官网还举了个例子,如果再增加一给tag,比如增加一个firstname。

emailstatusfirstname
lorr@influxdata.comstartlorraine
lorr@influxdata.comfinishlorraine
marv@influxdata.comstartmarvin
marv@influxdata.comfinishmarvin
cliff@influxdata.comstartclifford
cliff@influxdata.com finishclifford

firstname有3个不同的值,所以理论上series的数量是2*3*3=18个,但是实际上,上面email、status、firstname的不同组合还是6个,所以series的数量还是6。

二、结构设计

虽然series的实际数量并不会达到理论最大值,但是我们设计数据结构的时候,按照理论最大数量来考虑是合理的。

官网文档专门有一篇关于大量series的文章:Resolve high series cardinality。总结一下注意以下几点:

1、不要太长,比如tag中包含一些时间戳、唯一ID等很长的字符串。

2、不要直接用时间戳。

3、未来会大量增长的数据,比如用户ID之类的。

我就疏忽了第3点,将ID用到tag里面了,这在只有几百上千个ID的时候没啥影响,未来一旦到了几万、几十万个ID,那分分钟数据库就要挂掉。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注