30秒执行摘要:
MatrixDB 在小规模、中规模和大规模场景下表现均优于其他时序数据库,多数场景有几十倍性能优势
MatrixDB 支持ACID,确保数据不错不重不丢;InfluxDB、TDengine不能确保数据不错不重不丢
MatrixDB 在各种规模数据写入时,内存消耗小而且平稳;InfluxDB 占用内存较多;TDengine占用内存最多
MatrixDB 支持冷热分级存
在物联网和实时数仓场景中,数据的高速写入能力至关重要,直接影响产品方案的可用性、可靠性和扩展性。以物联网为例,当面临千万甚至上亿设备、平均每个设备采集几十个到几百个指标时,每秒生成的数据将达到数十亿至数百亿。能否及时可靠的插入这种量级的数据,是评价一个物联网数据库的核心要素和第一需求。据统计,时序数据具有写多读少特征,其中95%甚至99%以上是数据写入操作,从这个意义上讲,怎么重视数据写入能力都不为过。
为了应对这种高通量数据写入需求,一些产品采用无事务或者弱事务的方式来提高写入速度,这样造成错误数据、重复数据或者丢失数据。MatrixDB通过MatrixGate组件,创新性的在保证事务严格一致性(ACID)的前提下,支持大吞吐量数据高速写入。同时,产品具有良好的线性扩展性,可以通过添加节点的方式,线性提升系统的写入速度,满足车联网、工业互联网、智能家居、智能城市等各种物联网场景的数据写入需求。
这篇博客将详细介绍在同样环境下MatrixDB、InfluxDB和TDengine三个产品的写入能力,方便用户选型。本文采用行/每秒衡量数据写入能力,有的文章使用数据点/秒,这两种方式可以互换,譬如一张表有时间列、设备ID列和5个指标列,那么插入一行数据就意味着插入5个数据点,如果一秒插入1000行,那么写入能力是每秒5000个数据点。
根据不同的用户使用场景,我们定义了小规模、中等规模和大规模三种不同的测试用例。具体特征如下:
针对每种测试用例,分别使用三种产品各自推荐的快速加载方式取得最高值,测试结果如下(单位: 行/秒),其中小规模选择100万设备1列指标数据、中等规模选择10万设备400列指标数据、大规模选择100万设备800列指标数据:
MatrixDB与两个产品的加载速度之比分别是:
综上,在三种场景下,加载性能从高到低分别是:
MatrixDB > TDengine > InfluxDB
值得一提的是,三个产品的事务支持是不一样的,MatrixDB在单节点和集群多节点都支持完整严格的事务,包括原子性(A)、一致性(C)、隔离性(I)和持久性(D),InfluxDB和TDengine不支持事务。测试时,也注意到不同产品内存消耗不同,MatrixDB内存占用较小较平稳,InfluxDB内存占用较多,TDenginie内存消耗最多并且与设备数正相关,例如在500万设备时,内存占用会超过80G。
MatrixDB、InfluxDB、TDengine均采用单机部署。机器配置如下:
01 机器配置
02 软件版本
03 参数调整
数据通过 tsbs_generate_data 工具生成。tsbs_generate_data 是开源时序数据测评基准 tsbs 中的数据生成工具。MatrixDB团队扩充了该工具以支持大规模设备场景,通过参数--use-case="massiveiot" 来使用。
可以在 百度网盘https://pan.baidu.com/s/1BFYcQR3DzqVLiy8ymXu9eg (提取码:8cba)下载该工具。
tsbs_generate_data 命令常用参数说明如下:
详细的数据生成方法和命令,请参考文末链接:时序数据库加载性能测试过程
01 小规模文件大小
02 中等规模文件大小
03 大规模文件大小
如果全量生成的话,估算数据容量如下:
由于InfluxDB/TDEngine在列数超过100列时较慢,为避免写入时间过长,测试中采取限定时间范围方法:
限定时间范围后,实际数据大小如下:
每种产品使用的写入方式如下:
01 小规模数据写入对比
值越大代表写入性能越好
MatrixDB与InfluxDB写入速度对比
MatrixDB与TDengine写入速度对比
02 中等规模数据写入性能数据
值越大代表写入性能越好
MatrixDB与InfluxDB写入速度对比
备注
如果InfluxDB全量写入,按400列的2268.06行每秒的写入速度计算,14.4亿行,需要费时1058分钟,而MatrixDB 只需要14分钟,相比之下InfluxDB写入速度太慢。故InfluxDB 10列、50列,只写入1千万行,InfluxDB 100列,只写入100万行,400列,只写入10万行。
MatrixDB与TDengine写入速度对比
备注
按TDengine 100列全量写入需要262分钟计算,400列估算需要1050分钟。而MatrixDB 最快仅需要14分钟。10万设备数400列,相比之下写入速度太慢、费时太久,故设置1000个设备,然后推导出10万设备所需时间。
03 大规模数据写入性能数据
值越大代表写入性能越好
MatrixDB与InfluxDB写入对比
备注
如果InfluxDB全量写入,按10万设备量400列2268.06行每秒的写入速度计算,14.4亿行,需要费时1058分钟,100万设备量估算需要花费10580分钟,耗时太久。为避免InfluxDB写入费时太长,InfluxDB 100万设备数、100列和200列,只写入100万行,400、800列只写入10万行,然后同比推导出结果数据。
MatrixDB与TDengine写入速度对比
备注
TDengine按10万设备数、100列全量写入需要262分钟计算,400列估算需要1050分钟,而MatrixDB 400列最快仅需要14分钟,100万设备数,相比之下写入速度太慢、避免写入费时太久,故TDengine 100、200、400、800列,设置的是1000个设备,然后同比推导出结果数据。
时序数据库加载性能测试过程:https://ymatrix.cn/blog/load-test-steps
数据生成及加载工具下载链接:https://pan.baidu.com/s/1BFYcQR3DzqVLiy8ymXu9eg(提取码:8cba)
MatrixGate原理介绍:https://ymatrix.cn/doc/reference/mxgate.html
欲了解更多超融合时序数据库相关信息,烦请访问yMatrix官方网站:https://www.ymatrix.cn