提高数据加载速度的常用方法

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

数据加载是数据库应用开发和测试中经常遇到的需求场景。如果要加载的数据量很大,加载的性能往往会成为瓶颈。最近又遇到了一个典型的数据加载场景,顺手总结一下相关的经验。


综合来看,提高加载速度的办法主要有:

优化表结构和定义

1.     表定义中避免采用操作代价较高的数据类型,例如在允许的情况下用 INTEGER DOUBLE 代替 DECIMAL

2.     延迟进行约束或完整性检查,例如在数据加载之后再创建索引和外码约束等。

3.     针对性的做一些物理参数调优,例如调整数据库页面的大小或充满度。


这一类的优化需要修改数据库设计或专门进行参数调整,可行性受到一定的限制。

批量加载数据

1.     如果采用的是 INSERT 语句来加载数据,可以每插入一批记录作为一个事务,通过减少事务数来提高速度。

2.     如果是 MySQL 等允许在 INSERT VALUES 之后出现多行的数据库,可以在每个 INSERT 语句中提供一批数据。

3.     采用服务器端的 PREPARE EXECUTE 语句避免每次都要解析 INSERT 语句,也可以提高加载效率。


这一类的优化集中在数据加载的业务逻辑上,只要允许修改应用程序都可以采用。

并行加载数据

1.     应用开多个连接并行地给数据库加载数据。

2.     利用数据库内部实现的功能来并行加载数据。


前者也是修改数据加载的业务逻辑,并行的加载不同的表比较容易实现。如果遇到了个别特别大的表,需要结合业务逻辑并行的加载该表的不同部分。 后者以来数据库内部的并行加载能力,一般来说对数据加载方式会有一些限制,例如采用专门的 API SQL 语法。

走特殊执行路径或减少执行路径

1.     不通过数据库引擎,直接产生符合格式的数据库文件。数据库文件的格式通常都比较复杂,不过有些数据库可以直接读取 CSV 等常见的文件格式。

2.     不通过 INSERT 之类的 SQL,采用 LOAD FILE 之类的命令直接加载文件,或直接采用存储引擎的 API

3.     如果可以确保加载的数据是符合约束的,可以在加载前关掉约束检查,加载之后再打开。

4.     不写或少写日志,例如事务日志、binlog 日志。不过,万一加载过程中宕机了,存在数据损坏的风险。


这一类的优化往往依赖产品的具体特性,可移植性较差。关闭约束检查、不写事务日志等开关又存在导致数据损坏或不一致的风险,非特殊情况都不建议使用。

示例

TPC-C 数据加载程序为例,通常可以直接采用的优化手段有:

1.     在数据加载之后再创建索引等约束。开源的 SQL 中通常都不带外码约束,可以进一步提高加载速度。

2.     并行加载不同的仓库对应的数据。在 TPC-C 的业务模型中,不同仓库的数据是可以独立加载的。

3.     并行加载不同的表的数据。TPC-C 的表可以分为几组互不相关的集合,并行进行加载。

4.     采用批量加载数据一节中的各种方法实现数据加载程序。


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
4月前
|
SQL JSON 数据可视化
Pandas库常用方法、函数集合
Pandas库常用方法、函数集合
|
7月前
|
存储 数据库连接 数据处理
数据加载与保存:Pandas中的数据输入输出操作
【4月更文挑战第16天】Pandas是Python数据分析的强大工具,支持多种数据加载和保存方法。本文介绍了如何使用Pandas读写CSV和Excel文件,以及与数据库交互。`read_csv`和`to_csv`用于CSV操作,`read_excel`和`to_excel`处理Excel文件,而`read_sql`和`to_sql`则用于数据库的读写。了解这些基本操作能提升数据处理的效率和灵活性。
|
7月前
|
监控 安全 搜索推荐
Day05-五种常见的数据方法
Day05-五种常见的数据方法
Day05-五种常见的数据方法
|
Java
从Excel批量导入数据说到ForkJoin的原理
前面我们介绍了EasyPOI,用其进行Excel导入导出,非常的方便,非常的简单。但是4.0.0 版本以及其之前的版本都是通过单线程的方式对Excel中的数据进行解析的。效率比较差。 今天我将做一个测试,5000条数据,分别使用EasyPOI的方式和自己手写ForkJoin的方式(多任务)的方式来导入,来比较这两者的性能差异。
221 0
从Excel批量导入数据说到ForkJoin的原理
|
7月前
|
索引 Python
两个使用 Pandas 读取异常数据结构 Excel 的方法,拿走不谢!
两个使用 Pandas 读取异常数据结构 Excel 的方法,拿走不谢!
|
缓存 Java 数据库
字典缓存工具类
在系统设计中,需要考虑到系统性能方面的需求,需要对一些数据字典进行缓存操作。。
231 1
|
索引
数据操作以及常用方法
数据操作以及常用方法
164 0
|
存储 数据挖掘 数据格式
Pandas的列表值处理技巧,避免过多循环加快处理速度(上)
Pandas的列表值处理技巧,避免过多循环加快处理速度
170 0
Pandas的列表值处理技巧,避免过多循环加快处理速度(上)
|
数据可视化 搜索推荐 Python
Pandas的列表值处理技巧,避免过多循环加快处理速度(下)
Pandas的列表值处理技巧,避免过多循环加快处理速度
142 0
Pandas的列表值处理技巧,避免过多循环加快处理速度(下)
|
NoSQL Redis 开发者
数据类型-list 阻塞数据获取| 学习笔记
快速学习数据类型-list 阻塞数据获取