监测站台门工作状态产生的海量数据需要一个数据存储模块,且站台门监测数据在时间线上每个时间点都会从多个数据源涌入数据,按照连续时间的多种纬度产生大量数据,需要按秒甚至毫秒计算的实时性写入存储。传统的关系型数据库对写入的支持都是按行处理,并建立B树结构的索引,它并不是为了批量高速写入而设计,尤其像多纬度时序数据连续的涌入数据平台,传统数据库的存储引擎必然导致负载、吞吐在写入性能上的极不适应,会带来诸多问题,例如需要大量的存储设备,查询检索效率变慢等。因此监测数据的实时计算存储一般不会考虑传统关系型数据库,而是把目光放在NoSQL(非关系型数据库)上。
NoSQL是各种非关系型数据的集合。根据不同的应用场景,NoSQL数据库可以被总结为四种类型。 (1) 读写性能高的NoSQL数据库,如Memcached 和Redis,常用于大规模网络平台的建设。(2) 面向文档的数据库,如MongoDB和CouchDB,一般以JSON格式存储。(3) 用于分布式计算的NoSQL数据库,如Cassandra和Voldemort,具有良好的横向扩展性。(4) 面向时间的NoSQL数据库,如InfluxDB和TimescaleDB,在存储和处理时间序列数据方面具有高性能。针对监测数据的实时性、高频性及时间属性的唯一性等时序数据的特征,本文采用时间序列数据库InfluxDB,可以带来明显的性能提升。