当前位置: 首页 > 后端技术 > Node.js

时序数据库InfluxDB(一)

时间:2023-04-03 20:32:21 Node.js

相关文章:时序数据库InfluxDB(一)时序数据库InfluxDB(二)时序数据库InfluxDB(三)时序数据库InfluxDB(四)时序数据库InfluxDB(五)时序数据库数据库InfluxDB(6)数据库类型有很多种,传统关系型数据库RDBMS(如MySQL)、NoSQL数据库(如MongoDB)、Key-Value型(如redis)、Widecolumn型(如HBase)、等,当然本系列文章会介绍时序数据库TSDB(如InfluxDB)。时序数据库TSDB不同的数据库对应用场景的侧重不同。TSDB(timeseriesdatabase)时序数据库是专门针对时间维度设计和优化的。TSDB通常具有以下特点:时间是不可或缺的绝对主角(就像MySQL中的主键),数据按时间顺序组织管理。写入高并发和高吞吐量的数据。很少发生数据更新。过期数据可以批量删除InfluxDB是一个非常优秀的时序数据库,在DB-EnginesTSDB排名中排名第一。InfluxDB分为免费的社区开源版和需要收费的闭源商业版。目前只有商业版支持集群。InfluxDB的底层数据结构从LSM树折腾到B+树,最后创建了TSM树(Time-StructuredMergeTree),这是其高性能和低资源占用的重要原因。InfluxDB是用go语言编写的,没有额外的依赖。它的查询语言InfluxQL与SQL非常相似,非常易于使用。InfluxDB基本概念InfluxDB有以下几个核心概念:1.database:数据库。2.测量类似于表格。3.保留策略(简称RP)由以下三部分组成:DURATION:数据保留的时长。REPLICATION:集群模式下数据的副本数,单节点无效。SHARDDURATION:可选,时间范围除以分片组。4.timestamp时间戳,就像所有数据的主键一样。5.tagtagkey=tagvalue键值对存储具体的数据,会建立索引方便查询。标签集是标签键值键值对的不同组合。6、fieldfieldkey=fieldvalue键值对也存储具体的数据,但不会被索引。类似的字段集是字段key-value的组合。7.seriesseries系列是在相同的RP策略下,在相同的measurement中由相同的tagset组成的数据集。8.点一个点代表一条数据,由measurement、tagset、fieldset和timestamp组成。一系列上的某个时间戳时间仅对应一个点。线路协议线路协议指定写入数据的格式:[,=...]=[,=...][unix-nano-timestamp]Symbol[]表示可选项,symbol...表示可以有多个,symbol,用于分隔同一个标签或字段下的多个数据,符号空间分隔标签、字段和时间戳。例子:如何理解级数和点?先看下图:这张图选取了三个时序数据库历年的排名分数。首先,整个图表可以看作是一个度量,包含了很多数据;然后我们根据db名称建一个tag,把score排名score作为一个字段,那么所有的数据行都类似于:measurement,db=InfluxDBscore=5timestampmeasurement,db=Kdb+score=1timestampmeasurement,db=Prometheusscore=0.2timestamp...上面说了tagset是tagkey=tagvalue的不同组合,所以这里的tagset分为三种:db=InfluxDBdb=Kdb+db=Prometheus的三个tagset构成了三个series,而每一个series可以看作图中的一条线(一维),每一个点是series上一个特定时间戳对应的一个点。与传统数据库的不同之处在于,InfluxDB旨在处理时间序列数据。虽然传统的SQL数据库也可以处理时间序列数据,但它们并不是专门为此目的而设计的。InfluxDB可以更高效、更快速地存储大量的时间序列数据,并对这些数据进行实时分析。在InfluxDB中,时间是绝对的主角,就像SQL数据库中的主键一样。如果不指定,则默认为当前系统时间。时间必须采用UNIX纪元(GMT)或RFC3339格式。InfluxDB不需要预先定义数据结构,你可以随时改变你的数据结构。InfluxDB支持连续查询和保留策略。InfluxDB不支持跨测量的JOIN查询。InfluxDB中的查询语言叫做InfluxQL,它的语法很像SQL,就是selectfromwhere的集合。InfluxDB不是CRUD,更像是CR-ud,也就是说更新和删除数据明显不同于传统的SQL数据库:更新某个点的数据,只需要将数据重写到原来的measurement,tagset,和时间戳。您可以删除系列,但不能删除基于字段值的单个点。解决方法是需要先查询字段值的时间戳,然后根据时间戳删除。无法更新或重命名标签,因为标签会建立索引,您只能创建新标签和导入数据并删除旧标签。不能通过标签键或标签值删除标签。Designandtrade-offsInfluxDB为了更高的性能做了一些设计和权衡:1.对于时间序列用例,即使多次发送相同的数据,也会被认为是相同的数据。优点:简化冲突并提高写入性能。缺点:不能存储重复数据,在极少数情况下可能会覆盖数据。2.删除很少见,一旦发生,肯定是大量的旧数据。优点:提高读写性能。缺点:删除功能非常有限。3.更新很少见,不会出现连续更新或批量更新的情况。时间序列数据主要是永远不会更新的新数据。优点:提高读写性能。缺点:更新功能非常有限。4.绝大多数写入都是接近当前时间戳的数据,按照时间的递增顺序添加。优点:按递增的时间顺序写入数据效率更高。缺点:随机时间写入的性能要低得多。5.数据的大小很关键,数据库必须能够处理大量的读写。优点:数据库可以处理大批量数据的读写。缺点:被迫做出一些权衡以提高性能。6.能够写入和查询数据比具有强一致性更重要。优点:多个客户端可以在高负载下完成查询和写入。缺点:如果负载过高,查询结果可能不包含最近的点。7.许多时间序列都是短暂的。时间序列可能只有几小时就没了,比如新主机开机,监控数据写了一段时间,然后关机。优点:InfluxDB擅长管理不连续数据。缺点:Schemaless设计意味着不支持一些数据库特性,比如nojoincrosstabjoins。8.一点都不重要。优点:InfluxDB具有非常强大的工具来处理聚合数据和大型数据集。缺点:Points数据点没有传统意义上的ID,通过时间戳和系列来区分。待续。..个人公众号持续输出原创文章,感兴趣的可以关注。

猜你喜欢