授权协议: GPL-3.0
开发语言: C/C++
操作系统: 跨平台
收录时间: 2019-09-04
提 交 者: xplanet

松果时序数据库(pinusdb)

松果时序数据库是一个开源的时间序列数据库。以简单、易用、高性能为目标,解决中小规模物联网场景设备数据存储,查询。 松果时序数据库服务仅包含大约3万行C++代码,虽然代码量少但也提供了丰富的功能、较高的性能。

性能

在i3-7100, 8G 内存,1TB HDD windows server 2016 环境下,每条数据8个字段,达到每秒20万条数据写入。 内存中数据扫描达到1500万条。 历史数据整理后压缩,每个设备的数据顺序存放,极大提供数据查询性能。

压缩

松果时序数据库先将整数、浮点数按照差值压缩,然后将数据块以zlib压缩,极大提高压缩率。 不仅如此,我们还提供将浮点数按倍数放大后存储为整数,从而提高浮点数的压缩率。用户使用时以浮点数使用即可。 real2 -> 倍数100, 取值范围[-999,999,999.99 ~ +999,999,999.99] real3 -> 倍数1000, 取值范围[-999,999,999.999 ~ +999,999,999.999] real4 -> 倍数10000, 取值范围[-999,999,999.9999 ~ +999,999,999.9999] real6 -> 倍数1000000, 取值范围[-999,999,999.999999 ~ +999,999,999.999999]

容量

在松果时序数据库中,每个表每天的数据存储为一个文件,超过写入时间窗口的文件会被压缩。 所以,数据容量仅限于服务器存储的容量,并且在大容量下还能保持极高的数据读取性能。

数据安全性

数据写入松果时序数据库中,首先会写commit日志,commit日志每3秒或写满1MB会刷一次磁盘,所以意外宕机,或服务器断电后只会丢失较少的数据。 松果时序数据库写数据文件时使用doublewrite,保证写入数据页时发送断电数据文件和数据页也不会损坏。

编译

松果时序数据库支持Windows以及Linux,代码中包含CMake文件,下载后需要配置boost库的包含目录和库目录、zlib的库目录即可编译成功。 若您需要已编译好的程序,请在 http://www.pinusdb.cn 网站相应的链接下载。

运行

运行前请先配置好服务配置文件config.ini 具体运行配置细节请参考文档: http://www.pinusdb.cn/doc/v1.3/doc_pdb_windows_install.html

二次开发

提供c/c++ SDK, .Net SDK, jdbc 驱动,未来还会支持restful及更多的二次开发接口,具体使用细节请参考:http://www.pinusdb.cn

交流

若您需要帮助或希望给我们反馈信息,请提交Issue、给我们发邮件:zhangquan@pinusdb.cn

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

pinusdb 的相关博客

松果时序数据库(PinusDB)测试报告

松果时序数据库(PinusDB)是一款以简单、易用、高性能为目标的开源时序数据库。本篇比较全面介绍松果时序数据库的测试,为用户...

松果时序数据库(PinusDB)最佳实践

松果时序数据库(PinusDB)是一款以简单、易用、高性能为目标的开源时序数据库。本篇介绍如何让松果时序数据库以最佳的性能运行...

松果时序数据库(PinusDB)数据写入测试报告

松果时序数据库(PinusDB)是一款以简单、易用、高性能为目标的开源时序数据库,本篇简单介绍松果时序数据库写入测试。要获取其...

松果时序数据库压缩文件格式

松果时序数据库将每个表、每天的数据存储在一个数据文件中,数据文件分为普通文件和压缩文件,他们的特点如下: 普通文件:支...

pinusdb 的相关问答

还没有任何问答,马上提问

评论 (24)

加载中
除了系统表就是数据表。 没有存放配置的地方。能不能添加配置表。
2019/10/16 19:11
回复
举报
您可以详细整理一下具体的需求,如果合适的话会加入到后续的开发计划中。
2019/10/17 11:11
回复
举报
配置表不应该就是一张表 类似设备表 字段表。 可以增删改查 不是时序的表
2019/10/21 11:27
回复
举报
为什么cmake window vs2015编译的1.4.0和 原来代码vs2015编译的1.3.0 效率差距那么大呢? 相同测试代码 以前1s好几万插入。 现在的版本1s也就1万的效率 。 是cmake编译问题吗? 希望作者能发布一篇详细cmake编译 对比 的效果文章
2019/10/12 19:24
回复
举报
我们测试过效率没有差别,请确认您编译的是否是debug版本,如果是您用release编译后再测试一下,多谢您的反馈。
2019/10/12 19:43
回复
举报
测试发现是 debug版本和Release版本效率问题。 测试的时候发现限定内存2048后,多次查询和插入时 内存已经超过2G了。而且关闭程序后 ,只要服务不重启 内存是不回收的。但是再次多次查询、写入 内存只增不降。是设计考虑还是内存泄漏。如果内存超了会出现怎么问题呢? 应该有个内存回收机制,不能一直占用内存。服务器上不可能只跑这一个服务程序
2019/10/14 15:44
回复
举报
限定的内存为数据缓存,服务运行期间其他部分还需要申请内存。数据缓存申请后不会释放,设计如此。
2019/10/14 16:44
回复
举报
系统将数据缓存做为内存池,在内部进行数据的调度,所以不会释放... 持续运行服务占用的内存达到一定大小后不会继续增加,不会有内存泄漏的问题。
2019/10/14 16:50
回复
举报
使用执行sql插入时,性能会有一些影响,这个方面有一些调整!我们建议使用二进制协议插入,c# 使用 DataTable, jdbc 使用全部带参数批量执行,具体参考文档。
2019/10/12 19:55
回复
举报
建议作者创建一个QQ群,方便bug反馈。很期待该数据库推广。初期效率很高。
2019/10/12 11:19
回复
举报
多谢您的建议, 我们已经创建交流QQ群:614986989,欢迎加群
2019/10/13 07:17
回复
举报
能把boost丢掉吗?这玩意台恶心了啊
2019/10/11 09:37
回复
举报
在写入时,使用PDBManager查询瞬间会导致写入延迟很大。
2019/09/27 09:15
回复
举报
没有更多的信息,只能根据内部实现说一下: 在内部实现,同一个设备的写入和读取之间冲突会加锁。 所以对某个设备的查询时会对其写入有影响。 多个设备之间是可以并行的。
2019/09/27 14:26
回复
举报
项目停止更新了嘛?
2019/10/10 15:37
回复
举报
没有,下一次更新数据库服务支持Linux,正在做测试,会在一周内发布新版本
2019/10/11 09:28
回复
举报
测试了一下代码, 写了一个死循环,每500条数据开一个链接。每次批量插入500条数据, 每条数据时间间隔1s. 跑十来分钟就会出现,稍后重试 后程序不再插入数据。重启程序后解决。再继续清空数据库测试还是出现这样的问题, 而且没有上一版本稳定,500条数据毫秒级插入,不定时会出现500ms以上延迟插入的问题。 测试环境单线程测试,不会涉及多线程并发等问题。测试环境24G内存 机械硬盘
2019/10/12 11:17
回复
举报
多谢您的反馈, 我们测试了一下,当不关闭连接时,超过设定的最大连接数1024个连接后,再连接会阻塞,我们会尽快修复。 至于插入时不是会出现500ms以上的延迟的问题,和执行插入时的内存分配有关,一般情况下,大部分写入都在现有的内存块上,所以速度很快。 当现有的内存块没有足够空间时会分配新的内存块,这时写入耗时会大一些。一般测试情况下每个设备写入的数据都一样大,所以会放大耗时,有机会我们会写这方面的博客,给大家参考。感谢您的反馈。
2019/10/12 14:28
回复
举报
不支持多设备id检索查询(如 in or 等查询不支持)。比较鸡肋。 其实没必要 非要支持sql . 类库支持多设备id 检索就好.
2019/09/26 17:23
回复
举报
下载下来看源码,用VS打开后发现很多头文件找不到,比如db文件夹下的一些.h文件。是我打开的姿势不对吗?
2019/09/10 13:25
回复
举报
刚才确认了一下,代码是全的。头文件找不到是因为这个项目只支持64位编译(在vs中也只配置了64位的包含目录),所以用vs打开后,配置管理器里选择x64 就可以了
2019/09/10 14:26
回复
举报
如果需要编译,还需要配置一下boost库的包含目录和库目录...
2019/09/10 14:28
回复
举报
很赞, 默认 sa 的密码是什么
2019/09/07 17:43
回复
举报
pinusdb 文档里面有的
2019/09/07 17:44
回复
举报
更多评论
24 评论
73 收藏
分享
返回顶部
顶部