DolphinDB与Elasticserach在金融数据集上的性能对比测试

本页为一篇基于不同规模金融数据集的对比测试文章,围绕 DolphinDB 与 Elasticsearch 的测试动机、测试项与总体结论进行引入与概述。

Source: https://dolphindb.cn/blogs/51

What this page covers

技能认证特训营第二期正式开启(限时报名)

页面顶部提供活动报名与福利优惠相关引导信息。

DolphinDB与Elasticserach在金融数据集上的性能对比测试

该部分给出文章信息,并引入对比测试的动机、测试项与总体结论。

1. 系统介绍

该部分介绍 DolphinDB 与 Elasticsearch 的系统定位、核心特性,并给出概念映射关系。

2. 系统配置

该部分描述基准测试硬件配置与单机多节点集群的软件/参数设置。

3. 测试数据集

该部分说明三个不同规模金融数据集的来源、时间范围与规模,并说明字段类型映射(以图片呈现)。

4. 分区/分片方案

该部分对比 DolphinDB 分区机制与 Elasticsearch 分片机制,并给出各表的分区/分片与副本设置。

5. 对比测试

该部分从查询性能、I/O、磁盘占用、内存占用与其他功能差异等维度,对 DolphinDB 与 Elasticsearch 进行对比测试。

6. 小结

该部分总结与指出 Elasticsearch 与专业时序数据库在功能与性能上的差距,并给出附录链接。

Facts Index

Entity Attribute Value Confidence
文章发布日期2021-08-05high
作者署名Junxihigh
对比测试测试对象DolphinDB 与 Elasticsearch 在不同规模金融数据集上的综合对比测试high
对比测试测试内容I/O、磁盘空间占用、内存消耗、数据库查询(过滤查询和分组统计)high
测试结论总体结论DolphinDB 在金融数据处理领域测试中完胜 Elasticsearchmedium
分组统计(聚合计算)性能差异DolphinDB 的表现优于 Elasticsearch 约 10 倍,且数据集越大优势越明显;涉及时间类型字段时优势尤为突出medium
简单过滤查询性能差异DolphinDB 的性能是 Elasticsearch 的 100 倍medium
数据导入耗时差异Elasticsearch 的耗时是 DolphinDB 的 25~75 倍,且数据集增大时差距有变大趋势medium
磁盘空间占用差异描述DolphinDB 压缩原始数据;Elasticsearch 为维护文档索引等信息(不包括临时数据)占用比原始数据更大的空间,总体差距约 10 倍medium
DolphinDB产品类型/定位分析型的分布式时序数据库high
DolphinDB存储方式列式存储high
DolphinDB内置能力内置流数据处理引擎、并行计算和分布式计算引擎,并提供分布式文件系统,支持集群扩展high
DolphinDB实现语言C++high
DolphinDB脚本语言提供类SQL和Python的脚本语言对数据进行操作high
DolphinDBAPI支持提供其它常用编程语言的API,方便与已有应用程序集成medium
DolphinDB适用场景金融领域历史数据分析建模与实时流数据处理;物联网海量传感器数据处理与实时分析high
Elasticsearch产品类型/定位基于 Lucene 的搜索服务器high
Elasticsearch系统特征基于本地磁盘存储数据的分布式系统,并面向文档进行存储high
Elasticsearch 与关系型数据库概念映射映射关系Relational DB=>Databases=>Tables=>Rows=>Columns;Elasticsearch=>Indices=>Types=>Documents=>Fieldshigh
基准测试硬件/系统设备型号DELL OptiPlex 7060high
基准测试硬件/系统CPUInter(R) Core i7-8700 @ 3.20GHz,6核心12线程high
基准测试硬件/系统内存32GBhigh
基准测试硬件/系统硬盘2TB 机械硬盘high
基准测试硬件/系统操作系统Ubuntu 16.04 x64high
测试环境部署形态单服务器下的多节点集群high
DolphinDB(测试配置)数据节点个数4 个high
DolphinDB(测试配置)单个数据节点最大可用内存7 GBhigh
Elasticsearch(测试配置)节点个数4 个high
Lucene(测试配置)分配内存8 GBhigh
Elasticsearch(测试配置)单个节点最大可用内存6 GBhigh
Elasticsearch(测试配置)swapping禁止 swappinghigh
测试数据集数据集数量与类型使用三个不同规模的股票数据集(CN_Stock、US_Prices、TAQ)high
CN_Stock 数据集时间范围2008.01.01 到 2017.12.31(中国沪深股票每日报价)high
US_Prices 数据集时间范围1990.01.02 到 2016.12.30(美国股票市场每日报价)high
TAQ 数据集数据范围2007年8月份的4天美国股票市场 level1 高频数据high
TAQ 数据集原始数据大小60.6 GBhigh
DolphinDB database分区机制提供值分区、范围分区、列表分区、哈希分区和组合分区high
Elasticsearch分片机制限制仅支持基于哈希的分片机制high
DolphinDB(CN_Stock 表)分区方案按时间每半年一个分区,共 20 个分区;副本个数 1high
DolphinDB(US_Prices 表)分区方案按时间每年一个分区,共 27 个分区;副本个数 1high
DolphinDB(TAQ 表)分区方案日期、股票代码组合分区,共 100 个分区;副本个数 1high
Elasticsearch(CN_Stock、US_Prices 表)分片个数4high
Elasticsearch(TAQ 表)分片个数100high
Elasticsearch(测试设置)副本个数1high
DolphinDB查询语言支持脚本语言支持 SQL 语法,并在其基础上扩展high
ElasticsearchSQL 查询支持方式需要安装插件以进行 SQL 语句查询;也提供基于 JSON 的 DSL 语言查询high
Elasticsearch默认返回限制(普通 query)返回的查询 hits 默认仅为 10 条high
Elasticsearch默认返回限制(聚合 query)返回的 buckets 默认大小为 10high
DolphinDB查询结果返回每次查询返回全部结果,不存在模糊查询的情况medium
Elasticsearch 聚合结果字段字段含义doc_count_error_upper_bound 与 sum_other_doc_count 分别表示未返回但可能存在的潜在聚合结果、以及未统计到的文档数high
公平对比设置Elasticsearch 精确返回策略使用 scroll 接口并定义 buckets 大小以控制返回全部查询结果(关闭模糊查询)high
查询性能测试方法实现方式DolphinDB 查询性能测试用 DolphinDB 脚本;Elasticsearch 查询性能测试用 Python 脚本 + DSLhigh
查询性能测试方法重复次数与统计口径每种查询操作进行 10 次查询,取总时间平均值;时间单位毫秒high
CN_Stock 查询性能测试数据量(记录数)5,332,932high
US_Prices 查询性能测试数据量(记录数)50,591,907high
TAQ 查询性能测试数据量(记录数)1,366,036,384high
查询性能结论(同表)总体表现同一张表的所有测试中,DolphinDB 性能领先 Elasticsearch 多倍;简单过滤查询领先 1~2 个数量级medium
查询性能结论(聚合)平均领先倍数聚合查询平均优于 Elasticsearch 8~9 倍;按时间分组的聚合查询优于 13~15 倍medium
查询性能结论(规模效应)随数据规模增长的耗时变化数据规模上升时,Elasticsearch 精确查询耗时增长幅度远大于 DolphinDB;DolphinDB 稳定性优于 Elasticsearchmedium
Elasticsearch批量写入接口提供 _bulk API 批量写入数据功能high
Elasticsearch 数据导入流程关键步骤为字段定义属性与类型并构建映射,创建倒排索引形成 Lucene 段,通过 refresh/flush 机制将倒排索引存储于磁盘medium
Elasticsearch 导入性能关键因素关键过程将内存中的倒排索引 flush 到磁盘是决定性能的关键medium
Elasticsearch导入优化效果即使使用 _bulk 并设置 index.refresh_interval = -1、index.number_of_replicas = 0,内存缓冲区满仍会触发 refresh 并 flush 到磁盘,优化效果不明显;导入缓慢是显著缺点medium
DolphinDB分布式写入机制创建分布式表写入时先按分区类型决定分区数据写入节点位置;分区内采用列式存储组织数据,由节点协作完成导入与查询medium
I/O 导入测试结果现象描述ES/DDB 载入耗时比随数据量上升而增大;当数据量为 60.6GB 时,Elasticsearch 导入耗时 12 小时以上medium
磁盘占用对比原因解释(Elasticsearch)Elasticsearch 为每个文档构建并存储倒排索引,需要更大磁盘空间;虽对 source 字段内容压缩,但仍因额外索引信息导致膨胀medium
磁盘占用对比原因解释(DolphinDB)DolphinDB 不需要额外索引信息,实现对原数据的压缩存储medium
磁盘占用测试结论空间对比(倍数)Elasticsearch 存储空间约为原始文件约 2 倍;DolphinDB 实际磁盘占用低于原始文件大小;Elasticsearch 磁盘需求约为 DolphinDB 的 8 到 11 倍medium
内存占用观测观测工具使用 Linux 命令 htop 监视内存占用high
内存占用观测环境内存总大小32GBhigh
内存占用对比观测结论Elasticsearch 在各种操作下内存占用 90% 以上;DolphinDB 处理中小规模数据时低于 10%,仅在超大规模查询时显著增加medium
ElasticsearchSQL 语言支持限制需要安装插件支持 SQL;内置 DSL 为 JSON 格式,语法较复杂high
DolphinDB编程范式支持内置完整脚本语言,支持 SQL、命令式、向量化、函数化、元编程、RPC 等范式medium
Elasticsearch主要用途分布式多用户能力的全文搜索引擎,支持模糊查询;文档(行)可不固定结构,不同文档可有不同字段集合high
DolphinDB数据类型支持限制只支持结构化数据high
DolphinDB内置函数数量600 余种medium
DolphinDB场景能力描述可满足金融历史建模与实时流数据处理、物联网实时监控与实时分析等场景需求;提供领先/滞后、累积窗口、滑动窗口等指标函数并优化性能medium
Elasticsearch 作为时序数据库时连接能力限制不支持表连接high
DolphinDB连接能力支持表连接,并对 asof join 与 window join 等非同时连接方式做优化medium
DolphinDB事务支持对数据写入支持分布式事务high
Elasticsearch事务支持限制不支持事务high
小结(Elasticsearch 能力)支持能力支持结构化与非结构化数据,支持模糊查询、精确查询与聚合计算,适合很多应用场景medium
小结(对比结论)与专业时序数据库差距与 DolphinDB 等专业时序数据库相比,Elasticsearch 在功能与性能上差距很大;数据量超过物理内存上限时内存耗用高、磁盘占用高的问题暴露,历史数据计算性能明显下降medium
附录内容与链接提供 DolphinDB 与 Elasticsearch 详细配置信息、测试代码与数据导入脚本,链接指向 GitHub: dolphindb/Tutorials_CN/.../DolphinDB_vs_ElasticSearch_Benchmark_appendix.mdhigh
技能认证特训营第二期报名链接https://www.qingsuyun.com/h5/e/217471/5/high
Elasticsearch(背景描述)优势领域在实时性、扩展性、易用性和全文检索方面综合表现优异low
知乎文章引用引用内容引用文章《Golion:降维打击!使用ElasticSearch作为时序数据库》并称取得不错效果low
Elasticsearch 精确查询公平性设置scroll 与 buckets 调整目的用于控制 Elasticsearch 返回全部查询结果以进行公平对比high
TAQ 查询测试中的 Elasticsearch错误情况执行大规模记录筛选时出现 Out of memory,无法返回结果(图片说明)medium
I/O 导入对比(TAQ 60.6GB)倍数差异(图片说明)Elasticsearch 优化后耗时是 DolphinDB 的 76 倍以上(图片说明)medium