如何快速插入短链到数据库中

如何快速插入短链到数据库中

方法一:

采用批量插入插入数据而不是一条条的插入数据。

TPS:每秒处理的事务数量

单挑插入:1000-5000

批量插入:5000-20000

为什么批量插入快?

因为单条插入相比批量插入他的事务开销更高,相当于要频繁的创建事务,网络I/O开销也很大,每插入一条都要通信一次,索引更新效率很慢,每次都要去找到索引的位置然后更新,而不是像批量插入那样,一次性更新一堆记录在索引树中。

不同数据量测试5次,结果如下:

单独插入50000条数据平均耗时:233748ms

批量插入50000条数据平均耗时:2590ms

对比:效率差50倍

单独插入10000条数据平均耗时:22036ms

批量插入10000条数据平均耗时:3330ms

对比:效率差6倍

单独插入1000条数据平均耗时:3122ms

批量插入1000条数据平均耗时:374ms

对比:效率差8倍

数据量越大效果越明细

测试数据来源于网络

方法二:

使用消息队列(如 Kafka、RabbitMQ)或本地缓存队列(如 Redis、Disruptor)暂存短链数据。

异步的写入mysql避免一直卡在数据库插入这个操作中。

方法三:

分库分表,对短链url进行hash计算,计算得出的短链作为分片健,然后这样基本上可以均匀的分配到t_link_(0~15)表里边。

这样也能让单表压力减小16倍。同时使用java多线程编程,实现同一时间向不同表插入数据。

分表数量

性能提升倍数

2 - 4

1.5 - 3倍

8 - 16

4 - 10倍

32 - 64

10 - 20倍

128+

20 - 50倍

LICENSED UNDER CC BY-NC-SA 4.0
Comment