百万级数据导入导出
导入
- 单线程逐行解析,单线程单条数据导入:及其慢
- 单线程逐行解析,单线程批量插入:相比1加速明显
- 多线程解析,单线程批量插入(这里的单线程其实是说前面多线程解析可能是每个线程解析一个表,然后这个线程解析到1000条的时候就自己去执行插入的操作,所以,其实会有多个线程在执行插入操作的情况发生。)
- 多线程解析,多线程插入
导出
- 查全表, 写入一个Sheet
- 查全表,写入多个Sheet
- 分页查询,每页数据写入一个Sheet
- 多线程分页查询,每页数据写入一个Sheet
分布式幂等性问题
幂等性:同一个请求发送多次后,实际操作中只会执行一次,不会重复执行。
产生原因
- 网络波动,重复请求
- 超时重试机制(Nginx重试,RPC重试)
- 页面重复刷新
- 用户操作
解决
从操作的地方来解决分前端和后端:
前端
前端主要添加用户操作限制:防止用户手抖反复发送请求,可以使用按钮置灰的方案来解决,置灰的时间可以使用固定时间或者根绝异步请求返回信息来进行调节。
后端
后端从操作的行为角度分为4种:增删改查,其中查和删不会涉及到幂等性问题,幂等性问题主要发生在增加和改的时候。
增操作的解决方案可以通过全局唯一id来对数据进行限定操作,这样,当同一数据进行两次操作时,由于id的唯一性只会添加一次,幂等性成立。
或者通过数据表添加version字段对请求执行类似cas的校验,同样可以实现幂等性。