InfluxDB存储数据是否需要水平拆分表?

简介: InfluxDB存储数据是否需要水平拆分表?

业务场景是这样:8000个点,每秒存一次,存3个月,大约600亿条记录。

如果保存策略RP的保留是90天,那么分片shard的时长在一天就比较合理,那么一天的量就是:8,000×3,600×24=691,200,000,大概每天近7亿条数据。这个量对于influxdb单机来说是够用了,除非每条记录量的确很大,那么可以考虑采购商业版本做成分布式来提升磁盘I/O性能。


无需你再去做所谓的表水平切分,毫无意义。水平分表针对的都是按行存储与索引的传统关系型数据库,水平分表的逻辑还是按key或者时间进行行集的范围划分,加快定位,减少扫描。对于influxdb,其底层存储设计理念完全不同于传统关系表数据库,它的TSM数据模型源自于nosql常用的LSM-Tree数据模型设计,又远胜于此模型,是基于时序TS数据的特定优化,


至于按时间范围查询会不会很慢?这个问题,其实这种忧虑是多余的,这就需要理解其分片存放和TSM结构:


按照这种保留策略,每隔一天就会形成一个分片目录,存放一天的TSM数据,那么无论是600亿还是6000亿,按照时间范围查询一定是先根据目录索引。如果你是influxdb集群,例如:8个节点,2个副本,相当于对一天的数据又切成了四分,也就是一个节点的某个分片目录只对应了1.7亿的数据,集群的分布这会让读写更快。


5ef38285839249fc80d56635ebf4a90f.png


我们在细究到influxdb时间查询问题的内部,influxdb为什么用时间范围查就一定很快,上面聊的是分片的文件目录优化带来的查询性能提升,其实tsm文件本身就分成了数据块集合和索引块集合两部分,一个数据块就是由时间戳(timestamps)的集合与值(values)的集合组成。索引块由N个索引实体组成,每个索引实体提供了数据块最小时间和最大时间的偏移量,这个时间范围就定位到了要取的数据块,因此查询的时候,Series + field作为主键定位一个索引块,然后用时间范围在索引块中去定位匹配的一组索引实体,也就很快定位到了匹配的数据块集合。


520abb0f0579459bba90759154980e61.png


我们在细究到它的内部结构原理上,influxdb的存储是按照Series+field的方式存储时间戳与数据块集合,内存中还原后类似Series+field={timestamp1:value1,timestamp2:value2,..}这种结构,典型的列式结构,查询时按照series作为行键进行fields列的排序成行,输出结果,这又类似于列簇的结构,明显看出要比常见的按k/v单元存储之上增强了V的按时间线的聚合性。这就完美地匹配了时序数据的特征,数据块中时间戳的聚合排列以及fields值的聚合排列,带来了惊人的压缩效率,同样按照时间范围的查询效率更为惊人!


因此我们可以看到,influxdb就是玩时间线存储的高手,这也是为什么几个亿的记录让它用时间范围去匹配,很轻松达到秒级以内别速度。


相关文章
|
3月前
|
存储 监控 NoSQL
*MongoDB的水平扩展主要通过分片技术实
*MongoDB的水平扩展主要通过分片技术实
52 5
|
7月前
|
SQL Oracle 关系型数据库
关系型数据库中对索引的数目
【5月更文挑战第19天】
75 4
|
7月前
|
存储 SQL 关系型数据库
关系型数据库分区与分片
关系型数据库分区与分片
90 1
|
SQL 存储 关系型数据库
探索关系型数据库:构建有序的数据世界
在数字化时代,数据以前所未有的速度增长和演变。关系型数据库作为数据管理的关键工具,为组织和个人提供了有效存储、检索和处理数据的方法。本文将带您深入了解关系型数据库的定义、原理和应用,以及它在今天的重要性。
187 0
|
存储 中间件 数据库
ShardingSphere-分库分表(水平切分) | 学习笔记
快速学习ShardingSphere-分库分表(水平切分)。
ShardingSphere-分库分表(水平切分) | 学习笔记
|
存储 SQL 关系型数据库
MyCat - 分片 - 垂直拆分 - 分片配置 | 学习笔记
快速学习 MyCat - 分片 - 垂直拆分 - 分片配置
MyCat - 分片 - 垂直拆分 - 分片配置 | 学习笔记
|
存储 算法 关系型数据库
MyCat - 分片 - 水平拆分 - 分片配置及测试 | 学习笔记
快速学习 MyCat - 分片 - 水平拆分 - 分片配置及测试
MyCat - 分片 - 水平拆分 - 分片配置及测试 | 学习笔记
|
存储 SQL OLAP
列式存储 vs 行式存储:它们之间的本质区别在哪里?
> 论文链接:http://www.cs.umd.edu/~abadi/papers/abadi-sigmod08.pdf ## 概述 该文发表在 2008 年的 SIGMOD 会议上。从论文标题可以看出,论文主要内容不是陈述一种新的技术、架构,而是偏向议论、验证。其主要目的在于阐述清楚在 OLAP 下为什么列式存储Column-Store优于行式存储Row-Store。 在 OLAP 场景
1635 0
列式存储 vs 行式存储:它们之间的本质区别在哪里?
|
前端开发 数据库 数据库管理
【DBMS 数据库管理系统】数据仓库 数据组织 ( 数据组织级别 | 元数据 | 粒度 | 分割 | 数据组织形式 )(一)
【DBMS 数据库管理系统】数据仓库 数据组织 ( 数据组织级别 | 元数据 | 粒度 | 分割 | 数据组织形式 )(一)
363 0
|
存储 监控 数据库
【DBMS 数据库管理系统】数据仓库 数据组织 ( 数据组织级别 | 元数据 | 粒度 | 分割 | 数据组织形式 )(二)
【DBMS 数据库管理系统】数据仓库 数据组织 ( 数据组织级别 | 元数据 | 粒度 | 分割 | 数据组织形式 )(二)
206 0