不可否认,实时数据处理已经成为企业数据平台的核心能力之一。如何高效处理海量而复杂的实时数据,则取决于数据库系统的架构设计和处理性能。最近,应广大用户的要求,基于飞腾开放实验室Phytium Open Laboratory(POL)提供的全国产化环境,庚顿新一代实时数据库(以下简称庚顿RTDB,实时数据库英文全称为Real-time DataBase,简称RTDB)与世界知名的文档型数据库MongoDB进行了一场性能对比测试,因为很多人都想知道这两种数据在海量设备传感器数据处理场景中到底会有怎样的表现。
作为一款专为高吞吐、低延迟的实时数据处理而设计的数据库系统,庚顿RTDB以卓越的性能和高效的数据处理能力,成功地吸引了广大工业用户尤其以强实时、高安全、高稳定著称的流程工业用户的强烈关注。而MongoDB则是一种非常受欢迎的开源文档数据库,以灵活性和通用性而闻名。以前没人做过实时数据库与文档数据库的性能对比,所以这次测试,或许可以为让大家更好地了解庚顿实时数据库在工业实时数据处理这一专业领域的优势。
在讲述测试过程之前,我们可以提前看看测试结果:
对比项 | 对比结果 |
数据写入(普通类型) | RTDB比MongoDB快235倍 |
数据写入(BLOB类型) | RTDB比MongoDB快672倍 |
实时数据查询(普通类型) | RTDB比MongoDB快700倍 |
实时数据查询(BLOB类型) | RTDB比MongoDB快50倍 |
历史数据查询(普通类型) | RTDB比MongoDB快390倍 |
历史数据查询(BLOB类型) | RTDB比MongoDB快146倍 |
历史统计数据查询 | RTDB比MongoDB快8230倍 |
存储空间占用对比(无损压缩前) | RTDB所占存储空间仅是MongoDB的27% |
存储空间占用对比(无损压缩后) | RTDB所占存储空间仅是MongoDB的10% |
存储空间占用对比(多级压缩后) | RTDB所占存储空间仅是MongoDB的万分之4 |
根据对庚顿RTDB和MongoDB性能测试的对比结果,可以得出以下结论:
● 庚顿RTDB具有更高的写入吞吐量和更低的写入延迟。
● 庚顿RTDB能够更快地响应实时查询请求。
● 庚顿RTDB具备高效处理历史数据查询请求的能力。
● 庚顿RTDB能够更有效地利用存储资源,有更高的数据容纳率。
在海量设备传感器数据处理场景中,庚顿RTDB在数据写入性能、实时数据查询性能、历史数据查询性能以及存储空间利用效率等方面都明显优于MongoDB,基于庚顿RTDB构建的应用解决方案无疑拥有巨大的优势。
本次测试是基于飞腾开放实验室Phytium Open Laboratory(POL)提供的全国产化环境,采用真实的工业实时数据场景,芯片采用FT-2000+/64高性能服务器CPU,服务器规格为64C64G,操作系统采用统信UOS V20。参与测试的软件包括GoldenRTDB V3.0与MongoDB V4.4的ARM64平台版本。该项目测试项目属于性能测试,即针对关键指标测试双方的数据写入性能、实时数据查询性能、历史数据查询性能以及数据压缩能力。
由于性能差距较大,为方便阅读和观察,以下所有图表采用对数坐标轴[1]。
1 数据写入性能对比
1)普通类型数据写入性能对比
向20万测点(Float32:Bool=7:3)写入数据,时间戳按100毫秒递增,将跨度1分钟的数据持续急速写入,共1.2亿条数据入库。
测试结论:图1中可以看出随着线程数增加,数据入库吞吐量越高,RTDB数据库最高吞吐量可达1118万条/秒,写入1.2亿条数据耗时约10秒,而MongoDB写入吞吐量最高达4.7万条/秒,数据写入耗时约42分钟,RTDB比MongoDB快235倍。
2)Blob类型数据写入性能对比
向10万Blob测点写入长度为901字节、时间戳按1000毫秒递增,将跨度6分钟的数据持续急速写入,共写入3600万条数据。
测试结论:图2中可以看出随着线程数增加,BLOB数据入库吞吐量越高,RTDB数据库最高吞吐量可达2152MB/秒(251万条/秒),64线程写入3600万条长度为901字节数据耗时约14秒,RTDB比MongoDB快672倍,MongoDB写入数据耗时约2.6小时才完成所有数据写入。
说明:RTDB针对时序数据设计了高效的内存存储优化方案和异步归档方案,解决用户需要将堆积的海量数据瞬间写入数据库的痛点,经过内存层级的缓冲,极大减小磁盘压力,同时RTDB将组织好的数据页以顺序I/O的方式写入文件,最大化数据归档落盘速度。
2 实时数据查询性能对比
1)普通类型最新数据查询对比
测试结论:图3中可以看到,RTDB数据库采用32线程并发查询普通类型10万条最新数据耗时约160毫秒,相同条件下RTDB比MongoDB快700倍。
2)Blob类型最新数据查询对比
测试结论:图4中可以看到,RTDB数据库采用32线程并发查询1万条BLOB最新数据耗时约4秒,相同条件下RTDB比MongoDB快50倍。
3 历史数据查询性能对比
1)普通类型存储值查询对比
测试结论:从图5、6、7中可以看出,RTDB数据库查询普通类型历史存储值的结果都比MongoDB耗时更短,尤其在查询7天大数据量情况下更为明显,如单线程查询1个点7天数据为60.48万条数据时,RTDB比MongoDB快390倍。
2)Blob类型存储值查询对比
测试结论:从图8、9中可以看出,RTDB数据库查询二进制Blob类型历史存储值的结果也比MongoDB耗时更短,在单线程查询1个点1小时3600条数据(每条数据901字节)时,RTDB比MongoDB快146倍。
3)普通类型统计值查询对比
查询不同时间范围(1小时、1天、7天)的统计值(包括最大、最小、平均值)
测试结论:从图10、11、12中可以看出,RTDB数据库查询普通类型统计值结果比MongoDB耗时更短。如查询100点在7天总数据量6048万条数据中获取到最大值、最小值、平均值时,RTDB比MongoDB快722倍;查询1个点1小时3600条的统计值时,RTDB比MongoDB快8230倍。
接下来,我们看看两个数据库在数据压缩处理方面的差异。庚顿RTDB数据库采用了先进的数据压缩技术,能够在保证数据安全的前提下,大幅度降低存储空间的占用。
相比之下,MongoDB在数据压缩和存储空间优化方面的表现明显不如庚顿RTDB数据库,尤其当处理大数据量时,MongoDB需要更多的存储空间和更高的计算资源。
4数据压缩对比
1)无损压缩对比
测试结论:根据以上图表分析,在全量数据未压缩的情况下,RTDB所占存储空间仅是MongoDB的27%,再经过RTDB更加先进的无损压缩算法压缩之后,RTDB的压缩率为30%,而MongoDB的压缩率仅为77%,压缩率越小越好;开启压缩后,RTDB比MongoDB的优势进一步加大,RTDB所占存储空间仅是MongoDB的10%。总的来说,存储相同的数据量,MongoDB要占用的磁盘空间10倍于RTDB。
2)多级压缩对比
RTDB进一步支持有损+无损多级压缩,将存储空间压缩到极致,而MongoDB无法继续压缩。
表2 数据多级压缩性能测试结果
数据库 | 关闭压缩前(MB) | 仅无损压缩(MB) | 仅有损压缩(MB) | 无损+有损压缩(MB) | 最终压缩比 | 最终压缩率(%) |
RTDB | 704.8 | 217.5 | 2.34 | 0.89 | 791.9 :1 | 0.12 |
MongoDB | 2580.48 | 1996.8 | 无 | 无 | 1.3 :1 | 77.38 |
测试结论:根据以上表分析,在全量数据未压缩的情况下,RTDB所占存储空间仅是MongoDB的27%,再经过RTDB更加先进的有损压缩+无损压缩算法压缩之后,RTDB的压缩率为0.12%,而MongoDB的压缩率仅为77%,压缩率越小越好;开启压缩后,RTDB对MongoDB体现了绝对优势,RTDB所占存储空间仅是MongoDB的万分之4。总的来说,存储相同的数据量,MongoDB要占用的磁盘空间2000+倍于RTDB。
综上所述,在工业实时数据处理场景下,庚顿RTDB数据库在性能方面的各项指标都优于MongoDB。如果您正在寻找一款能够应对高并发、低延迟数据处理需求的数据库,那么庚顿RTDB数据库无疑是您的不二之选。
备注:
[1]对数坐标轴:对数坐标轴是某些图表中经常采用的一种坐标轴类型,可以在两个变量之间展现非常大的比例范围。对数坐标轴的刻度不是等分的,而是根据指数函数和对数函数的对称性,以指数方式进行划分。例如,如果我们有一个数据集包含了许多数量级相差很大的值,使用常规的线性坐标轴可能会导致某些小值的柱子无法正确显示,甚至被完全压缩成一条直线。而通过使用对数坐标轴,可以拉大较小值的比例范围,从而更好地展示数据中的细节和差异,帮助我们更清楚地分析数据。
[2]MongoDB建模:创建3个Collection,分别是TableInfo(存储表名和表描述)、TagInfo(存储测点/标签点名称、描述、单位和上下限属性)、DataPoint(存储全部Tag的时序数据),时序数据定义为VTQ(value/timestamp/quality)格式。