MatrixGate 5.0 性能再升级,加载速度提升三倍!

news2024/11/23 7:30:31

前言

数据的加载速度在数据处理和分析领域一直是一个挑战,为应对这一挑战,YMatrix 数据库开发了 mxgate 高速数据加载工具。最近,随着 YMatrix 5.0 的 GA,新版 mxgate 与上一版本(4.8.1)相比,速度提升了一倍;而与 4.8.0 版本相比,加载速度又提升了三倍。

本文将对 mxgate 进行介绍,特别是关注 mxgate 的性能提升和应用场景。如果您需要一个强大的数据加载工具,那么 mxgate 绝对值得您关注。接下来,我们将就其性能提升和应用场景两方面进行详细讨论。

作者:数据库内核研发工程师 张伟晨

应用场景

MatrixGate 是 YMatrix 数据库的高速数据加载工具,能帮用户快速地将数据落盘到数据库。其主要特点包括:

  • 高速加载:mxgate 能够快速地将数据加载入库,并通过一定的压缩手段突破带宽限制达到极高的吞吐;

  • 多种数据格式:mxgate 支持多种数据格式,包括但不限于 text, csv, json, hana 等,用户可以根据需求选择合适的数据格式;

  • 多种数据源:mxgate 支持多种数据源,包括但不限于 http, kafka, stdin 等,用户可以根据需求选择合适的数据源。

性能提升

从 stdin 加载是 mxgate 的经典场景。虽然 mxgate 的数据加载速度在业内一直遥遥领先,罕逢对手,但是本着孜孜以求,追求极致的工匠精神,我们试图去探测数据加载的极限。经过多次测试,我们定位到数据写入和清洗模块消费能力是足够的,stdin加载场景的瓶颈在数据源模块上,因此在最近的两个版本(5.0与4.8.1)中,我们致力于加快 stdin 模式的入库速度,在以下两个方面做了多阶段优化:

2.1 并行切块

为方便数据清洗,得到一个合适的事务大小,我们会将数据流切块。同时,mxgate 的数据输入为文本模式,这意味着我们 parse 数据流时进行切块的耗时并不能忽视。

以往的版本中,我们同步地读取 stdin 数据流并 parse 出数据块,就像:

Read 和 parse 是互相阻塞的,但是我们服务器一般都具有多个核心,我们可以将 parse 过程独立出来,尽量不阻塞 read。

理想状态下的调度是这样的:

理论上而言,此时他的加载速度将逼近读取文件的速度,但事实是,我们在 parse 完一段内存之前,是无法复用这段内存的。这意味着无论我们 read 的 buffer 有多大,都需要在某个时间点等待这个 buffer 的尾部被 parse 完,那么他的调度需要变成:

我们可以调整切 buffer 以及切块的大小来找到最佳的 read 与 wait parse 的比例,调度的优化告一段落,但是:

为利用更多的服务器资源,我们 parse 完一个数据块后会将数据丢给其他 routine 并进行清洗。这意味着,如果不加处理,这段内存将会被不同的线程读写,所以我们需要把数据从 parse worker 里 copy 出去。

2.2 引用计数

在 parse 阶段中我们发现 copy 数据耗时严重,为减少上图中类举的 wait parse 的耗时,我们引入了一套简单实用的引用计数系统。

如图所示,我们引入了一个内存池,alloc 出一段较大的 buffer 后,把 stdin 的数据读进此 buffer,然后 parse 出多个 block, 并同步地增加对此 buffer 的引用,当此 block 落入数据库时解除引用。引用计数归零时复用这段 buffer,这样就能消除 parse 阶段 copy 数据的耗时,大大提升加载性能。

性能测试

3.1 测试环境

MatrixGate 主机一台(数据库 Master 也位于此主机):

Dell PowerEdge R740xd

CPU: 64 * 2.3Ghz

内存: 256G

出口带宽上限: 10000Mb/s (~1.2GB/s)

Segment 主机四台:

硬件规格同上,每个主机部署8个 Primary, 不部署 Mirror。集群共32个 Primary Segment。

进行对比的 mxgate 版本:

v4.8.0(MatrixGate v4.8.0 (git: HEAD 949a38cd))

v4.8.1(MatrixGate v4.8.1 (git: HEAD 6e0ba810))

v5.0.0(MatrixGate v5.0.0 (git: HEAD 53e21dfa))

3.2 准备数据

3.2.1 数据特征

  • 数据模拟典型时序场景,由(时间戳)+(设备标识字符串)+(多项混合类型指标)组成。

  • 指标字段取值随机性较高。

  • 数据文件大小 100G,约 10 亿行;平均每行数据宽度 100Byte 左右。

3.2.2 数据示例 

2022-12-10 00:00:00.006|truck_211656|North|Andy|G-2000|v_2.2|5000|300|98|10.65894|94.89509|617|0|311|0|25
2022-12-10 00:00:00.005|truck_887758|North|Andy|G-2000|v_0.5|5000|300|60|26.16685|17.95613|145|0|107|0|25
2022-12-10 00:00:00.007|truck_590862|North|Andy|G-2000|v_0.5|5000|300|39|75.12166|46.19676|800|0|60|0|25
2022-12-10 00:00:00.011|truck_327066|North|Andy|G-2000|v_2.7|5000|300|76|91.66036|65.04679|13|0|828|0|25
2022-12-10 00:00:00.004|truck_892711|North|Andy|G-2000|v_1.7|5000|300|79|70.40157|96.84146|340|0|679|0|25
2022-12-10 00:00:00.031|truck_217686|North|Andy|G-2000|v_0.8|5000|300|53|15.64526|39.67838|346|0|653|0|25
2022-12-10 00:00:00.003|truck_654048|North|Andy|G-2000|v_1.2|5000|300|63|21.35486|41.42145|426|0|964|0|25
2022-12-10 00:00:00.019|truck_284101|North|Andy|G-2000|v_0.4|5000|300|36|33.34589|63.67803|203|0|356|0|25
2022-12-10 00:00:00.017|truck_634570|North|Andy|G-2000|v_1.9|5000|300|63|20.75878|50.45044|132|0|670|0|25
2022-12-10 00:00:00.010|truck_119123|North|Andy|G-2000|v_2.2|5000|300|59|11.14008|43.24966|804|0|529|0|25

3.2.3 表设计

CREATE TABLE readings(
  ts timestamp not null,
  name varchar(25),
  fleet varchar(25),
  driver varchar(25),
  model varchar(25),
  device_version varchar(25),
  load_capacity float4,
  fuel_capacity float4,
  nominal_fuel_consumption float4,
  latitude float4,
  longitude float4,
  elevation float4,
  velocity float4,
  heading float4,
  grade float4,
  fuel_consumption float4
)
using ao_row
with (compresstype='zstd', compresslevel=1)
Distributed by (name);

3.3 测试过程

3.3.1 测试 mxgate 4.8.0 加载性能

启动 mxgate 开始加载 /data/readings_

new.csv 中 100G 数据

mxgate \
    --source stdin \
    --db-master-port 5434\
    --time-format raw \
    --target public.readings \
    --delimiter '|'  < /data/readings_new.csv

测试耗时: 2 分钟 53 秒

3.3.2 测试 mxgate 4.8.1 加载性能

启动 mxgate 开始加载 /data/readings_

new.csv 中 100G 数据

mxgate \
    --source stdin \
    --db-master-port 5434\
    --time-format raw \
    --target public.readings \
    --delimiter '|'  < /data/readings_new.csv

测试耗时: 1 分钟 55 秒

3.3.3 测试 mxgate 5.0 加载性能

启动 mxgate 开始加载 /data/readings_

new.csv 中 100G 数据

mxgate \
    --source stdin \
    --db-master-port 5434\
    --time-format raw \
    --target public.readings \
    --delimiter '|'  < /data/readings_new.csv

测试耗时: 57 秒

3.3 测试结果

经过两个版本的优化, mxgate 加载速度相较于 4.8.0 版本又提升了3倍。

结论和展望

我们的努力已经产生了显著的成果。新版本的数据加载工具速度不断提升,意味着你可以更快地处理更大的数据集,从而提高工作效率和生产力。

我们相信,这次升级将会显著提高你的数据处理流程,并为你的工作带来更多的价值。

在接下来的版本中,我们除了会继续尝试提升性能,还会针对多表插入做一些优化,使mxgate在上百个动态的低频表的插入场景下占用尽量少的连接。敬请期待吧!

最后,关于如何对 mxgate 进行使用,大家可以通过 https://www.ymatrix.cn/doc/5.0/datainput/matrixgate 进行详细了解。


本文为 YMatrix 原创内容,未经允许不得转载。

欲了解更多超融合时序数据库相关信息,请访问 YMatrix 超融合数据库” 官方网站

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/530522.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 虚拟机 磁盘扩容

概述 在单台虚拟机上部署了过多服务&#xff0c;导致磁盘使用过度达到98%。 现在扩容提高磁盘容量&#xff0c;增加10G。 现象 df -h df -ih du -s具体步骤 VMware 扩容 关闭虚拟机的情况下执行&#xff0c;类似于生产环境下需要关闭服务器&#xff0c;从而添加硬盘等相关操作…

Liunx基础命令 - rm删除命令

rm命令 – 删除文件或目录 rm命令来自英文单词“remove”的缩写&#xff0c;中文译为“消除”&#xff0c;其功能是用于删除文件或目录&#xff0c;一次可以删除多个文件&#xff0c;或递归删除目录及其内的所有子文件。 rm也是一个很危险的命令&#xff0c;使用的时候要特别…

从BinDiff到0day 在IE中利用CVE-2019-1208

前言 如上所述&#xff0c;CVE-2019-1208是UAF漏洞&#xff0c;这类安全漏洞可以破坏有效数据、引发进程crash、并且可以精心利用最终导致任意代码执行。而对于本文介绍的CVE-2019-1208而言&#xff0c;成功利用此漏洞的攻击者可以获得系统当前用户权限。如果当前用户具有admi…

理解Java虚拟机——JVM

目录 一、初识JVM 二、JVM执行流程 三、内存区域划分&#xff08;JVM运行时数据区&#xff09; 3.1 本地方法栈&#xff08;线程私有&#xff09; 3.2 程序计数器&#xff08;线程私有&#xff0c;无并发问题&#xff09; 3.3 JVM虚拟机栈&#xff08;线程私有&#xff0…

最全的分布式事务详情,它来啰~

我们首先得理解什么是分布式事务呢&#xff1f;分布式事务是指在分布式系统中&#xff0c;涉及多个计算机或服务器的操作序列&#xff0c;这些操作需要满足一致性和可靠性的要求。每个操作要么全部成功执行&#xff0c;要么全部回滚&#xff0c;以保持数据的一致性和完整性。 …

嵌入式通信协议【Modbus】Modbus TCP的帧格式

一、请求帧格式 Client request:例&#xff1a; 19 B2 00 00 00 06 06 03 00 27 00 02 1、头字节 上面是modbus客户端发出的报文内容&#xff0c;为modbus tcp/ip协议格式&#xff0c;其前面的六个字节为头字节( header handle)&#xff1b; 19 B2 00 00 00 06 19 B2 00 00…

3D点云之语义分割(相关官方示例介绍)

之前在博客中提到&#xff0c;会考虑用深度学习来对3D点云进行处理&#xff0c;接下来迈出脚步&#xff0c;先整几个例子来熟悉它。例子原型来源于官网&#xff0c;博主在其基础上做了一些代码修改。 一. 例子参考 1. Keras中的资源 Code examples 2.openvinotoolkit open_…

20230515在亚马逊Amazon扣费之后的申诉

20230515在亚马逊Amazon扣费之后的申诉 2023/5/15 22:56 缘起&#xff1a;使用Amazon的12个月的免费存储桶&#xff0c;然后调用S3功能翻译&#xff01; 但是&#xff0c;被扣费了&#xff01; 由于绑定的信用卡是工行的&#xff0c;要求和亚马逊解除绑定&#xff0c;工行给了一…

第十章创建模式—外观模式

文章目录 外观模式解决的问题概念结构 案例优缺点使用场景Tomcat 源码 结构型模式描述如何将类或对象按某种布局组成更大的结构&#xff0c;有以下两种&#xff1a; 类结构型模式&#xff1a;采用继承机制来组织接口和类。对象结构型模式&#xff1a;釆用组合或聚合来组合对象。…

GEE:无监督聚类算法(wekaKMeans)

作者:CSDN @ _养乐多_ 本文将介绍如何使用 Google Earth Engine(GEE)进行卫星图像 K-means 聚类分析的基本步骤,并提供相应的示例代码。 结果如下图所示, 文章目录 一、K-means 原理二、代码详解三、代码链接一、K-means 原理 二、代码详解 var roi = table; Map.cent…

【前后端异常】axios post请求 返回415错误状态码的解决方法

错误描述&#xff1a; 进行有文件的表单提交时出现415错误&#xff0c;以前没遇到过记录一下 415错误的解释是说&#xff0c;服务器无法处理请求附带的媒体格式。以下是HTTP的状态码关于415返回码的说明&#xff1a; 415Unsupported Media Type服务器无法处理请求附带的媒体格…

awk的应用

awk的基本应用 一、awk的工作原理二、实际应用按行输出文本按字段输出文本时间的使用查看各个功能 一、awk的工作原理 awk与sed和grep共成为文本三剑客&#xff0c;都是针对文本非常实用的工具。 awk的工作原理&#xff1a; 遂行读取文本&#xff0c;默认以空格或者tab&#x…

NodeJs模块化之上半部分

模块化 什么是模块化 模块化是指解决一个复杂问题时&#xff0c;自顶向下 逐层把系统 拆解 成若干 模块 的过程。 对于整个系统来说&#xff0c;模块是可组合、分解和更换的单元。 编程领域中的模块化 编程领域中的模块化&#xff0c;就是遵守固定的规则&#xff0c;把一个…

( 位运算 ) 231. 2 的幂 / 342. 4的幂 ——【Leetcode每日一题】

❓题目一 231. 2 的幂 难度&#xff1a;简单 给你一个整数 n&#xff0c;请你判断该整数是否是 2 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在一个整数 x 使得 n 2 x n 2^x n2x &#xff0c;则认为 n 是 2 的幂次方。 …

10款必装IDEA开发神器

那些IDEA开发神器 1.Material Theme Ul 安装步骤 打开IDEA,点击File -> Settings。在Settings窗口中&#xff0c;选择Appearance & Behavior -> Appearance。在Appearance选项卡下&#xff0c;找到Theme并选择Material Theme Ul。点击Apply按钮&#xff0c;然后点…

Liunx基础命令 - mv剪切命令

mv命令 – 移动或改名文件 mv命令来自英文单词”move“的缩写&#xff0c;中文译为”移动“&#xff0c;其功能与英文含义相同&#xff0c;能够用于对文件进行剪切和重命名操作。这是一个被高频使用的文件管理命令&#xff0c;我们需要留意它与复制命令的区别。cp命令是用于文…

C++标准库中的锁

C标准库中的锁 std::mutex.lock是我们在C中比较常见的锁&#xff0c;我们使用std::mutex.lock方法时&#xff0c;同时需要考虑何时使用std:mutex.unlock方法去解锁。如果在复杂的多线程情况下&#xff0c;加锁、解锁的时机很难把握&#xff0c;也不好实现。 RAII原则是所有的…

c++中this指针的使用

首先&#xff0c;我们都知道类的成员函数可以访问类的数据&#xff0c;那么成员函数如何知道哪个对象的数据成员要被操作呢&#xff1f; 原因在于每个对象都拥有一个指针&#xff1a;this指针&#xff0c;每一个对象都能通过this指针来访问自己的地址。 this 指针是所有成员函…

NOSQL——redis的安装,配置与简单操作

1.缓存的相关知识 1.1 缓存的概念 缓存是为了调节速度不一致的两个或多个不同的物质的速度&#xff0c;在中间对速度较慢的一方起到加速作用&#xff0c;比如CPU的一级、二级缓存是保存了CPU最近经常访问的数据&#xff0c;内存是保存CPU经常访问硬盘的数据&#xff0c;而且硬…

Git简易教程

安装与配置 教程链接 代码上传到远程仓库 workspace&#xff1a;当前所在的工作目录 stagingarea&#xff1a;修改暂存区 loacl repository&#xff1a;本地仓库 remote respository &#xff1a;远程仓库 我们首先在workspace目录编写代码、修改文件&#xff0c;然后需要使用…