伴随制造,交通,能源,智慧城市等物联网的兴起,时序数据库作为重要的服务也迎来的新的发展。
概念
1辆车1天会产生将近8T的数据,且大量的数据不仅要来存储,还需要进行对维度的复合查询。这就要求时序数据库快速写入,持久化和多维度聚合操作。
- metric:度量,相当于关系数据库中的table。
- data point:数据点,相当于关系型数据库中的row。
- timestamp:时间戳
- field:如位置这个度量包括京都和纬度两个field,一般情况下存放随时间变化的属性。
- tag:标签/附加信息,存放不随时间变化的属性。一般timestamp+tag可以作为table的primary key。
存储方式
传统数据库使用B tree方式存储,会浪费大量的时间在磁盘寻道上,使用LSM tree有很大的优势。
分布式存储的分片方法
- 哈希分片:这种方法实现简单,均衡性较好,但是集群不易扩展。
- 一致性哈希:这种方案均衡性好,集群扩展容易,只是实现复杂。代表有Amazon的DynamoDB和开源的Cassandra。
- 范围划分:通常配合全局有序,复杂度在于合并和分裂。代表有Hbase。
时序数据库根据metric+tags分片是比较好的一种方式,因为往往会按照一个时间范围查询,这样相同metric和tags的数据会分配到一台机器上连续存放,顺序的磁盘读取是很快的。考虑时序数据时间范围很长的情况,需要根据时间范围再将分成几段,分别存储到不同的机器上,这样对于大范围时序数据就可以支持并发查询,优化查询速度。