DolphinDB与MongoDB在时序数据上的对比测试

本页提供一篇对比测试文章的引言信息,并引入 DolphinDB 与 MongoDB 的差异与测试目的。

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

What this page covers

技能认证特训营第二期报名推广

页面顶部包含限时报名活动的宣传信息与链接入口。

DolphinDB与MongoDB在时序数据上的对比测试(标题与引言)

给出文章标题、作者与发布时间,并引入两种数据库差异与测试目的。

主要结论(性能对比要点)

汇总导入导出、磁盘占用与查询性能的关键对比结论。

测试环境

描述硬件、操作系统,以及 DolphinDB 与 MongoDB 的版本与集群配置。

数据集

说明两种规模数据集、清缓存与查询执行方法,并给出两类数据集的结构与分区/索引策略。

数据库导入导出性能对比

给出导入/导出脚本与结果解读,并分析 MongoDB 导入较慢的原因。

数据库磁盘空间占用对比

说明磁盘占用测量方法、对比结果与造成差异的原因(压缩、索引等)。

数据库查询性能

定义查询类型、计时口径与小/大数据集的查询测试过程、结果与差异原因分析。

小结

总结 DolphinDB 在结构化时序数据处理上的整体优势,以及 MongoDB 在模型多变与非结构化数据场景的优势。

附录(配置与脚本链接)

提供环境配置、分区脚本与查询脚本的参考链接资源。

Facts Index

Entity Attribute Value Confidence
DolphinDB与MongoDB在时序数据上的对比测试publication_date2021-08-05high
AuthornameJunxihigh
DolphinDBdescription列式存储的多模型数据库,主要用于结构化时序数据的高速存储、查询和分析high
MongoDBdescription文档型的NoSQL数据库,可用于处理非结构化和结构化的数据,可根据键值快速查找或写入一个文档high
Benchmark purposegoal评估MongoDB是否适合海量结构化时序数据集(物联网与金融领域等)high
Import performance conclusionrelative_performanceDolphinDB的数据导入速度比MongoDB高出两个数量级;数据量越大差距越明显medium
Export performance conclusionrelative_performance数据导出方面,DolphinDB比MongoDB快50倍左右medium
Disk usage conclusionrelative_usageMongoDB占用磁盘是DolphinDB的2~3倍medium
Query performance conclusionrelative_performanceDolphinDB在4个查询性能测试中速度比MongoDB快30倍;在5个查询性能测试中速度比MongoDB快10~30倍;在12个查询性能测试中速度比MongoDB快数倍;仅在两个点查询测试中慢于MongoDBmedium
Test setupexecution_mode单机测试high
Test hostmodelDELL OptiPlex 7060high
Test host CPUspecIntel(R) Core(TM) i7-8700 CPU@3.20GHZ,6核12线程high
Test host memoryspec32 GB (8GB x 4, 2,666 MHz)high
Test host diskspec2T HDD (222MB/s读取;210MB/s写入)high
Operating systemname_versionUbuntu 18.04 LTShigh
DolphinDBtest_versionLinux0.89high
DolphinDB cluster (test)max_connections_per_node128high
DolphinDB cluster (test)replication_factor2high
DolphinDB cluster (test)node_composition1个控制节点,1个代理节点,3个数据节点high
MongoDBtest_versionLinux4.0.5社区版high
MongoDB shard cluster (test)threads12high
MongoDB cluster (test)max_connections_per_server128high
MongoDB sharded deployment (test)node_composition1个config服务器,1个mongos路由服务器,3个分片服务器high
MongoDB config server replica set (test)replica_composition1个主节点和2个从节点high
MongoDB shard replica set (each shard, test)replica_composition1个主节点,1个从节点,1个仲裁节点high
Datasets testedsizes小数据量级4.2GB;大数据量级62.4GBhigh
Benchmark methodcache_clearing测试前通过sync与echo 1,2,3 | tee /proc/sys/vm/drop_caches清空页面缓存、目录缓存和硬盘缓存high
Benchmark methodquery_batch随后依次执行13条查询并记录时间high
Small datasetname_and_size设备传感器信息小数据集(CSV文件,4.2G, 3千万条数据)high
readings数据集时间范围coverage2016.11.15-2016.11.19high
readings数据集device_count3,000个设备high
readings数据集time_intervals10,000个时间间隔high
info数据集device_count3,000个设备high
Small dataset sourceproviderTimescaleDB官网提供的devices_readings_big.csv与device_info_big.csvhigh
Small dataset source URLlinkhttps://docs.timescale.com/v1.1/tutorials/other-sample-datasetshigh
Small dataset total recordscount3千万条数据high
Small dataset total sizesize4.2Ghigh
device_id字段(readings数据集)data_characteristic有3000个不同值且重复出现;使用string类型占用大量空间且查询效率低;DolphinDB的symbol类型可改善空间与效率medium
DolphinDB small dataset partitioningmethod组合分区:time按天分为4个区;device_id作为第二维度;每天分10个区;每分区原始数据约100MBhigh
MongoDB small dataset sharding/partitioningmethod组合分区:time按日期范围分区;设备ID按范围分区;chunkSize为1024时性能最佳;readings数据集最终分为17个分区high
MongoDB partitioning requirementindex_required分区字段必须建立索引high
MongoDB readings复合索引index_name_and_costtime_1_device_id_1增序索引耗时5分钟,占用空间1.1Ghigh
Large datasetname_and_size股票交易大数据集(CSV文件,62.4G,16亿条数据)high
TAQ数据集provider_and_contentNYSE提供的2007.08.07-2007.08.10四天Level1报价数据,包含8,000多支股票的报价信息high
TAQ数据集文件file_count_and_sizes4个CSV文件;每个14G到17G;总共62.4Ghigh
TAQ数据集record_count大约16亿条数据high
TAQ数据集来源URLlinkhttps://www.nyse.com/market-data/historicalhigh
DolphinDB TAQ partitioningmethod组合分区:date为第一维度每天1分区共4分区;symbol为第二维度范围分区,每天100分区;总共400分区;每分区约40MBhigh
MongoDB TAQ sharding/partitioningmethod组合分区与DolphinDB相同;chunkSize=1024;总共385个分区high
MongoDB TAQ复合索引time_and_size_costdate_1_symbol_1增序索引耗时53分钟,占用空间19Ghigh
DolphinDB import method (TAQ)script_feature使用submitJob与loadTextEx{db, `taq, `date`symbol, fp}进行导入并用timer计时medium
MongoDB import method (TAQ)data_preprocessing将约63G数据分为16个小文件导入,每个3.5G~4.4Ghigh
MongoDB import method (TAQ)command使用mongoimport并设置--numInsertionWorkers 12,指定字段类型(symbol.string(), date.date(20060102), time.date(15:04:05)等)medium
Import benchmark result (table described)dolphindb_rate_and_time_on_16亿_records每秒导入记录数约231.8万条;导入总耗时691秒;性能倍数最高达到MongoDB的286倍medium
Import performance interpretationdataset_type_effectreadings多字符串、TAQ多数值;数值类型导入更快,因此两库导入TAQ速率更快medium
MongoDB import scaling (observed)time_vs_records导入3千万条记录约需1小时;导入16亿条记录约需55小时;在字段相差不大时导入时间与记录条数大约成正比medium
DolphinDB import scaling (observed)time_vs_size导入4.2G需63秒;导入62.4G需11分30秒;在列字段类型和数量相差不大时导入时间与文件大小大约成正比medium
MongoDB slower import reasonsreason_1文档型逐条导入,记录条数大时导入时长增加、性能下降medium
MongoDB slower import reasonsreason_2sharding集群必须开启journaling日志,先写入记录再导入操作,降低导入速度medium
MongoDB slower import reasonsreason_3无主键概念;为保证唯一性需自动生成唯一索引且导入与索引同时进行,从而降低导入速度medium
DolphinDB export methodcommandtimer saveText((select * from t), "/media/xllu/aa/device/device_readings_out.csv")high
MongoDB export methodcommandmongoexport -h localhost:40000 -d db_nopt -c device_readings -o /media/xllu/aa/device/ device_readings_mongo_out.csvhigh
Export benchmark result (small dataset, table described)relative_performanceDolphinDB导出速度每秒150万条、耗时20秒;MongoDB需16分钟;DolphinDB约为MongoDB的49倍medium
Disk usage measurementmethodDolphinDB读取所有列式数据文件大小;MongoDB通过db.stats()获得;两库均有一个备份;MongoDB存储大小包括索引大小high
Disk usage resultrelative_usage相同数据量下MongoDB磁盘占用约为DolphinDB的2~3倍medium
DolphinDB storage/compressiondetails列式存储;每列固定类型;使用LZ4压缩;针对symbol类型采用位图压缩提高压缩率medium
MongoDB storage/compressiondetails本次测试使用WiredTiger存储引擎与snappy压缩算法high
Index overhead on disk usagedetailsreadings对time与device_id索引大小1.1G;TAQ对date与symbol索引大小19G,导致MongoDB存储空间变大high
Query benchmark scopequery_types对比8种常用SQL查询:点查询、范围查询、聚合查询、精度查询(hour/minute)、关联查询、对比查询、抽样查询、经典查询high
Query timing methodologytime_unit_and_scope执行时间以毫秒为单位;指标为服务器执行时间,不包括结果传输与显示时间high
Small dataset query testio_and_cache_policy测试磁盘分区数据且时间包含磁盘IO;每次启动前sync并drop_caches;启动后执行样例一遍并记录时间high
DolphinDB small dataset handlescriptdp_readings = "dfs://db_range_dfs";device_readings=loadTable(dp_readings, `readings_pt)high
MongoDB small dataset setupdatabase_switch执行use device_pt切换至device_pt数据库high
Join query setup (small dataset)info_dataset_loaded_to_memoryMongoDB:db.device_info.find({})加载3,000条设备记录;DolphinDB:loadText(dp_info)加载3,000条设备记录high
Timing toolsdolphindb_vs_mongodbDolphinDB用timer计算查询耗时;MongoDB用explain()获取执行时间high
Range query observationpartition_field_included包含分区字段的范围查询中(如查询3、4),MongoDB可调用复合索引、DolphinDB可用分区加快;差距在4倍以内medium
Range query observationnon_partition_field包含未分区字段的查询(如查询5)中,MongoDB无法调用未分区字段索引需全字段搜索过滤;DolphinDB无需搜索不在where过滤条件中的字段;差距进一步扩大medium
Point query observationcase_1查询1在MongoDB有time+device_id索引下可快速找到时间点记录;DolphinDB按日期分区需选定分区再检索,因此DolphinDB慢于MongoDBmedium
Composite index rule (MongoDB)leftmost_prefix查询字段必须包括复合索引的首字段索引才起作用;仅按设备ID过滤不含time时不会调用复合索引medium
Join capability comparisonmongodb_limitationsMongoDB仅支持左外连接;无主键约束;表连接只能用内嵌文档方式且不利于计算与聚合medium
DolphinDB joinssupported_join_types支持等值连接、左连接、全连接、asof连接、窗口连接和交叉连接high
Sampling query comparisonnot_compared_reasonMongoDB可用$sample实现抽样但方式依赖集合大小、N与pipeline位置;DolphinDB不支持全表抽样仅支持分区字段抽样;实现差别大因此不做比较high
DolphinDB interpolationsupported_methods支持4种插值:ffill、bfill、lfill、nullFillhigh
MongoDB interpolationsupport没有内置函数实现插值查询high
MongoDB pivot/crosstabsupport由于文档/BSON无行列概念,无法实现选择两个维度将表字段整理为表格(pivot)功能;因此不做比较high
DolphinDB pivotsupport内置pivot by函数,可将指定内容按维度整理为表high
Large dataset query test setupdatabase_handlesDolphinDB:taq_pt_db="dfs://db_compound_dfs";taq_pt_col=loadTable(taq_pt_db, `readings_pt);MongoDB:use taq_pt_db切换数据库medium
Large dataset query result (narrative)relative_performance在大数据量且均分区情况下,DolphinDB仍比MongoDB快约5-20倍;点查询(日期+股票代码)差距不大且DolphinDB略慢;复杂过滤/排序/聚合差距约10-20倍medium
Overall conclusionstructured_time_series处理结构化时序数据时(导入导出、磁盘占用、查询速度),DolphinDB整体优于MongoDBmedium
Overall conclusionmongodb_advantageMongoDB在数据模型多变场景与处理非结构化数据方面更有优势medium
Appendix: DolphinDB config linksresourcescontroller.cfg、agent.cfg、cluster.cfg、cluster.nodes(GitHub Tutorials_CN benchmark路径)high
Appendix: MongoDB config linkresourcemaster_mongos.txt(路由服务器配置)high
Appendix: DolphinDB partition scriptsresourcesdolphindb_readings_partitioned.txt、dolphindb_taq_partitioned.txthigh
Appendix: MongoDB partition scriptsresourcesmongodb_readings_partitioned.txt、mongodb_taq_partitioned.txthigh
Appendix: MongoDB query scriptsresourcesmongodb_readings_query.txt、mongodb_taq_query.txthigh