提高写性能的常见方法
如何提高写
1. 异步
- 问题
- 消息丢失
- 消息溢出
- 消费过慢
- 方法
- 本地消息表:以插入的形式插入本地消息避免锁表
- 引入缓存:
- 当我们把消息写到消息管道中后,我们就用cache记录一下他的状态。然后在这个消息真正被消费时,从缓存中删除这个状态。
- 用户如果发起请求状态的查询。我们可以根据cache中的情况,给用户返回状态。cache中如果还有,就说明请求处理中,cache中如果没有,就说明请求处理完了。
2. 批量插入
顾名思义,采用合并的思想将多次请求的数据进行合并或者等待,将多次请求所要使用到的连接,锁等资源变为一次,使得写性能提高。
- 内存聚合
- 流水聚合
- 我们先把请求的流水落库,然后通过定时任务捞取所有的流水,并在内存中统一计算结果,然后更新数据库,标记原流水状态
- 数据更新较慢,会有时延
3. 文件法(分治)
- 将流水写入文件
- 定时任务起来,服务去读取日志信息,然后执行写入动作
- 缺点:如果文件实在太大的话,这样的执行方式非常的低效
- 第一阶段,会有拆分服务去读取大文件,并把它拆分成小文件存储到分布式文件系统上。然后把分片文件的写入地址等塞到queue里去。
- 第二阶段,写入服务从queue里读取文件信息,然后处理一个一个小文件。解析其中的内容,并写到数据库里去
- tips:第一个阶段只能由单个线程去拆文件,以防止文件拆重。第二个阶段则可以用很多的服务器去一起捞取分片文件处理,以此来提高处理速度
4. 缓存
- 常见场景:秒杀,发卷
- 场景可以容忍一定程度的数据丢失,那缓存来当做数据库使用其实是可以的
- 不使用定时调度的情况下,则可以使用MQ来推动数据写入DB
提高写性能的常见方法
http://lzhnet.top/2023/11/25/提高写性能的常见方法/