PostgreSQL快速导入千万条数据
为了与MySQL做个对比,做一个PG的数据导入测试,使用COPY方式,测试环境保持一致,具体如下所述。
一、测试环境
■ 48CPU/376G
CPU(s): 48
Thread(s) per core: 2
Core(s) per socket: 12
Socket(s): 2
Model name: Intel(R) Xeon(R) Gold 5118 CPU @ 2.30GHz
L1d cache: 32K
L1i cache: 32K
L2 cache: 1024K
L3 cache: 16896K
■ DISK
Model: AVAGO HW-SAS3508 (scsi)
Disk /dev/sdb: 12.0TB
test write:1.1GB/s
test read: 3.9GB/s
■ OS
Red Hat Enterprise Linux Server 7.4 (Maipo)
■ FS
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vgora-lv_u01 xfs 11T 792G 11T 8% /u01
■ db version
[postgres@adg1:2 ~]$ psql -V
psql (PostgreSQL) 14.2
[postgres@adg1:2 ~]$ pg_ctl -V
pg_ctl (PostgreSQL) 14.2
二、修改源数据为COPY可用的格式
源数据:与MySQL测试保持一致
格式:MySQL导出的DOS文本文件格式(\n\r),修改为unix文本文件格式(\n)
【此处使用csv格式】
使用head、awk、sed工具取出所需的记录行,并修改各行数据格式。
由于源数据存在',导致无法正确导入,需把'替换成"或其他字符。
sed -i "s/\\\'/\"/g" mydata.sql
三、DDL
■ 根据最原始的源数据,调整DDL语句
CREATE TABLE tablename (
id int4 NOT NULL,
code varchar(100) DEFAULT NULL,
init_value text,
master_id text DEFAULT NULL,
code_id varchar(11) DEFAULT NULL,
end_value text
);
ALTER TABLE tablename ADD PRIMARY KEY (id);
CREATE INDEX tablename_master_id ON tablename USING btree (master_id);
CREATE INDEX tablename_code ON tablename USING btree (code);
四、COPY
COPY tablename FROM '/u01/pg/mydata.sql' WITH DELIMITER ',' CSV QUOTE '''';
耗时记录如下:
■ 100万
COPY 1000000
Time: 8938.071 ms (00:08.938)
■ 500万
COPY 4999966
Time: 70209.830 ms (01:10.210)
COPY 5000000
Time: 56365.434 ms (00:56.365)
COPY 5000000
Time: 65061.424 ms (01:05.061)
■ 2000万
COPY 19999961
Time: 257502.571 ms (04:17.503)
COPY 19999962
Time: 252777.564 ms (04:12.778)
COPY 20000000
Time: 250620.213 ms (04:10.620)
COPY 10578983
Time: 138167.048 ms (02:18.167)
■ 3000万
COPY 30578975
Time: 397111.329 ms (06:37.111)
COPY 30578983
Time: 391768.993 ms (06:31.769)
COPY 30578983
Time: 388049.729 ms (06:28.050)
五、结论
pg用LOAD方法的大数据量导入,千万条数据需要1分钟以上。
关于pg的数据导入,后续再探讨一下其他更好的方式。
PostgreSQL快速导入千万条数据的更多相关文章
- orcle 如何快速插入百万千万条数据
有时候做实验测试数据用到大量数据时可以用以下方法插入: 方法一:使用xmltable create table bqh8 as select rownum as id from xmltable('1 ...
- java之5分钟插入千万条数据
虽说不一定5分钟就插入完毕,因为取决去所插入的字段,如果字段过多会稍微慢点,但不至于太慢.10分钟内基本能看到结果. 之前我尝试用多线程来实现数据插入(百万条数据),半个多小时才二十多万条数据. 线程 ...
- 腾讯面试题,js处理1千万条数据排序并且页面不卡顿
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- mysql自定义函数并在存储过程中调用,生成一千万条数据
mysql 自定义函数,生成 n 个字符长度的随机字符串 -- sql function delimiter $$ create function rand_str(n int) returns VA ...
- 快速生成100W条数据
快速生成100W条数据,生成的时候是顺序生成,取的时候是随机取用,生成100W条数据大概一分多钟,比网上其他代码速度要快很多 )) --truncate table tb --select top 1 ...
- LOAD DATA INFILE读取CSV中一千万条数据至mysql
作业要求 构建一个关系模式和课本中的关系movies(title,year,length,movietype,studioname,producerC)一样的关系,名称自定,在这个关系中插入1000万 ...
- [MyBatis]五分钟向MySql数据库插入一千万条数据 批量插入 用时5分左右
本例代码下载:https://files.cnblogs.com/files/xiandedanteng/InsertMillionComparison20191012.rar 我的数据库环境是mys ...
- Postgresql快速写入/读取大量数据(.net)
环境及测试 使用.net驱动npgsql连接post数据库.配置:win10 x64, i5-4590, 16G DDR3, SSD 850EVO. postgresql 9.6.3,数据库与数据都安 ...
- 快速导入导出Oracle数据demo(sqlldr、UTL_FILE)
本文演示快速sqlldr导入.UTL_FILE导出Oracle表数据实例 表结构如下,演示数据约112万,可自行准备. create table MemberPointDemo ( MEMBERID ...
- python+mysql:实现一千万条数据插入数据库
作业要求 构建一个关系模式和课本中的关系movies(title,year,length,movietype,studioname,producerC)一样的关系,名称自定,在这个关系中插入1000万 ...
随机推荐
- 前端vue uni-app列表组件 list组件,简单好用
快速实现uni-app列表组件 list组件,简单好用; 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=12675 效果图如下: ...
- matlab的gui图像处理操作界面,实现重置和退出按钮功能
axes控件实现了展示图片,动态txt控件实现了展示或者输入参数. 重置 在gui界面右键点击重置pushbotton回到代码块callback,编写代码 以下代码是实现图片和参数数字重置,是重置按钮 ...
- JSGRID loaddata显示超级多空行
这个逼问题困扰了我两天了 作为一个主后端的程序员 初体验前端技术栈真的麻之又麻 以防万一 请先确认 是不是和我一个情况 如果是 请往下看 首先 我们需要念一段咒语 json是json string是s ...
- 代码随想录贪心专题-day1
35. 分发糖果 n 个孩子站成一排.给你一个整数数组 ratings 表示每个孩子的评分. 你需要按照以下要求,给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果. 相邻两个孩子评分更高的孩子会获 ...
- CSP-S复习列表
DP:序列,区间,背包,多维,状压,树型 优化:滚动,单调性,树状数组 数据结构:栈,队,链,deque,priority_queue,vector,set,map 树状数组,分块思想 前缀和,差分思 ...
- UE4构建基础和实践:一、概述
序言 构建这个概念是和应用程序包及资源等相关的,它的特点是使用脚本控制一系列的任务的处理,以减少人力操作带来的成本和操作失误风险. 在UE的概念里,构建往往是和打包相关的(如编译.cook.压缩打包等 ...
- wireshark 怎么过滤字符串 和 复制data中的可读文本
设置 首先点击,[捕获]下面的小放大镜 选择 分组字节流 - 窄(UTF-8/ASCII)- 字符串 (注意,要向选择字符串) 效果 复制报文中的可读数据 右键报文,复制,...as Printabl ...
- shell: xcall
#!/bin/bash ips=( 1.1.1.2 1.1.1.1 ) port= user= passwd= for i in ${ips[@]} do echo "== $i ==&qu ...
- Linux 文件系统的设计
一 硬盘的最小存储单元是扇区,扇区大小为512B 文件系统将硬盘划分为固定大小的块(block),最常见的块大小为4KB 块是文件系统读写硬盘的最小单位 二 文件系统设计面临的基本问题: 用户怎么找到 ...
- 文心一言 VS 讯飞星火 VS chatgpt (72)-- 算法导论7.1 3题
三.请简要地证明:在规模为 n 的子数组上,PARTITION 的时间复杂度为 Θ(n). 文心一言: 首先,我们需要明确PARTITION函数的具体定义.PARTITION函数通常用于快速排序算法中 ...