数据变更最佳实践

本文介绍了更新、删除和导入的方法。

向表中写入数据时,可以通过批量打包方式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,每秒查询率)较低时进行导入操作。