首页 > 数据库 >PostgreSQL快速导入千万条数据

PostgreSQL快速导入千万条数据

时间:2022-08-29 21:26:58浏览次数:86  
标签:PostgreSQL 千万条 tablename 导入 pg ms Time COPY id

为了与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,千万条,tablename,导入,pg,ms,Time,COPY,id
From: https://www.cnblogs.com/likingzi/p/16637380.html

相关文章

  • MySQL低配数据库被大量数据导入时KO
    在一个低配MySQL数据库(笔记本电脑虚机环境,虚机配置2CPU/3G内存),在3000万级别的大量数据LOADDATA方式导入时,坚持一小时后,终于被KO了,甚至没写下任何有用的日志,只是在操作界面......
  • MySQL快速导入千万条数据(3)
    接上文,本次在较高性能的X86物理机上,做真实生产环境的大数据量导入测试。一、测试环境■CPU是24核,每核2线程,即48CPU$lscpuArchitecture:x86_64CPUop-mode......
  • MySQL快速导入千万条数据(2)
    接上文,继续测试3000万条记录快速导入数据库。一、导入前1000万条数据清库、建库、新建表结构、导入前1000万条数据,结果:■1000万行,有2索引导入耗时:16分钟QueryOK,999......
  • MySQL快速导入千万条数据(1)
    对于传统的关系数据库如oracle,在大量数据导入方面的效率,我们一般有一个大概的认知,即1分钟以内可以导入千万条数据,而对于MySQL数据库,普遍观点以为性能相对较差,尤其时对于千......
  • mysql导入.idb文件进行修复数据库
    背景:数据库在运行过程中出现了问题,需要根据*.idb文件进行找回数据操作步骤:1)先创建一个同样数据格式的表(之前存在的话备份删除,最好先在新的数据库中走一遍流程)--......
  • pom.xml中导入 feign 启动Spring启动应用程序时Bean创建错误 可能版本不兼容 使用和s
    启动Spring启动应用程序时Bean创建错误当我尝试运行springboot应用程序时,我遇到了以下异常:组织。springframework。豆。工厂BeanCreationException:创建名为“configura......
  • 如何将MMD镜头导入Unity
    最近懒得K动作和镜头了,想着把其他大佬做的动作和镜头拿来玩玩。虽然导入MMD动作的教程随便搜就能找到(MMD->Blender->FBX->Unity),但是关于导入镜头的教程好像特别少。网上......
  • UE导入FBX、GLTF模型
    楔子虽然做了很多年的三维可视化,不过都主要还是web端开发为主(webgl,threejs,有兴趣的读者也可以关注下我的相关专栏)。最近准备入手一下UE,顺便做一下知识梳理。所以文章可能......
  • 关于maven导入依赖
    关于maven导入依赖创建项目需要导入依赖时我引进的依赖是这样写的 <dependency><groupId>org.springframework</groupId><artifactId>spring-context</art......
  • jQuery介绍、jQuery导入方式、基本使用
    目录jQuery(writelessdomore)jQuery的优势有了jQuery那我们还使用BOM与DOM吗?jQuery导入导入方式jQuery提供的CDN服务优点与缺点添加到自定义模板jQuery基本使用1.jQuary......