DolphinDB和Druid都是分布式的分析型时序数据库。尽管前者使用c++开发,后者使用java开发,两者在架构、功能、应用场景等方面有很多共同点。本报告在SQL查询、数据导入、磁盘占用空间等方面对两者进行性能的对比测试。
测试数据集使用约300GB的美国股票市场交易与报价数据。通过测试我们发现:DolphinDB的数据写入速度大约是Druid的30倍。
DolphinDB的查询速度是Druid的10倍左右。
DolphinDB数据库的静态空间占用比Druid高80%,运行时使用的总磁盘空间略低于Druid。
1. 系统介绍
DolphinDB是一款分析型的分布式时序数据库,由C++编写,内置流数据处理引擎,并行计算引擎和分布式计算的功能。DolphinDB database 内置分布式文件系统,支持集群水平和垂直扩展。提供类SQL和Python的脚本语言,不仅可以用SQL进行对数据进行操作,也可以完成更为复杂的内存计算。提供其它常用编程语言的API,方便与已有应用程序集成。DolphinDB能对万亿级数据快速处理,在金融领域中的历史数据分析建模与实时流数据处理,以及物联网领域中的海量传感器数据处理与实时分析等场景中均有非常出色的表现。
Druid是一个由Java语言实现的OLAP数据仓库,适用于万亿级别数据量上的低延时查询和插入以及实时流数据分析。Druid采用分布式、SN架构和列式存储、倒排索引、位图索引等关键技术,具有高可用性和高扩展性的特点。同时,Druid提供了多种语言接口,支持部分SQL。
2. 系统配置
2.1 硬件配置
本次测试的硬件配置如下:
设备:DELL OptiPlex 7060
CPU:Inter(R) Core™ i7-8700 CPU @ 3.20GHz,6核心12线程
内存:32GB
硬盘:256GB SSD,1.8TB希捷ST2000DM008-2FR102机械硬盘
操作系统:Ubuntu 16.04 x64
2.2 环境配置
本次的测试环境为单服务器下的多节点集群。设置DolphinDB的数据节点的个数为4个,单个数据节点最大可用内存设置为4GB。设置Druid的节点个数为5个,分别为overload,broker,historical,coordinator和middleManager。Druid默认对查询结果进行缓存,影响测试时通过多次查询求平均值这个方法的正确性,故关闭query cache的功能。为不影响Druid的写入性能测试, 关闭了Druid的roll up功能。其他配置均服从默认配置。
原始csv文件存储在HDD上。数据库存储在SSD上。
3. 测试数据集
本次测试采用了2007年8月美国股票市场level1的TAQ数据集。TAQ数据集按日分为23个csv文件,单个文件大小在7.8G到19.1G不等,整个数据集大小约290G,共有6,561,693,704条数据。
测试数据集TAQ在DolphinDB和Druid中各个字段的数据类型如下所示:
在Druid中,DATE字段指定为timestamp列。其它字段均用作dimension字段。
4. 数据分区方案
在DolphinDB中,采用股票代码+日期组合分区,其中按照股票代码范围分为128个分区,按照日期分为23个分区。
Druid仅支持时间范围分区,因此我们把DATE列指定为timestamp类型,以日为单位,共划分为23个分区。
5. 对比测试
我们从数据库查询性能、I/O性能以及磁盘占用空间三方面对DolphinDB和Druid进行了对比测试。
5.1 数据库查询性能
DolphinDB脚本语言支持SQL语法,同时针对时序数据进行了功能扩展。Druid提供了基于Json数据格式的语言进行查询,同时也提供了dsql来进行SQL查询。本次测试使用Druid自带的dsql。
我们对TAQ数据集进行了若干种常用的SQL查询。为了减少偶然因素对结果的影响,本次查询性能测试对每种查询操作均进行了10次,对总时间取平均值,时间以毫秒为单位。测试DolphinDB时,我们使用了timer语句来评估SQL语句在服务端的执行时间。由于D