为了与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快速导入千万条数据的更多相关文章

  1. orcle 如何快速插入百万千万条数据

    有时候做实验测试数据用到大量数据时可以用以下方法插入: 方法一:使用xmltable create table bqh8 as select rownum as id from xmltable('1 ...

  2. java之5分钟插入千万条数据

    虽说不一定5分钟就插入完毕,因为取决去所插入的字段,如果字段过多会稍微慢点,但不至于太慢.10分钟内基本能看到结果. 之前我尝试用多线程来实现数据插入(百万条数据),半个多小时才二十多万条数据. 线程 ...

  3. 腾讯面试题,js处理1千万条数据排序并且页面不卡顿

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. mysql自定义函数并在存储过程中调用,生成一千万条数据

    mysql 自定义函数,生成 n 个字符长度的随机字符串 -- sql function delimiter $$ create function rand_str(n int) returns VA ...

  5. 快速生成100W条数据

    快速生成100W条数据,生成的时候是顺序生成,取的时候是随机取用,生成100W条数据大概一分多钟,比网上其他代码速度要快很多 )) --truncate table tb --select top 1 ...

  6. LOAD DATA INFILE读取CSV中一千万条数据至mysql

    作业要求 构建一个关系模式和课本中的关系movies(title,year,length,movietype,studioname,producerC)一样的关系,名称自定,在这个关系中插入1000万 ...

  7. [MyBatis]五分钟向MySql数据库插入一千万条数据 批量插入 用时5分左右

    本例代码下载:https://files.cnblogs.com/files/xiandedanteng/InsertMillionComparison20191012.rar 我的数据库环境是mys ...

  8. Postgresql快速写入/读取大量数据(.net)

    环境及测试 使用.net驱动npgsql连接post数据库.配置:win10 x64, i5-4590, 16G DDR3, SSD 850EVO. postgresql 9.6.3,数据库与数据都安 ...

  9. 快速导入导出Oracle数据demo(sqlldr、UTL_FILE)

    本文演示快速sqlldr导入.UTL_FILE导出Oracle表数据实例 表结构如下,演示数据约112万,可自行准备. create table MemberPointDemo ( MEMBERID ...

  10. python+mysql:实现一千万条数据插入数据库

    作业要求 构建一个关系模式和课本中的关系movies(title,year,length,movietype,studioname,producerC)一样的关系,名称自定,在这个关系中插入1000万 ...

随机推荐

  1. 前端树形结构图组件 tree组件,可拖拽移动,点击展开收缩,无限添加子集

    快速实现树形结构图组件 tree组件,可拖拽移动,点击展开收缩,无限添加子集; 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=1 ...

  2. Mysql基础篇(二)之函数和约束

    一. 函数 Mysql中的函数主要分为四类:字符串函数.数值函数.日期函数.流程函数 1. 字符串函数 常用函数如下: 函数 功能 CONCAT(S1, S2, ......Sn) 字符串拼接,将S1 ...

  3. 完美决解win10 可以上网却显示无internet的bug

    试过网上的几乎所有方法,例如禁用复用网卡.网络重置.禁用复用服务,也用了用修改注册表下HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesNlaSvcPa ...

  4. 多光源渲染方案 - Light Culling

    目录 Tile-based Light Culling Culling 流程 Injection Pass Compact Pass 2.5D Culling Cluster-based Light ...

  5. 【Shell】数组

    数组 bash 只支持一维数组. 数组下标从 0 开始,下标可以是整数或算术表达式,其值应大于或等于 0. 创建数组 # 创建数组的不同方式 nums=([2]=2 [0]=0 [1]=1) colo ...

  6. 从0开发WebGPU渲染引擎:实现路径追踪

    大家好,本文基于WebGPU的计算着色器实现了基础的路径追踪器,支持Middle BVH和No BVH两种加速结构 我主要是将离线渲染零基础实战开发培训班(一期)->第二十九节课的代码移植到We ...

  7. Unity UGUI的PhysicsRaycaster (物理射线检测)组件的介绍及使用

    Unity UGUI的PhysicsRaycaster (物理射线检测)组件的介绍及使用 1. 什么是PhysicsRaycaster组件? PhysicsRaycaster是Unity UGUI中的 ...

  8. 2023-07-31:用r、e、d三种字符,拼出一个回文子串数量等于x的字符串。 1 <= x <= 10^5。 来自百度。

    2023-07-31:用r.e.d三种字符,拼出一个回文子串数量等于x的字符串. 1 <= x <= 10^5. 来自百度. 答案2023-07-31: 大体步骤如下: 1.初始化一个字符 ...

  9. 七 APPIUM Android 定位方式(转)

    1.定位元素应用元素 1.1通过id定位元素 Android里面定位的id一般为resrouce-id: 代码可以这样写: WebElement element = driver.findElemen ...

  10. C#程序的启动显示方案(无窗口进程发送消息) - 开源研究系列文章

    今天继续研究C#的WinForm的实例显示效果. 我们上次介绍了Winform窗体的唯一实例运行代码(见博文:基于C#的应用程序单例唯一运行的完美解决方案 - 开源研究系列文章 ).这就有一个问题,程 ...