松果时序数据库-PinusDB
2020-08-17 10:09:42 阿炯

开源、高性能的时序数据库。

简单易用、功能强大、性能优越、安全稳定,轻松处理海量物联网数据,采用C++开发并在GPLv3协议下授权。



松果时序数据库(以下也称PinusDB)是一款针对物联网智能设备数据特点研发的具备高压缩比、高性能的时序数据库。广泛应用于物联网(IoT)设备、智慧城市、智慧物流、环境监测等数据处理。PinusDB针对传感数据基于时序的特点使用特殊的方式处理、存储。解决海量物联网设备高频率数据处理,经过我们特有的压缩算法降低数据存储空间90%以上,降低企业运维、管理成本。


产品特性

高压缩比
针对时序数据的特点,采用独特的压缩算法,大大降低历史数据存储空间,一般能将数据存储空间压缩到原来的10%甚至更低。压缩,数据库将历史数据进行整理、压缩,每个设备的数据连续存放, 查询历史数据时对磁盘进行顺序读取,极大提高查询性能。提供real系列数据类型,极大提高对浮点数的压缩率。

高性能
具备高效的读写能力,普通PC机写入性能超过20万条/秒;支持交互式查询。高性能,普通双核CPU、8G内存的台式机即可达到每秒超过20万条数据的写入。 内存中数据统计超过1500万条每秒。根据设备及时间在千亿级数据量下查询历史数据响应在100毫秒以下。

大容量
单表存储千亿级数据量。大容量,数据库将每个表、每天的数据存储为一个文件,单表能存储千亿级数据。 根据时间查询数据时,仅仅查询相关的文件,提高查询性能。

强大的历史数据管理
数据库将数据以天为单位存储为一个个单独的文件。并且,可以以天为单位对历史数据进行删除、附加、分离等操作。稳定可靠,更新数据到数据文件时,采用DoubleWrite机制,避免写入过程中异常宕机导致的数据页损坏。

简单易用
基于类似关系库表的数据模型,理解、使用更简单。用户使用类似标准SQL进行数据操作,数据筛选、统计更方便。简单、开源,松果时序数据库是代码量最少的时序数据库,用户可以在较短的时间内学习、理解所有的代码,并定制化开发一些特殊的功能。

安全
数据安全,插入数据时先写commit日志,每隔3秒或写入达到2M时刷到磁盘。 系统异常宕机或断电后从commit日志恢复数据,最多丢失3秒内或少于2M的数据。


名词解释

时序数据:持续产生的一系列数据。例如:监测某台电梯时,每秒采集一次电梯状态的值而产生的一系列数据。

设备ID(devid):某个被监测的设备,唯一标识一个设备,例如:某台电梯、某个充电桩、某辆共享单车等等。

时间戳(tstamp):数据产生的时间点,PinusDB数据库使用DateTime类型字段来存储时间戳,时间戳表示范围为:1970.1.1 - 2999.12.31,时间精度为毫秒。

数据写入窗口:松果时序数据库对数据的时间戳字段(tstamp)的值设定了时间窗口,只能写入处于时间窗口之内的数据。时间窗口以系统当前时间为标准,向前后扩展指定的时间(由系统表sys_config中insertValidDay项的取值确定,单位为天,可以修改系统配置文件config.ini中insertValidDay项指定合适的值,默认为1天)。例如:当前时间为2019-10-15,系统配置中insertValidDay的值为1,则数据写入窗口为 2019-10-14 0:0:0 到 2019-10-16 23:59:59,此处以格林尼治时间为标准,在中国东八区的实际写入窗口为 2019-10-14 8:0:0 到 2019-10-17 7:59:59。



服务配置

松果时序数据库服务配置文件 config.ini 与松果时序数据库执行程序处于同一目录下,config.ini包括如下配置:

server配置节

address:服务启动的IP地址,默认为0.0.0.0

port:服务启动端口,默认为8105

cacheSize:数据缓存大小,单位为MB,默认值为0,表示系统将会根据系统内存大小决定缓存大小,最小为128MB,最大不超过系统内存的5/8。
当使用默认值时:
物理内存小于8GB,缓存为物理内存的1/4
物理内存小于64GB,缓存为物理内存的1/2
物理内存大于64GB,缓存为32GB

writeCache:写数据缓存大小,单位MB,推荐使用默认值。
默认值为0,即数据库系统默认的写缓存大小
数据缓存小于24GB,写缓存为数据缓存的1/2
数据缓存大于24GB,写缓存为12GB

queryTimeOut:查询超时时间,单位为秒,默认值:300

insertValidDay:有效写入时间窗口,单位为天,默认为1,详细信息见名词解释相关。

tabPath:表目录,存放系统中创建的数据表及表配置文件,用户配置文件。

normalDataPath:普通数据目录,存放普通数据文件。

compressDataPath:压缩数据目录,存放压缩数据文件。

commitLogPath:数据日志目录。

sysLogPath:系统日志目录。

logLevel :输出日志级别,取值:debug,info,warning,error;默认值为:info

compressFlag:是否启动压缩,true - 系统将超过有效写入时间窗口的数据进行压缩。 false - 不进行压缩。

注意:
(1)PinusDB服务启动时tabPath,normalDataPath,compressDataPath,commitLogPath,sysLogPath 指定的目录必须存在。

(2)PinusDB服务启动时会检查tabPath目录下表配置文件(table.json)以及用户文件(user.json)是否存在,若不存在,则系统创建空的表文件以及包含管理员: sa,密码为:pinusdb 的用户文件。


最新版本:2.0
新增条件聚合函数countif, avgif, maxif, minif, firstif, lastif, sumif,方便在一次查询中对多个不同条件进行统计。例如:可以在一次查询中统计多个条件的总数:
SELECT countif(filed1 < 100), countif(field1 >= 100 and field1 < 200) countif(field1 >= 200) FROM tab01

新增写缓存大小配置,可以将数据库缓存分成读缓存和写缓存,便于根据实际情况对内存进行配置。
修改数据日志刷盘逻辑,数据日志写满64KB或超过3秒钟进行刷盘,提供高写入性能的同时,也提高数据安全性。
增加计算函数,如:四则运算、求模、时间函数、IF函数等。
修复了旧版本的bug。


官方主页:http://www.pinusdb.cn/