首页 > 数据库 >GreatSQL 并行Load Data加快数据导入

GreatSQL 并行Load Data加快数据导入

时间:2024-08-14 10:06:17浏览次数:6  
标签:Load load data MiB GreatSQL gdb Data parallel

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
SELECT
    number,
    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.
#查看表数据库和大小
SELECT
    table 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

标签:Load,load,data,MiB,GreatSQL,gdb,Data,parallel
From: https://www.cnblogs.com/greatsql/p/18358294

相关文章

  • 【漏洞复现】LiveBos UploadFile 任意文件上传漏洞
              声明:本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动,将与本文档的作者或发布者无关。一、漏洞描述LiveBOS,由顶点软件股份有限公司开发的对象型业务架构中间件及其集成开发工具,是一种创新的软件开发模式,以业......
  • SciTech-BigDataAIML-LLM-Transformer Series系列: Word Embedding词嵌入详解: 用Corp
    SciTech-BigDataAIML-LLM-TransformerSeries系列:WordEmbedding词嵌入详解:1.用Corpus预训练出嵌入矩阵\(\largeE\)CorpusCollecting:非常重要的工作先收集一个常用的Corpus(语料库),能保障大多数的word都在corpus.有两个特别重要的作用:VocabularyExtracting:词......
  • Datawhale X 魔搭 AI夏令营 AIGC方向 Task2
    代码逐行解析先记录一下baseline代码通义千问生成的逐行解析:#安装Data-Juicer和DiffSynth-Studio!pipinstallsimple-aesthetics-predictor#安装simple-aesthetics-predictor!pipinstall-v-edata-juicer#安装data-juicer!pipuninstallpytorch-lightning-y#......
  • TapData 信创数据源 | 国产信创数据库 PolarDB MySQL 数据同步指南,加速国产化进程,推进
    随着国家对自主可控的日益重视,目前在各个行业和区域中面临越来越多的国产化,采用有自主知识产权的国产数据库正在成为主流。长期以来,作为拥有纯国产自研背景的TapData,自是非常重视对于更多国产信创数据库的数据连接器支持,旗下产品已陆续与**阿里云、华为云、麒麟软件、优炫数据库......
  • LayUI Upload组件连续上传同一文件无反应
    可能原因:组件会缓存上次的上传历史,若是同一文件就不处理具体原因:待查解决方法:在choose里面增加如下语句“uploadListIns.config.elem.next()[0].value='' ”varuploadListIns=upload.render({elem:'#FileUpload',elemList:$('#FileList'),//列表元素对......
  • Oracle 19c通过recover standby database from service修复GAP案例
    案例介绍环境介绍操作系统:RedHatEnterpriseLinuxrelease8.10(Ootpa)数据库版本:Oracle19.23.0.0.0上周五,系统管理员需要给Linux升级补丁,UAT环境下的一套DG,数据库没有正常关闭的情况下,操作系统升级补丁后强制reboot了,周一早上处理的过程中遇到下面错误:备库的告警日......
  • 推荐一款番茄小说下载器:fanqienovel-downloader
    fanqienovel-downloader是一款用来下载番茄小说网的小说资源工具,通过Python实现,免费供大家下载使用。使用方法输入id以下载,如:番茄小说.com/page/7276384138653862966中的7276384138653862966输入1以更新,读取record.json中的id进行更新。输入2进入设置,可调整正文段首空格......
  • 成功安装torch但使用却Error loading “..\Lib\site-packages\torch\lib\fbgemm.
    OSError:[WinError126]找不到指定的模块。Errorloading"..\lib\fbgemm.dll"1.问题不大,实际上是fbgemm.dll缺少了一个依赖文件。可以用Dependencies来查看。下载地址:https://github.com/lucasg/Dependencies/releases选择你电脑喜欢的配置下载一个release.zip下......
  • C# Binding之 DataContext 测试
    <Windowx:Class="WpfApp2.BindingTest5"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft......
  • 《ImageNet: A Large-Scale Hierarchical Image Database》李飞飞论文阅读笔记
    OpenSNN开思通智网,官网地址:https://w3.opensnn.com/2024年8月份"O站创作者招募计划"快来O站写文章,千元大奖等你来拿!“一起来O站,玩转AGI!”论文地址:《ImageNet:ALarge-ScaleHierarchicalImageDatabase》这篇论文是关于一个叫做“ImageNet”的大型图像数据库的介绍。......