栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

行情数据库性能基准测试(MongoDb/TdEngine/DolphinDb)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

行情数据库性能基准测试(MongoDb/TdEngine/DolphinDb)

行情数据库性能基准测试(MongoDb/TdEngine/DolphinDb) 数据库选型
数据库开源时序集群
MongoDB
TdEngine
DolphinDb免费版限制
测试数据和环境

数据量为2021年1月1日起的1分钟全市场指数合约数据,格式为csv存储,按日期、合约分成单文件。

入库表分成1分钟、3分钟、5分钟、15分钟、30分钟、60分钟、日线表。

入库程序为统一的代码,只在写入(单线程)的时候选择不同的数据库,不影响测试。所有数据库均为单机版,无集群,机器为40核、128G内存,安装在docker中,docker限制核数4核和限制内存8G

测试结果 MongoDb(v5.0.9)

插入总时间: 15.92min
总磁盘占用: 1.3G

查询时间测试:

db.bar_01min.find({'code': 'IF000'}).count();
> OK
> 时间: 0.057s
db.bar_05min.find({'code': 'IF000'}).count();
> OK
> 时间: 0.02s

按时间范围查询数据,包含取出数据到内存的时间

# 按合约和周期查询,共28次查询
[MongoAvgUsed]:times[28] avg_per_time[224.048ms] total_time[6273.35ms]

按时间范围选取数据,不过滤code

db.bar_05min.find({'time': {'$lte':1658219000 , '$gte': 1609430000}}).count();
> OK
> 时间: 1.526s
TdEngine(v2.6.0.6)

tdengin采用超级表模式,按分钟分成7个大的超级表,每个合约创建一个子表。

插入总时间: 12min
总磁盘占用: 518M

查询时间测试:

taos> select count(*) from IF000_1m;
       count(*)        |
========================
                 89041 |
Query OK, 1 row(s) in set (0.014000s)
taos> select count(*) from IF000_5m;
       count(*)        |
========================
                 17809 |
Query OK, 1 row(s) in set (0.012000s)

按单表按时间范围查询数据,包含取出数据到内存的时间,这块tdengin的表现和mongodb差不多,如果不是cpu和内存占用比较低,我都有点怀疑他们是否在吹牛

# 按合约和周期查询,共28次查询
[TaosAvgUsed]:times[28] avg_per_time[247.89ms] total_time[6940.92ms]

按时间范围从超级表中选取数据,不过滤code

taos> select count(*) from bar_5m where ts >= 1609430000000 and ts <= 1658219000000;
       count(*)        |
========================
               1570191 |
Query OK, 1 row(s) in set (0.049000s)
DolphinDb(2.0)

dolphindb采用分布式表模式,按分钟分成7个表,依旧使用c++程序单线程入库,注意时间戳需要自己转换时区(+8),否则查询出来的时间会错乱(槽点),c++摸索起来比较乱(槽点)。

插入总时间: 22min (问号脸)
总磁盘占用: 544M
CPU占用: 超过50%

查询时间测试:

> timer select count(*)  from loadTable("dfs://futures_min",  `bar_1m) where code = 'IF000'
  Time elapsed: 145.646 ms

> timer select *  from loadTable("dfs://futures_min",  `bar_1m) where code = 'IF000'
  Time elapsed: 699.525 ms

> timer select count(*)  from loadTable("dfs://futures_min",  `bar_5m) where code = 'IF000'
  Time elapsed: 54.573 ms

> timer select *  from loadTable("dfs://futures_min",  `bar_5m) where code = 'IF000'
  Time elapsed: 418.723 ms

按时间范围从超级表中选取数据,不过滤code

> timer select count(*)  from loadTable("dfs://futures_min",  `bar_5m) where time >= timestamp(1609430000000) and time <= timestamp(1658219000000);
  Time elapsed: 133.771 ms

按单表按时间范围查询数据,包含取出数据到内存的时间就不测试了,c++接口取数据不太好用,解析太费事,python装不上,限制python版本(懒得弄了,被c++接口编译还折腾了半天,cmakelists都懒得写的团队)

性能比较

插入性能

数据库时间空间cpu内存
MongoDB15.92min1.3G30%-50%1.2G
TdEngine12min518M12%左右300M
DolphinDb22min544M30%-100%1G

查询性能
select *查询不是很准确,仅供参考,各个平台提供的查询基准不一致。

数据库1m count(*)1m select *5mcount(*)5m select *范围查询
MongoDB57ms1.554s20ms323ms1.526s
TdEngine14ms880ms12ms623ms49ms
DolphinDb145ms699ms54ms418ms133ms

c++程序单线程测试,读取不同周期数据28次结果,按时间范围选取,不同合约测试

数据库平均时间总时间
MongoDB224.048ms6273.35ms
TdEngine247.89ms6940.92ms
DolphinDb

个人评测,有些不足地方请指正。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1018293.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号