GreatSQL 并行Load Data加快数据导入

news/2024/9/18 3:45:58/文章来源:https://www.cnblogs.com/greatsql/p/18358294

GreatSQL 并行Load Data加快数据导入

数据库信息

数据库版本:GreatSQL 8.0.32-25

Clickhouse表需要导入到 GreatSQL 中,表数据量庞大所以选用导出CSV的方式。

测试数据复现操作

load data

MySQL load data 语句能快速将一个文本文件的内容导入到对应的数据库表中(一般文本的一行对应表的一条记录)。
数据库应用程序开发中,涉及大批量数据需要插入时,使用 load data 语句的效率比一般的 insert 语句的高很多
可以看成select … into outfile语句的反操作,select … into outfile将数据库表中的数据导出保存到一个文件中。

load data 语法

LOAD DATA[LOW_PRIORITY | CONCURRENT] [LOCAL]INFILE 'file_name'[REPLACE | IGNORE]INTO TABLE tbl_name[PARTITION (partition_name [, partition_name] ...)][CHARACTER SET charset_name][{FIELDS | COLUMNS}[TERMINATED BY 'string'][[OPTIONALLY] ENCLOSED BY 'char'][ESCAPED BY 'char']][LINES[STARTING BY 'string'][TERMINATED BY 'string']][IGNORE number {LINES | ROWS}][(col_name_or_user_var[, col_name_or_user_var] ...)][SET col_name={expr | DEFAULT}[, col_name={expr | DEFAULT}] ...]

GreatSQL开启load data并行的方法

#并行load data默认关闭,需要手动开启show variables like '%gdb_parallel_load%';
+------------------------------+---------+
| Variable_name                | Value   |
+------------------------------+---------+
| gdb_parallel_load            | OFF     |
| gdb_parallel_load_chunk_size | 4194304 |
| gdb_parallel_load_workers    | 6       |
+------------------------------+---------+
3 rows in set (0.03 sec)

方法一:设置session变量

连接数据库,执行set session gdb_parallel_load=on
如需调整文件块大小或线程数,执行 SET SESSION gdb_parallel_load_chunk_size=65536SET SESSION gdb_parallel_load_workers=16
使用原load data语句执行导入。

方法二:load语句增加hint

LOAD /*+ SET_VAR(gdb_parallel_load=ON) SET_VAR(gdb_parallel_load_chunk_size=65536) SET_VAR(gdb_parallel_load_workers=16) */ DATA INFILE '$MYSQLTEST_VARDIR/parallel_load_outfile.txt' INTO TABLE t1;
  • gdb_parallel_load 是否开启并行
  • gdb_parallel_load_chunk_size 文件块大小
  • gdb_parallel_load_workers 开启多少个线程同时导入

开启gdb_parallel_load=ON。默认配置是gdb_parallel_load_chunk_size=4194304,gdb_parallel_load_workers=6

测试数据创建

#Clickhouse制造测试数据
#建表并随机生成1000000行数据插入
CREATE TABLE test
ENGINE = MergeTree
ORDER BY user_id AS
SELECTnumber,concat('user_', toString(number)) AS user_id,concat('email_', toString(number), '@example.com') AS email,rand() AS random_value
FROM numbers(1, 1000000); 
Query id: a707f30c-180f-4453-bc18-b8e86ee46059
Ok.
0 rows in set. Elapsed: 0.575 sec. Processed 1.00 million rows, 8.00 MB (1.74 million rows/s., 13.92 MB/s.)
Peak memory usage: 157.29 MiB.
#查看表数据库和大小
SELECTtable AS `表名`,sum(rows) AS `总行数`,formatReadableSize(sum(data_uncompressed_bytes)) AS `原始大小`,formatReadableSize(sum(data_compressed_bytes)) AS `压缩大小`,round((sum(data_compressed_bytes) / sum(data_uncompressed_bytes)) * 100, 0) AS `压缩率`
FROM system.parts
WHERE database IN ('mytest')
GROUP BY table
Query id: c107871c-d58d-41ff-9bb9-603ab5ad57c9
┌─表名─┬──总行数─┬─原始大小──┬─压缩大小──┬─压缩率─┐
│ test │ 1000000 │ 46.52 MiB │ 16.29 MiB │     35 │
└──────┴─────────┴───────────┴───────────┴────────┘
1 row in set. Elapsed: 0.010 sec. SELECT count(*) FROM test
Query id: 0e49726f-75d2-402f-a83d-1c1534489b51
┌─count()─┐
│ 1000000 │
└─────────┘
1 row in set. Elapsed: 0.004 sec. 

创建GreatSQL库对应库表结构

greatsql> CREATE TABLE `mytest1`.`test` (  `number`  BIGINT PRIMARY KEY, `user_id` VARCHAR(255),  `email` VARCHAR(255),  `random_value`  INT  
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

导出导入语句样例

Clickhouse导出
{ck_cmd} -q 'SELECT * FROM table FORMAT CSV #{ck_cmd}为clickhouse-client的位置
GreatSQL导入
{gdb_cmd} -e "LOAD  /*+ SET_VAR(gdb_parallel_load=ON) SET_VAR(gdb_parallel_load_chunk_size=65536) SET_VAR(gdb_parallel_load_workers=16) */ DATA LOCAL INFILE 'table.csv' INTO TABLE {new_table} fields terminated by ','"
#{gdb_cmd}为greatsql客户端的位置

不同情况下,是否开启并发耗时对比

未开启并发

单表数据量 表个数 总数据量 迁移CK表总大小 并行 用时(s)
一百万 1 一百万 46.52 MiB off 21
一千万 1 一千万 465.2 MiB off 188
一百万 10 一千万 465.2 MiB off 211
一百万 20 两千万 930.4MiB off 413

开启并发

单表数据量 表个数 总数据量 迁移CK表总大小 并行行程数 用时(s)
一百万 1 一百万 46.52 MiB 16 10
一千万 1 一千万 465.2 MiB 16 120
一百万 10 一千万 465.2 MiB 16 97
一百万 20 两千万 930.4MiB 16 180

结论

从测试结果看,开启16并行线程,可以加快导入速度30%~50%,导入数据量越大,表数量越多,或者的优化效益越高。

提示:开启并发请注意服务器资源的使用。


Enjoy GreatSQL 😃

关于 GreatSQL

GreatSQL是适用于金融级应用的国内自主开源数据库,具备高性能、高可靠、高易用性、高安全等多个核心特性,可以作为MySQL或Percona Server的可选替换,用于线上生产环境,且完全免费并兼容MySQL或Percona Server。

相关链接: GreatSQL社区 Gitee GitHub Bilibili

GreatSQL社区:

社区博客有奖征稿详情:https://greatsql.cn/thread-100-1-1.html

image-20230105161905827

技术交流群:

微信:扫码添加GreatSQL社区助手微信好友,发送验证信息加群

image-20221030163217640

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeiT-LT:印度科学院提出针对长尾数据的`DeiT`升级模型 | CVPR 2024

DeiT-LT为ViT在长尾数据集上的应用,通过蒸馏DIST标记引入CNN知识,以及使用分布外图像并重新加权蒸馏损失来增强对尾类的关注。此外,为了减轻过拟合,论文建议用经过SAM训练的CNN教师进行蒸馏,促使所有ViT块中DIST标记学习低秩泛化特征。经过DeiT-LT的训练方案,DIST标记成为…

博客建站4 - ssh远程连接服务器

1. 什么是SSH? 2. 下载shh客户端 3. 配置ssh密钥 4. 连接服务器 5. 常见问题5.1. IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!1. 什么是SSH? SSH(Secure Shell)是一种加密的网络协议,用于在不安全的网络中安全地远程登录到其他计算机系统。它提供了对远程服务…

H7-TOOL混合脱机烧录以及1拖4不同的通道烧录不同的程序操作说明(2024-08-07)

【应用场景】 原本TOOL的1拖4是用于同时烧录相同程序给目标板,但有时候一个板子上有多个不同的MCU,客户希望仅通过一个TOOL就可以完成对板子上多个MCU的烧录,也就是1拖4不同的通道烧录不同的程序,此贴为此制作。【实验目标】由于这个属于定制需求,需要简单修下目标文件,后…

英智大模型推理API:免费让Llama 3.1成为您创新项目的强力后盾

“免费版(Llama3.1 扩展包)”是英智大模型推理 API 服务平台面向开发者推出的 Llama3.1 免费套餐,供广大开发者无门槛、不限制 Tokens、永久使用,每位用户限购 1 次。 包含服务: “英智 Llama3.1 服务”:QPS(每秒查询数)限制为 1 次,统计 Tokens。 立即免费使用Llama3…

StarNet:关于 Element-wise Multiplication 的高性能解释研究 | CVPR 2024

论文揭示了star operation(元素乘法)在无需加宽网络下,将输入映射到高维非线性特征空间的能力。基于此提出了StarNet,在紧凑的网络结构和较低的能耗下展示了令人印象深刻的性能和低延迟 来源:晓飞的算法工程笔记 公众号论文: Rewrite the Stars论文地址:https://arxiv.or…

8.13 admin server 代码理解

除了一些常规校验,还要考虑到更新的id是不是该店铺的 采用集合的方式快速计算budget表如何和biz业务表交互用于求最高值的加上判断数组是否越界的条件getSumInt64 如果数组为空时发送什么 budget表是以Store为底层维度的,以biz连接,因此要体现出店铺的效果,可以少一个店铺…

提升企业竞争力:最大化APS智能排产效果的策略

APS构建排程模型的基础数据准确性 数据收集与清洗 根据APS排程建模的需求建立全面的数据收集机制,确保所有与生产相关的数据,如物料库存、设备状态、人力资源、生产订单信息、销售订单、采购订单等,都能被准确、及时地录入系统;并依据需求建立同步的时间和数据更新、增加、…

AI解题助手ChatMoney:提高你的学习效率

本文由 ChatMoney团队出品在当今这个信息爆炸的时代,学习不再局限于传统的书籍与课堂。AI解题助手作为新时代的智慧工具,正以其独特的亮点和显著优势,引领学习方式的革新。ChatMoneyAI解题助手,以其即时响应、精准解答的能力,让难题迎刃而解。无论面对的是复杂的数学公式,…

将爬虫与大语言模型结合

论文标题:《AUTOCRAWLER : A Progressive Understanding Web Agent for Web Crawler Generation》 论文地址:https://arxiv.org/abs/2404.12753 摘要 Web自动化是一种重要技术,通过自动化常见的Web操作来完成复杂的Web任务,可以提高运营效率并减少手动操作的需要。 传统的实…

完美解决RTX5源码工程+最新emWin6.40的编译兼容问题,使能C编译器使用C11可解决

最新的emWin6.40仅提供了.a格式库,这个库兼容MDK,IAR和GCC,但是在MDK AC6下使用需要做如下操作 -fno-short-wchar -fshort-enums他这个操作,正好跟RTX5源码工程添加的一个设置冲突了,通过搜索资料,发现使能MDK使用C11版本编译可以完美解决这个问题:最终配置如下,确实解…

使用python 实现自动发送邮件功能,并上传到宝塔

def send_qq_mail(subject, content, receiver):sender = "你的邮箱"smtpserver = "smtp.qq.com" #使用的是qq邮箱port = 465 # 端口号user = 你的邮箱password = 授权码 # 请确保这是正确的密码或授权码《具体去查询qq邮箱授权码》msg = MIMEText(conten…

科研单位所需要的文件自动同步备份软件具有哪些特征?

科研单位进行文件同步备份是保障数据安全、提高工作效率、符合法规要求以及实现数据共享与再利用的重要措施。文件同步备份不仅能保护科研单位的研究成果,还能提升工作协同效率,具体优势体现在: 预防数据丢失:科研单位在工作中会产生大量的重要数据,包括研究成果、实验数据…