15.十亿数据批量写入mysql
# 01.十亿数据写入mysql
无论多大规模的问题,本质就是拆解,把一个大的工程拆解到能够执行的小步骤即可
这里核心问题主要有下面几个
第一:把十亿数据分成50份,每个任务只需要处理2000万数据
- 1.txt
- 2.txt
- …
- 50.txt
第二:如何提高mysql写入效率
- 分库
- 批量写入
第三:是否并发写入同一张表并保证表插入顺序
- 并发写入一张表无序,提高批量插入的阈值,在一定程度上增加了插入并发度
第四:如何写入更合适
- 我理解相对于磁盘IO和CPU而言,性能瓶颈更可能出现在mysql插入上
- 所以没必要使用kafka或者多线程,一个线程批量读取,然后另外一个线程批量写入即可
- 批量读取数据可以直接写到内存中,直接设置一个内存buffer(设置好buffer大小,避免内存溢出)
第五:如何保证任务可靠
如果读取任务进行到一半,宕机或者服务发布如何处理呢
因为是保证顺序写入表中的,只需要借助redis的INCRBY方法来记录当前写到多少行即可
# 初始化键 task_offset_{taskId} 的值为 0 {taskId}是每个文件对应的线程任务标识 SET task_offset_{taskId} 0 # 将键值加1(也可以批量写入后批量增加) INCRBY task_offset_{taskId} 1
1
2
3
4
上次更新: 2024/10/15 16:27:13