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天前。此时即便两个线程同时处理,由于统计表被锁,也会先后处理,不存在数据安全问题。

  • 相关阅读:
    关于MAC下重置MYSQL密码
    MAC下配置PHPStorm环境
    Java中从控制台输入数据的几种常用方法
    IDEA 指定入口class
    Python中的除法
    Python 学习笔记
    SQLiteDatabase中query、insert、update、delete方法参数说明
    listview与sqlite数据绑定
    java中HashMap详解
    只要有信心,人永远不会挫败
  • 原文地址:https://www.cnblogs.com/zno2/p/4754675.html
Copyright © 2011-2022 走看看