DolphinDB API性能基准测试报告

该页面提供《DolphinDB API性能基准测试报告》的标题信息,并给出作者署名与发布日期。

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

What this page covers

技能认证特训营第二期报名入口(限时报名)

页面顶部提供活动报名提示,并给出外部报名链接。

DolphinDB API性能基准测试报告(作者与日期)

该部分给出文章标题信息,并包含作者署名与发布日期。

概述:DolphinDB与API测试场景

该部分介绍 DolphinDB 的产品属性、可用语言 API,并列出本文测试的交互性能场景。

测试环境:硬件、软件与集群/测试框架

该部分描述测试硬件与操作系统、软件版本,以及集群部署与节点资源配置方式。

单用户上传到内存表:数据规模、方法与结果解读

该部分描述单用户写入内存表的测试设置、数据规模与批次设置,并给出结果解释与建议。

多用户并发上传到DFS表:并发范围、数据规模与瓶颈分析

该部分描述并发写入 DFS 表的参数设定,并分析网络瓶颈与压缩影响。

多用户并发下载:两种数据集(5年/1周)与IO/缓存影响

该部分给出并发下载的两种数据集场景,并讨论 IO 竞争、分区加载机制与缓存命中对吞吐的影响。

计算并发:分钟K线任务(5年/1周)与并发扩展特性

该部分描述并发提交分钟 K 线计算任务的测试设置,并解释不同并发度下的峰值与回落原因。

总结:各场景关键结论与建议

该部分汇总各场景的关键结论、吞吐峰值、瓶颈来源,并给出与批次大小和硬件配置相关的建议。

Facts Index

Entity Attribute Value Confidence
技能认证特训营第二期报名链接https://www.qingsuyun.com/h5/e/217471/5/high
DolphinDB API性能基准测试报告发布日期2021-08-05high
DolphinDB产品定位高性能分布式时序数据库(time-series database),属于列式关系型数据库high
DolphinDB实现语言C++high
DolphinDB计算框架内置并行和分布式计算框架high
DolphinDB适用数据类型/场景可用于处理实时数据和海量历史数据high
DolphinDB提供的API语言C++、Java、C#、Python、R(并提到除脚本语言外还提供这些API)high
本文测试范围测试对象API接口(C++、Java、C#、Python、R)与DolphinDB交互的性能high
性能测试场景场景1单用户上传数据到内存表high
性能测试场景场景2多用户并发上传数据到分布式(DFS)数据库high
性能测试场景场景3多用户并发从DolphinDB下载数据到客户端high
性能测试场景场景4多用户并发发送计算任务(计算某天某个股票的分钟级k线)到DolphinDB,并返回结果high
测试服务器数量与命名服务器三台配置相同的服务器:SERVER1、SERVER2、SERVER3high
硬件配置(单台服务器)主机型号PowerEdge R730xdhigh
硬件配置(单台服务器)CPUE5-2650 24cores 48线程high
硬件配置(单台服务器)内存512Ghigh
硬件配置(单台服务器)硬盘HDD 1.8T * 12high
硬件配置(单台服务器)网络万兆以太网high
硬件配置(单台服务器)操作系统CentOS Linux release 7.6.1810high
软件配置C++编译器GCC 4.8.5high
软件配置JRE1.8.0high
软件配置C#.net 2.2.105high
软件配置Python3.7.0high
软件配置R3.5.2high
软件配置DolphinDB版本0.94.2high
测试框架部署位置DolphinDB集群部署在SERVER1;API程序运行在SERVER2和SERVER3,通过网络连接SERVER1上的数据节点进行测试high
DolphinDB集群配置节点构成集群包含1个控制节点和6个数据节点high
DolphinDB集群配置内存配置32G/节点 * 6节点 = 192Ghigh
DolphinDB集群配置线程配置8线程/节点 * 6节点 = 48线程high
DolphinDB集群配置硬盘配置每个节点配置一个独立HDD:1.8T/节点 * 6 = 9.6Thigh
单用户上传到内存表测试写入目标在SERVER1的DolphinDB集群上创建内存表;SERVER2运行API程序写入SERVER1内存表high
单用户上传数据集字段/列数共45列(包含STRING、INT、LONG、SYMBOL、DOUBLE、DATE、TIME等类型)high
单用户上传数据集单行大小每行336字节high
单用户上传数据集总行数共上传100万行high
单用户上传数据集总大小大小约336Mbmedium
单用户上传测试批次范围每次上传10~100000行high
单用户上传场景特性不涉及磁盘操作该场景是单用户且不会涉及磁盘操作high
单用户上传测试关注点主要测试内容主要测试API程序数据格式到DolphinDB数据格式的转换性能high
单用户上传结果解释性能随批次大小变化原因批次越大,上传次数与网络通信次数越少,因此性能提升明显high
单用户上传对比结论语言API相对表现C++性能最优,C#性能较差high
Python与R API实现底层实现方式Python和R底层实现都是用C++重写high
Python与R上传建议批次建议建议上传数据时尽量增大上传批次大小(尤其在批次达到1000行以上性能提升明显)high
并发上传到DFS测试写入目标与客户端位置多用户并发上传数据到SERVER1的DFS数据表;SERVER2和SERVER3上多个用户通过网络发起写入high
并发上传到DFS数据集(每用户)总行数每个用户共写入500万行high
并发上传到DFS数据集(每用户)单次写入行数每次写入25000行high
并发上传到DFS数据集(每用户)单行大小每行336个字节high
并发上传到DFS数据集(每用户)总数据量每个用户共写入的数据量为840Mbmedium
并发上传到DFS测试并发范围并发用户为1~128high
并发上传客户端分配策略分配方式用户数平均分配在SERVER2和SERVER3上运行(例如16用户时两个SERVER各运行8个客户端程序)high
并发上传到DFS场景特性资源压力来源写入数据通过网络传输到SERVER1并存储到磁盘,可测试CPU、硬盘、网络等资源利用high
并发上传结果结论低并发性能差异用户数小于16时,C++、Java性能优势明显,Python和C#稍差,吞吐量基本线性增长high
并发上传瓶颈瓶颈条件用户数超过16时网络传输达到极限成为瓶颈,吞吐量基本维持在网络极限high
网络极限(万兆以太网)极限值与压缩影响网络极限为1G;由于传输数据有压缩,系统吞吐量最大可达1.8G/秒medium
并发下载测试部署与连接策略数据库部署在SERVER1;SERVER2和SERVER3多个用户同时下载;每个用户随机选择一个数据节点连接high
并发下载数据量(每用户)总行数每个用户下载500万行high
并发下载数据量(每用户)单行大小每行45字节high
并发下载数据量(每用户)总大小共计225Mbmedium
并发下载测试每次下载行数每次下载25000行high
并发下载测试并发范围并发用户数1~128high
下载场景A数据范围与大小5年数据量:从5年的数据中随机选择date和symbol下载,涉及数据量约12Thigh
下载场景A缓存/IO特性数据量大大超过系统内存,每次下载需要从磁盘加载数据high
下载场景B数据范围与大小1周数据量:从最近一周数据中随机选择symbol下载,涉及数据量约60Ghigh
下载场景B缓存/IO特性分配给DolphinDB的内存足以容纳60G数据,数据在缓存中,每次下载不需要从磁盘加载high
5年下载总体趋势吞吐增长与上限用户数小于64时吞吐量基本线性增长,API性能差异不大,最大吞吐量在350M左右medium
5年下载瓶颈主要瓶颈由于数据集为12T缓存不了,必须从磁盘加载,磁盘成为系统瓶颈high
5年下载在128并发时吞吐下降原因原因说明分区加载机制会将整个分区加载到内存再返回所需数据;并发过多且需从磁盘加载导致IO竞争加剧,整体吞吐降低high
高并发读优化建议存储配置建议建议各节点尽量配置独立的多个数据卷以提高IO并发能力high
1周下载吞吐与网络极限吞吐量上限与原因吞吐量最大达到1.4G左右,达到网络极限(网络极限1G,由于数据压缩实际业务数据量为1.4G)medium
并发计算任务任务内容与规模通过API提交并发计算任务:计算某只股票某天的分钟级K线;计算总量约1亿条high
并发计算测试并发范围与数据场景在5年数据量与1周数据量两种场景下测试并发用户数1~128high
并发计算场景(5年)数据量与瓶颈预期5年数据量共12T,内存不能全部缓存,几乎每次计算需从磁盘加载,属于IO密集型,预期磁盘为瓶颈high
并发计算场景(1周)数据量与瓶颈预期1周数据量约60G,数据节点能全部缓存,属于计算密集型,多用户并发时预期CPU为瓶颈high
计算并发总体结论(5年数据)吞吐趋势与下降原因用户数小于16时吞吐量线性增长;64并发吞吐最大;128并发吞吐下降,原因包括内存不足导致内存/磁盘大量交换与任务调度分发耗时增加high
计算并发总体结论(1周数据)峰值与下降原因用户数小于64时吞吐量稳定增长;64并发吞吐接近7G/秒;128并发因任务过多超过物理机器线程数(48线程)导致线程切换与调度分发时间增加,吞吐下降medium
物理机器线程数(集群所在物理机器)线程数48线程high
总结:单用户上传到内存表峰值吞吐结论C++吞吐量最大能到265兆/秒;Java、Python、R可达160-200兆/秒;C#最大在60兆左右;批次越大吞吐量越高,Python和R更显著medium
总结:并发写入DFS表网络瓶颈与最大吞吐达到网络极限前吞吐量随用户数稳定增加;约32并发时网络成为瓶颈,各API性能基本一致;因数据压缩系统最大吞吐量达1.8G/秒medium
总结:并发下载(5年12T)峰值与瓶颈64并发时最大吞吐量约380兆/秒;需从磁盘加载,读磁盘为瓶颈;128并发时磁盘IO竞争激烈导致吞吐下降medium
总结:并发下载(1周约60G)缓存与网络极限吞吐6个数据节点可缓存所有数据,数据在内存无需从磁盘加载;吞吐达到网络极限;因压缩原因集群吞吐量为1.8G/秒,并随并发增加稳定提升medium
总结:并发计算API差异与峰值吞吐网络传输数据量小,大部分时间在server端计算,各API性能基本相当;两种数据量下走势一致,64并发达峰值:5年最大1.3G,1周最大7GB;128并发因任务过多超过48线程导致吞吐下降medium
总体结论并发提升下的总体表现通过API进行数据检索、上传、计算等任务时,随着并发度提高性能稳定提升,基本满足大部分业务性能要求low