zoukankan      html  css  js  c++  java
  • 如何批量处理大数据

    1. 通过数据状态(未处理、处理中、处理完成)

    2. 分页 分层

    3. 通过数据锁定 select for update (多线程安全)

    4. 事务 

    实例:

    用户表、兑换资格表、兑换资格统计表

    1. 千万用户

    2. 用户通过签到获取若干兑换资格

    3. 定时任务在固定时间统计每个用户去年未兑换的资格总数

    4. 用户可手动兑换,此时 未兑换->兑换中 ,也需要更新统计表

    具体实现:

    通过select 非处理中用户并加锁,然后更新处理状态为(处理中)

    循环处理这N条数据。

    for{

    锁定统计表

    更新统计信息

    更新用户表为处理完成(这三步在同一个事务里)

    }

    问题1:定时任务多线程处理每个用户如何不重复

    通过select 锁定 N 条用户,然后把这些用户更新为资格统计中。(这两步在同一个事务里)

    然后处理这N个用户(在另外的事务里)

    问题2:如果处理结束出现异常,用户表状态依旧是处理中 怎么办?如何区分是正在处理还是处理异常?

    手动更新某个时间点之前的所有处理中为未处理,比如10天前。此时即便两个线程同时处理,由于统计表被锁,也会先后处理,不存在数据安全问题。

  • 相关阅读:
    浏览器extension
    windows 下使用免安装版的mysql
    windows下好用的工具
    那些没来得及做的事
    OSI模型的一张图
    倒计时输出脚本
    selenium忽略链接不安全页面提示的方法
    selenium控制浏览器滚动条缓慢下拉到最底
    paramiko连接主机基本操作
    django点击前端按钮展示后台列表
  • 原文地址:https://www.cnblogs.com/zno2/p/4754675.html
Copyright © 2011-2022 走看看