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

  • 相关阅读:
    1442. Count Triplets That Can Form Two Arrays of Equal XOR
    1441. Build an Array With Stack Operations
    312. Burst Balloons
    367. Valid Perfect Square
    307. Range Sum Query
    1232. Check If It Is a Straight Line
    993. Cousins in Binary Tree
    1436. Destination City
    476. Number Complement
    383. Ransom Note
  • 原文地址:https://www.cnblogs.com/zno2/p/4754675.html
Copyright © 2011-2022 走看看