美文网首页
php控制台程序转储千万级别数据库表

php控制台程序转储千万级别数据库表

作者: 聆行 | 来源:发表于2018-08-29 10:03 被阅读0次

公司一个日志表log(id,uid,ctime),里面每年有一千多万条记录,ctime是记录时间,并且有索引,现在根据年份分别转储到log_2016,log_2017的表中,并删除原表相关数据。

注意事项:

1.php使用set_time_limit(0) 防止超时退出

2.注意使用sleep,防止过多占用cpu时间,影响其他任务

3.注意操作步长,不要太长也不要太短

4.筛选方式

            1)select * from log where ctime between '2017-01-01 00:00:00' and '2018-01-01 00:00:0'

            2)select * from log where ctime like '2017%'

            没有比对哪种方式更好

4.转储方式:

        1)将步长内的数据读到php端,然后循环insert进表

        2)直接insert into select ....

         肯定是第二种方式更好,纯数据库操作

5.删除方式

        1)转储完成后统一删除

        2)转储步长数据后,立即删除该部分数据

        第二种方式更好,避免最后一次性删除大量数据,造成cpu占用和数据库响应慢

6.步长操作方式

        1) insert into log_2016 select ... where ctime like '2016%' order by id limit 5000

                delete from log where ctime like '2016%' order by id limit 5000

        2)   select min(id) as id from log  where ctime like '2016%' 

                union all

               select max(id) as id from log  where ctime like '2016%' 

                先获得符合时间限制的最大最小id

                insert into log_2016 select ...  where id between minID and maxID

                delete from log where  id between minID and maxID

                第二种方式性能好很多,因为批量操作时只使用主键索引,但是如果后续年份记录有被修改过,则会造成不相关数据被转移,比如2017年有一条数据被改成了2016年的,则maxID会异常,导致部分2017年数据被误操作到log_2016表中

相关文章

  • php控制台程序转储千万级别数据库表

    公司一个日志表log(id,uid,ctime),里面每年有一千多万条记录,ctime是记录时间,并且有索引,现在...

  • mysqldump快速上手

    简介 功能: 转储MySQL数据库以及表的结构和内容。(Dumping structure and content...

  • Oracle数据库表转成WORD文档格式

    步骤一:将数据库表转成 .sql 文件。如在Navicat数据库客户端中,在要导出的数据表上右键选择“转储SQL文...

  • Navicat 数据库中的表互相分享使用

    一、导出数据库里面的表(结构及数据) 1.从数据库中找到你想要导出的表,右击弹出选框,选择 ‘转储SQL文件’,点...

  • pg_dump、pg_restore实践

    常见选项 -a --data-only只转储数据,而不转储模式(数据定义)。表数据、大对象和序列值都会被转储。 ...

  • 日更十三:数据库技术选型

    数据库技术选型:MySQLicon->冷热分离->分库分表->分布式数据库 在常见的业务场景中,数据量千万级别或以...

  • 运行sql文件出错

    今天将一个数据库的数据库表转储为.sql文件,在另外一个数据库运行sql文件时出错,sql文件的datetime后...

  • 基于Spring boot MongoDB常用查询操作

    基本概念 mongo db是非关系型数据库的一种,性能高,容易部署,单表可达千万级别,业界流行一句话,百万级别用M...

  • MySQL表名大小写敏感导致的问题

    问题描述 windows服务器上的mysql数据库转储sql文件 Centos服务器上的mysql导入转储sql文...

  • 分布式事务解决方案

    何为分布式事务? 随着公司业务发展和数据量的增长,数据库单表超过千万级别时,数据库性能会直线下降,这时需要数据分区...

网友评论

      本文标题:php控制台程序转储千万级别数据库表

      本文链接:https://www.haomeiwen.com/subject/odqhwftx.html