一、概述
DolphinDB
DolphinDB 是以 C++ 编写的一款分析型的高性能分布式时序数据库,使用高吞吐低延迟的列式内存引擎,集成了功能强大的编程语言和高容量高速度的流数据分析系统,可在数据库中进行复杂的编程和运算,显著减少数据迁移所耗费的时间。
DolphinDB 通过内存引擎、数据本地化、细粒度数据分区和并行计算实现高速的分布式计算,内置流水线、 Map Reduce 和迭代计算等多种计算框架,使用内嵌的分布式文件系统自动管理分区数据及其副本,为分布式计算提供负载均衡和容错能力。
DolphinDB 支持类标准 SQL 的语法,提供类似于 Python 的脚本语言对数据进行操作,也提供其它常用编程语言的 API,在金融领域中的历史数据分析建模与实时流数据处理,以及物联网领域中的海量传感器数据处理与实时分析等场景中表现出色。
TimescaleDB
TimescaleDB 是目前市面上唯一的开源且完全支持 SQL 的时序数据库。它在 PostgreSQL 数据库的基础上进行开发,本质上是一个 PostgreSQL 的插件。
TimescaleDB 完全支持 SQL 且拥有 PostgreSQL 的丰富生态、并针对时间序列数据的快速插入和复杂查询进行了优化,支持自动分片,支持时间空间维度自动分区,支持多个 SERVER、多个 CHUNK 的并行查询,内部写优化(批量提交、内存索引、事务支持、数据倒灌)。
然而,目前 TimescaleDB 仍不支持水平扩展(集群),即不能动态增加新的数据结点以写入数据(Write clustering for multi-node Timescale deployments is under active development. https://github.com/timescale/timescaledb/issues/9),只支持通过 PostgreSQL 的流复制(streaming replication)实现的只读集群(read-only clustering)。
在本报告中,我们对 TimescaleDB 和 DolphinDB,在时间序列数据集上进行了性能对比测试。测试涵盖了CSV数据文件的导入导出、磁盘空间占用、查询性能等三方面。在我们进行的所有测试中,DolphinDB 均表现得更出色,主要结论如下:
- 数据导入方面,小数据集情况下 DolphinDB 的导入性能是 TimescaleDB 的
10多倍
,大数据集的情况下导入性能是其100多倍
,而且在导入过程中可以观察到随着导入时间的增加,TimescaleDB 的导入速率不断下降,而 DolphinDB 保持稳定。 - 数据导出方面,DolphinDB 的性能是 TimescaleDB 的
3 倍
左右。 - 磁盘空间占用方面,小数据集下 DolphinDB 占用的空间仅仅是 TimescaleDB 的
1/6
,大数据集下占用空间仅仅是 TimescaleDB 的1/17
。 - 查询性能方面,DolphinDB 在4个测试样例中性能超过 TimescaleDB
50多倍
;在15个测试样例中性能为 TimescaleDB10 ~ 50 倍
; 在10个测试样例中性能是 TimescaleDB 的数倍;仅有2个测试样例性能低于TimescaleDB。
二、测试环境
TimescaleDB 目前仍未支持能够写入数据的集群,因此我们使用单机进行测试。单机的配置如下。
主机:DELL OptiPlex 7060
CPU :Intel Core i7-8700(6 核 12 线程 3.20 GHz)
内存:32 GB (8GB × 4, 2666 MHz)
硬盘:2T HDD (222 MB/s 读取;210 MB/s 写入)
OS:Ubuntu 16.04 LTS
DolphinDB 的测试版本为 Linux v0.89 (2019.01.31),最大内存设置为28GB
。测试时使用的 PostgreSQL 版本为 Ubuntu 10.6-1 on x86_64, TimescaleDB 插件的版本为 v1.1.1。根据 TimescaleDB 官方指南推荐的性能调优方法,结合测试机器的实际硬件配置,我们在 https://pgtune.leopard.in.ua/ 网站上生成了配置文件,同时参考了 https://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server 这一官方配置指南作了优化,主要将 shared_buffers
和 effective_cache_siz