提高写性能的常见方法

如何提高写

1. 异步

image-20231125202042019

  1. 问题
    1. 消息丢失
    2. 消息溢出
    3. 消费过慢
  2. 方法
    1. 本地消息表:以插入的形式插入本地消息避免锁表
    2. 引入缓存:
      • 当我们把消息写到消息管道中后,我们就用cache记录一下他的状态。然后在这个消息真正被消费时,从缓存中删除这个状态。
      • 用户如果发起请求状态的查询。我们可以根据cache中的情况,给用户返回状态。cache中如果还有,就说明请求处理中,cache中如果没有,就说明请求处理完了。

image-20231125202617651

2. 批量插入

顾名思义,采用合并的思想将多次请求的数据进行合并或者等待,将多次请求所要使用到的连接,锁等资源变为一次,使得写性能提高。

  1. 内存聚合
  2. 流水聚合
    1. 我们先把请求的流水落库,然后通过定时任务捞取所有的流水,并在内存中统一计算结果,然后更新数据库,标记原流水状态
    2. 数据更新较慢,会有时延

image-20231125203828926

3. 文件法(分治)

  1. 将流水写入文件
  2. 定时任务起来,服务去读取日志信息,然后执行写入动作
  3. 缺点:如果文件实在太大的话,这样的执行方式非常的低效
    1. 第一阶段,会有拆分服务去读取大文件,并把它拆分成小文件存储到分布式文件系统上。然后把分片文件的写入地址等塞到queue里去。
    2. 第二阶段,写入服务从queue里读取文件信息,然后处理一个一个小文件。解析其中的内容,并写到数据库里去
    3. tips:第一个阶段只能由单个线程去拆文件,以防止文件拆重。第二个阶段则可以用很多的服务器去一起捞取分片文件处理,以此来提高处理速度

image-20231125203955419

4. 缓存

  1. 常见场景:秒杀,发卷
  2. 场景可以容忍一定程度的数据丢失,那缓存来当做数据库使用其实是可以的
  3. 不使用定时调度的情况下,则可以使用MQ来推动数据写入DB

image-20231125204127920


提高写性能的常见方法
http://lzhnet.top/2023/11/25/提高写性能的常见方法/
Author
kuaile000
Posted on
November 25, 2023
Licensed under