数据变更最佳实践
本文介绍了更新、删除和导入的方法。
向表中写入数据时,可以通过批量打包方式INSERT和REPLACE INTO提高数据写入性能。建议如下:
通过每条INSERT或者REPLACE语句写入的数据行数大于1000行,但写入的总数据量不宜太大,不超过16MB。
通过批量打包方式写入数据时,单个批次的写入延迟相对会高一些。
写入报错时,需要做重试确保数据被写入,重试导致的数据重复可以通过表的主键来消除。
更新数据
AnalyticDB MySQL版提供多种数据更新方式,建议如下:
数据更新频率高、基于主键的行级覆盖更新且应用可以补齐所有列,可通过REPLACE INTO批量更新数据。
数据更新频率低、基于主键更新,可通过REPLACE INTO或者UPDATE单条更新数据。
数据更新频率低、基于任意条件的更新,可通过UPDATE更新数据。
删除数据、分区、表
AnalyticDB MySQL版有多种删除数据的方式,建议如下:
数据删除频率低、基于主键为条件的删除,可通过
DELETE FROM WHERE PK='xxx'
删除数据。数据删除频率低、基于任意条件的删除,可通过DELETE删除数据。
通过
TRUNCATE TABLE db_name.table_name PARTITION partition_name
删除指定二级分区。通过
TRUNCATE TABLE db_name.table_name
删除指定表(包括所有二级分区)数据。
批量和实时导入数据
批量导入:适用于大数据量导入的场景,导入过程中可以查询旧数据,导入操作完成后一键切换新数据。导入失败时,支持回滚新数据,不影响查询旧数据。
例如,从MaxCompute、OSS中导入数据到AnalyticDB MySQL版时,推荐使用INSERT OVERWRITE SELECT批量导入方式,详情请参见通过外表导入至数仓版。
说明批量导入单个表时,导入任务会在系统中串行执行;批量导入多个表时,导入任务会在系统中并行执行,默认并行执行2个任务。
例如将MaxCompute中的数据导入AnalyticDB MySQL版时,MaxCompute中同一个表的不同分区中的数据会在系统中排队串行导入。
实时导入:适用于小数据量导入的场景,例如百万级别的表数据。例如,从RDS for MySQL、ECS自建MySQL数据导入AnalyticDB MySQL版时,推荐使用INSERT INTO,详情请参见通过外表导入至数仓版。
导入数据到AnalyticDB MySQL版时,导入任务使用AnalyticDB MySQL版中的资源,如果查询数据期间需要导入数据,建议在QPS(Query Per Second,每秒查询率)较低时进行导入操作。