前言

1. 目标

时序数据库黑马MatrixDB发布了评测文章“时序数据库插入性能评测:MatrixDB是InfluxDB的78倍”(https://ymatrix.cn/blog/20210524-MatrixDB-insertperformance),这个性能可以说亮瞎眼,毕竟InfluxDB是行业排名第一 。所以心里很犯嘀咕,到底有没有猫腻,所幸文章包含了详细的测试步骤链接,包括各种参数配置。于是根据文章步骤进行了复测,确实发现了一些小问题。完整步骤和结果请见下文。

MatrixDB是一款基于PostgreSQL 12的超融合时序数据库,目前最新版本是4.0,主打亮点是一套数据库顶多套,大幅精简技术栈,提升开发运维效率,根据官方描述MatrixDB = PostgreSQL + Greenplum + InfluxDB + PostGIS。

本次主要测试时序数据加载性能,下一次将会对各种场景下的查询性能进行评测,敬请关注PostgreSQL中文社区网站和公众号。

2. 生成测评数据

由于时间有限,本文并没有验证MatrixDB文章中的所有场景,而是选择了前两个场景:

• 场景1:10万设备数,每个设备1个指标,数据采集间隔60秒。

• 场景2:10万设备数,每个设备分别测试10、50、100、400个指标,数据采集间隔60秒。

数据生成及加载使用MatrixDB提供的工具,该工具基于时序领域常用的一个国际基准测评框架tsbs。

下载链接为:https://pan.baidu.com/s/1BFYcQR3DzqVLiy8ymXu9eg(提取码:8cba)

2.1 生成场景1数据

场景1 : 10万设备,每个设备1个指标,数据采集间隔60秒。

Fortrantsbs_generate_data --format="matrixdb" --use-case="massiveiot" --scale="100000" --log-interval=60s --column-data-type=simple --point-type=int --columns-per-row=1 > /data/dataload/1c/cpu_1_10w.csv

CENTER_PostgreSQL_Community

2.2 生成场景2数据

场景2:10万设备,分别生成10、50、100、400列int指标数据,数据采集间隔60秒。

Shell
tsbs_generate_data --format="matrixdb" --use-case="massiveiot" --scale="100000" --log-interval=60s --column-data-type=simple --point-type=int --columns-per-row=10 > /data/dataload/10w/cpu_10_10w.csv

tsbs_generate_data --format="matrixdb" --use-case="massiveiot" --scale="100000" --log-interval=60s --column-data-type=simple --point-type=int --columns-per-row=50 > /data/dataload/10w/cpu_50_10w.csv

tsbs_generate_data --format="matrixdb" --use-case="massiveiot" --scale="100000" --log-interval=60s --column-data-type=simple --point-type=int --columns-per-row=100 > /data/dataload/10w/cpu_100_10w.csv 

tsbs_generate_data --format="matrixdb" --use-case="massiveiot" --scale="100000" --log-interval=60s --column-data-type=simple --point-type=int --columns-per-row=400 > /data/dataload/10w/cpu_400_10w.csv

生成的数据量

CENTER_PostgreSQL_Community

3. 测试环境

3.1 软件版本

CENTER_PostgreSQL_Community

3.2 参数设置

CENTER_PostgreSQL_Community

4. 场景1测评结果

4.1 MatrixDB数据加载语法

Apache
cat /data/dataload/10w/cpu_50_10w.csv| mxgate --source stdin --db-database postgres --db-master-host sdw4 --db-master-port 10000 --db-user postgres --time-format unix-nano --target cpu_50_10w_heap --parallel 256 > /data/dataload/10w/cpu_50_10w_heap_hi.log

4.2 MatrixDB数据加载性能

CENTER_PostgreSQL_Community

4.3 InfluxDB数据加载语法

1列int型,10万

数据按照InfluxDB协议从MatrixDB格式导出,避免加载时间过长,只导出5千万条数据。

Shell
\copy (select 'cpu_1_10w_heap,tag_id='||tag_id||' pc_1='||pc_1||' '||extract(epoch from ts) from cpu_1_10w_heap limit 50000000) to '/data/dataload/influx10w/InfluxDB_cpu_1_10w.csv';

Plain Text
cat InfluxDB_cpu_1_10w.csv | tsbs_load_influx --db-name=benchmark --workers=6 --batch-size=10000 --reporting-period=10s --urls=http://sdw4:8086 --backoff=1s

4.4 InfluxDB数据加载性能

调整worker数和batch_size数。取最优值,得出如下加载性能数据。数值代表行每秒,值越高代表性能越好。取worker等于24,batch_size等于10000的情况下,性能达到最高值1,427,398行每秒。

CENTER_PostgreSQL_Community

4.5 MatrixDB与InfluxDB 1列数据加载性能对比

CENTER_PostgreSQL_Community

从图中可以看出

• InfluxDB加载速度1,427,398行每秒

• MatrixDB加载速度为3,262,840

4.6 MatrixDB与InfluxDB写入速度比值

CENTER_PostgreSQL_Community

1列10万设备数,MatrixDB加载速度比InfluxDB快2.2倍。

5. 场景2测评结果

5.1 MatrixDB 10万设备数不同列数据加载语法

Shell
psql -c "select f('cpu_10_10w_heap','10','heap_row');" 
psql -c "create index on cpu_10_10w_heap (tag_id, ts);create index on cpu_10_10w_heap(ts);" 
cat /data/dataload/10w/cpu_10_10w.csv| mxgate --source stdin --db-database postgres --db-master-host sdw4 --db-master-port 10000 --db-user postgres --time-format unix-nano --target cpu_10_10w_heap --parallel 256 > /data/dataload/10w/cpu_10_10w_heap_hi.log

5.2 MatrixDB 10万设备数不同列数据加载性能

数据加载性能为行每秒,值越高代表加载速度越快。

CENTER_PostgreSQL_Community

5.3 InfluxDB数据生成及加载语法

InfluxDB 10列、50列,只写入1千万行,InfluxDB 100列,只写入100万行,400列,只写入10万行。

10列_10万

Shell
\copy (select 'cpu_10_10w_heap,tag_id='||tag_id||' c1='||c1||',c2='||c2||',c3='||c3||',c4='||c4||',c5='||c5||',c6='||c6||',c7='||c7||',c8='||c8||',c9='||c9||',c10='||c10 ||' '||extract(epoch from ts) from cpu_10_10w_heap limit 10000000) to '/data1/dataload/influx10w/InfluxDB_cpu_10_10w.csv';

数据加载语法

Shell
cat InfluxDB_cpu_10_10w.csv | tsbs_load_influx --db-name=benchmark --workers=64 --batch-size=10 --reporting-period=10s --urls=http://sdw4:8086 --backoff=1s

50列_10万

Shell
\copy (select 'cpu_50_10w_heap,tag_id='||tag_id||' c1='||c1||',c2='||c2||',c3='||c3||',c4='||c4||',c5='||c5||',c6='||c6||',c7='||c7||',c8='||c8||',c9='||c9||',c10='||c10||',c11='||c11||',c12='||c12||',c13='||c13||',c14='||c14||',c15='||c15||',c17='||c17||',c18='||c18||',c19='||c19||',c20='||c20||',c21='||c21||',c22='||c22||',c23='||c23||',c24='||c24||',c25='||c25||',c27='||c27||',c28='||c28||',c29='||c29||',c30='||c30||',c31='||c31||',c32='||c32||',c33='||c33||',c34='||c34||',c35='||c35||',c37='||c37||',c38='||c38||',c39='||c39||',c40='||c40||',c41='||c41||',c42='||c42||',c43='||c43||',c44='||c44||',c45='||c45||',c47='||c47||',c48='||c48||',c49='||c49||',c50='||c50||' '||extract(epoch from ts) from cpu_50_10w_heap limit 10000000) to '/data1/dataload/influx10w/InfluxDB_cpu_50_10w.csv';

数据加载语法

Shell
cat InfluxDB_cpu_50_10w.csv | tsbs_load_influx --db-name=benchmark --workers=64 --batch-size=10 --reporting-period=10s --urls=http://sdw4:8086 --backoff=1s

100列_10万

Shell
\copy (select 'cpu_100_10w_heap,tag_id='||tag_id||' c1='||c1||',c2='||c2||',c3='||c3||',c4='||c4||',c5='||c5||',c6='||c6||',c7='||c7||',c8='||c8||',c9='||c9||',c10='||c10||',c11='||c11||',c12='||c12||',c13='||c13||',c14='||c14||',c15='||c15||',c17='||c17||',c18='||c18||',c19='||c19||',c20='||c20||',c21='||c21||',c22='||c22||',c23='||c23||',c24='||c24||',c25='||c25||',c27='||c27||',c28='||c28||',c29='||c29||',c30='||c30||',c31='||c31||',c32='||c32||',c33='||c33||',c34='||c34||',c35='||c35||',c37='||c37||',c38='||c38||',c39='||c39||',c40='||c40||',c41='||c41||',c42='||c42||',c43='||c43||',c44='||c44||',c45='||c45||',c47='||c47||',c48='||c48||',c49='||c49||',c50='||c50||',c51='||c51||',c52='||c52||',c53='||c53||',c54='||c54||',c55='||c55||',c57='||c57||',c58='||c58||',c59='||c59||',c60='||c60||',c61='||c61||',c62='||c62||',c63='||c63||',c64='||c64||',c65='||c65||',c67='||c67||',c68='||c68||',c69='||c69||',c70='||c70||',c71='||c71||',c72='||c72||',c73='||c73||',c74='||c74||',c75='||c75||',c77='||c77||',c78='||c78||',c79='||c79||',c80='||c80||',c81='||c81||',c82='||c82||',c83='||c83||',c84='||c84||',c85='||c85||',c87='||c87||',c88='||c88||',c89='||c89||',c90='||c90||',c91='||c91||',c92='||c92||',c93='||c93||',c94='||c94||',c95='||c95||',c97='||c97||',c98='||c98||',c99='||c99||',c100='||c100||' '||extract(epoch from ts) from cpu_100_10w_heap limit 1000000) to '/data1/dataload/influx10w/InfluxDB_cpu_100_10w.csv';

数据加载语法

Shell
cat InfluxDB_cpu_100_10w.csv | tsbs_load_influx --db-name=benchmark --workers=64 --batch-size=10 --reporting-period=10s --urls=http://sdw4:8086 --backoff=1s

400列_10万

Shell
\copy (select 'cpu_400_10w_heap,tag_id='||tag_id||' c1='||c1||',c2='||c2||',c3='||c3||',c4='||c4||',c5='||c5||',c6='||c6||',c7='||c7||',c8='||c8||',c9='||c9||',c10='||c10||',c11='||c11||',c12='||c12||',c13='||c13||',c14='||c14||',c15='||c15||',c16='||c16||',c17='||c17||',c18='||c18||',c19='||c19||',c20='||c20||',c21='||c21||',c22='||c22||',c23='||c23||',c24='||c24||',c25='||c25||',c26='||c26||',c27='||c27||',c28='||c28||',c29='||c29||',c30='||c30||',c31='||c31||',c32='||c32||',c33='||c33||',c34='||c34||',c35='||c35||',c36='||c36||',c37='||c37||',c38='||c38||',c39='||c39||',c40='||c40||',c41='||c41||',c42='||c42||',c43='||c43||',c44='||c44||',c45='||c45||',c46='||c46||',c47='||c47||',c48='||c48||',c49='||c49||',c50='||c50||',c51='||c51||',c52='||c52||',c53='||c53||',c54='||c54||',c55='||c55||',c56='||c56||',c57='||c57||',c58='||c58||',c59='||c59||',c60='||c60||',c61='||c61||',c62='||c62||',c63='||c63||',c64='||c64||',c65='||c65||',c66='||c66||',c67='||c67||',c68='||c68||',c69='||c69||',c70='||c70||',c71='||c71||',c72='||c72||',c73='||c73||',c74='||c74||',c75='||c75||',c76='||c76||',c77='||c77||',c78='||c78||',c79='||c79||',c80='||c80||',c81='||c81||',c82='||c82||',c83='||c83||',c84='||c84||',c85='||c85||',c86='||c86||',c87='||c87||',c88='||c88||',c89='||c89||',c90='||c90||',c91='||c91||',c92='||c92||',c93='||c93||',c94='||c94||',c95='||c95||',c96='||c96||',c97='||c97||',c98='||c98||',c99='||c99||',c100='||c100||',c101='||c101||',c102='||c102||',c103='||c103||',c104='||c104||',c105='||c105||',c106='||c106||',c107='||c107||',c108='||c108||',c109='||c109||',c110='||c110||',c111='||c111||',c112='||c112||',c113='||c113||',c114='||c114||',c115='||c115||',c116='||c116||',c117='||c117||',c118='||c118||',c119='||c119||',c120='||c120||',c121='||c121||',c122='||c122||',c123='||c123||',c124='||c124||',c125='||c125||',c126='||c126||',c127='||c127||',c128='||c128||',c129='||c129||',c130='||c130||',c131='||c131||',c132='||c132||',c133='||c133||',c134='||c134||',c135='||c135||',c136='||c136||',c137='||c137||',c138='||c138||',c139='||c139||',c140='||c140||',c141='||c141||',c142='||c142||',c143='||c143||',c144='||c144||',c145='||c145||',c146='||c146||',c147='||c147||',c148='||c148||',c149='||c149||',c150='||c150||',c151='||c151||',c152='||c152||',c153='||c153||',c154='||c154||',c155='||c155||',c156='||c156||',c157='||c157||',c158='||c158||',c159='||c159||',c160='||c160||',c161='||c161||',c162='||c162||',c163='||c163||',c164='||c164||',c165='||c165||',c166='||c166||',c167='||c167||',c168='||c168||',c169='||c169||',c170='||c170||',c171='||c171||',c172='||c172||',c173='||c173||',c174='||c174||',c175='||c175||',c176='||c176||',c177='||c177||',c178='||c178||',c179='||c179||',c180='||c180||',c181='||c181||',c182='||c182||',c183='||c183||',c184='||c184||',c185='||c185||',c186='||c186||',c187='||c187||',c188='||c188||',c189='||c189||',c190='||c190||',c191='||c191||',c192='||c192||',c193='||c193||',c194='||c194||',c195='||c195||',c196='||c196||',c197='||c197||',c198='||c198||',c199='||c199||',c200='||c200||',c201='||c201||',c202='||c202||',c203='||c203||',c204='||c204||',c205='||c205||',c206='||c206||',c207='||c207||',c208='||c208||',c209='||c209||',c210='||c210||',c211='||c211||',c212='||c212||',c213='||c213||',c214='||c214||',c215='||c215||',c216='||c216||',c217='||c217||',c218='||c218||',c219='||c219||',c220='||c220||',c221='||c221||',c222='||c222||',c223='||c223||',c224='||c224||',c225='||c225||',c226='||c226||',c227='||c227||',c228='||c228||',c229='||c229||',c230='||c230||',c231='||c231||',c232='||c232||',c233='||c233||',c234='||c234||',c235='||c235||',c236='||c236||',c237='||c237||',c238='||c238||',c239='||c239||',c240='||c240||',c241='||c241||',c242='||c242||',c243='||c243||',c244='||c244||',c245='||c245||',c246='||c246||',c247='||c247||',c248='||c248||',c249='||c249||',c250='||c250||',c251='||c251||',c252='||c252||',c253='||c253||',c254='||c254||',c255='||c255||',c256='||c256||',c257='||c257||',c258='||c258||',c259='||c259||',c260='||c260||',c261='||c261||',c262='||c262||',c263='||c263||',c264='||c264||',c265='||c265||',c266='||c266||',c267='||c267||',c268='||c268||',c269='||c269||',c270='||c270||',c271='||c271||',c272='||c272||',c273='||c273||',c274='||c274||',c275='||c275||',c276='||c276||',c277='||c277||',c278='||c278||',c279='||c279||',c280='||c280||',c281='||c281||',c282='||c282||',c283='||c283||',c284='||c284||',c285='||c285||',c286='||c286||',c287='||c287||',c288='||c288||',c289='||c289||',c290='||c290||',c291='||c291||',c292='||c292||',c293='||c293||',c294='||c294||',c295='||c295||',c296='||c296||',c297='||c297||',c298='||c298||',c299='||c299||',c300='||c300||',c301='||c301||',c302='||c302||',c303='||c303||',c304='||c304||',c305='||c305||',c306='||c306||',c307='||c307||',c308='||c308||',c309='||c309||',c310='||c310||',c311='||c311||',c312='||c312||',c313='||c313||',c314='||c314||',c315='||c315||',c316='||c316||',c317='||c317||',c318='||c318||',c319='||c319||',c320='||c320||',c321='||c321||',c322='||c322||',c323='||c323||',c324='||c324||',c325='||c325||',c326='||c326||',c327='||c327||',c328='||c328||',c329='||c329||',c330='||c330||',c331='||c331||',c332='||c332||',c333='||c333||',c334='||c334||',c335='||c335||',c336='||c336||',c337='||c337||',c338='||c338||',c339='||c339||',c340='||c340||',c341='||c341||',c342='||c342||',c343='||c343||',c344='||c344||',c345='||c345||',c346='||c346||',c347='||c347||',c348='||c348||',c349='||c349||',c350='||c350||',c351='||c351||',c352='||c352||',c353='||c353||',c354='||c354||',c355='||c355||',c356='||c356||',c357='||c357||',c358='||c358||',c359='||c359||',c360='||c360||',c361='||c361||',c362='||c362||',c363='||c363||',c364='||c364||',c365='||c365||',c366='||c366||',c367='||c367||',c368='||c368||',c369='||c369||',c370='||c370||',c371='||c371||',c372='||c372||',c373='||c373||',c374='||c374||',c375='||c375||',c376='||c376||',c377='||c377||',c378='||c378||',c379='||c379||',c380='||c380||',c381='||c381||',c382='||c382||',c383='||c383||',c384='||c384||',c385='||c385||',c386='||c386||',c387='||c387||',c388='||c388||',c389='||c389||',c390='||c390||',c391='||c391||',c392='||c392||',c393='||c393||',c394='||c394||',c395='||c395||',c396='||c396||',c397='||c397||',c398='||c398||',c399='||c399||',c400='||c400||' '||extract(epoch from ts) from cpu_400_10w_heap limit 100000) to '/data1/dataload/influx10w/InfluxDB_cpu_400_10w.csv';

数据加载语法

Shell
cat InfluxDB_cpu_400_10w.csv | tsbs_load_influx --db-name=benchmark --workers=64 --batch-size=10 --reporting-period=10s --urls=http://sdw4:8086 --backoff=1s

5.4 InfluxDB 10万设备数不同列数据加载性能

调整worker和batch_size,取不同列数据加载性能的最高值,数值代表行每秒,值越高代表加载速度越快。

CENTER_PostgreSQL_Community

5.5 MatrixDB与InfluxDB 10列数据加载性能对比

CENTER_PostgreSQL_Community

5.6 MatrixDB与InfluxDB写入速度比值

CENTER_PostgreSQL_Community

从数据中可以得出

• 10列10万设备的情况下,实际测试MatrixDB比InfluxDB快6倍。

• 50列10万设备的情况下,实际测试MatrixDB比InfluxDB快31.2倍。

• 100列10万设备的情况下,实际测试MatrixDB比InfluxDB快57.4倍。

• 400列10万设备的情况下,实际测试MatrixDB比InfluxDB快48.6倍。

6. 结论

• 在1列的场景下,MatrixDB比InfluxDB快2.2倍

• 在10列数的场景下,MatrixDB比InfluxDB快6倍

• 在50列数的场景下,MatrixDB比InfluxDB快31.2倍

• 在100列数的场景下,MatrixDB比InfluxDB快57.4倍

• 在400列数的场景下,MatrixDB比InfluxDB快48.6倍

可见,InfluxDB适合于窄列的小规模场景,在宽列的大规模场景下InfluxDB性能下降明显。

本次实测数据和MatrixDB官方数据有些差距,特别是1列场景下差距明显,官方数据声称比InfluxDB快12倍,而本次实测是快2.2倍,主要原因是MatrixDB 官方测评统一用了batch_size=10这个参数,这个设置对50列、100列、400列比较合理,但是在1列的情况下大幅降低了InfluxDB的性能。

虽然MatrixDB性能没有达到官方声称的比InfluxDB快78倍,但确实达到48倍,仍然非常强悍,是国产数据库的一个新亮点,值得期待。

7. 参考

• MatrixDB官方测评文章:https://ymatrix.cn/blog/20210524-MatrixDB-insertperformance

PostgreSQL中文社区欢迎广大技术人员投稿

投稿邮箱:press@postgres.cn

CENTER_PostgreSQL_Community

请在登录后发表评论,否则无法保存。
1楼 xiaowu
2024-04-20 21:41:36+08

个人成长报告:https://www.nanss.com/xuexi/299.html 邀请函模板:https://www.nanss.com/shenghuo/408.html 祝顾客中秋节快乐短句:https://www.nanss.com/shenghuo/102.html 阳宅风水:https://www.nanss.com/jiaju/81.html 敬酒词:https://www.nanss.com/shenghuo/435.html 好听的昵称:https://www.nanss.com/mingcheng/219.html 微信网名:https://www.nanss.com/mingcheng/136.html 微信昵称大全:https://www.nanss.com/mingcheng/357.html 人生格言:https://www.nanss.com/yulu/269.html 微信群名:https://www.nanss.com/mingcheng/306.html 微信名字女生简单气质:https://www.nanss.com/mingcheng/257.html 两个字的网名:https://www.nanss.com/mingcheng/182.html 离职申请书:https://www.nanss.com/gongzuo/138.html 好听的抖音名字昵称:https://www.nanss.com/mingcheng/339.html 志愿服务活动心得体会:https://www.nanss.com/gongzuo/469.html 独一无二的二字昵称:https://www.nanss.com/mingcheng/215.html 贫困申请书:https://www.nanss.com/gongzuo/343.html 说课的基本步骤:https://www.nanss.com/gongzuo/440.html 实习日记:https://www.nanss.com/gongzuo/279.html 简短有意义的英文id:https://www.nanss.com/mingcheng/364.html 网名女生霸气冷酷好听:https://www.nanss.com/mingcheng/434.html 情侣名字超甜一对:https://www.nanss.com/mingcheng/184.html 摩羯座日期:https://www.nanss.com/xingzuo/75.html 快手名字大全:https://www.nanss.com/mingcheng/324.html 伤感让人看了心酸想哭的网名:https://www.nanss.com/mingcheng/335.html 被赞美时幽默回复:https://www.nanss.com/shenghuo/262.html 出纳工作总结:https://www.nanss.com/gongzuo/46.html 游戏网名:https://www.nanss.com/mingcheng/152.html 听课记录:https://www.nanss.com/gongzuo/303.html 文案句子:https://www.nanss.com/wenan/439.html

© 2010 PostgreSQL中文社区