问题描述
- 并发下单的优化,如何优化insert操作?
-
现在有一个web下单的系统,可能会有上万的用户同时下单,而且不用考虑库存是不是
足够的问题,主要的问题是上万次的insert操作会进行上万次的insert,请问可不可以进
行优化,让insert操作可以一部分的commit。然后还要能够保证客户下单以后能够立即
看到订单的信息?
1.现在已经使用了ehcache。我的打算是先把订单信息插入到ehcache,然后直接返回
,接着把订单信息放入blockingqueue,跟数据库进行同步。这样用户可以立马查询到
缓存的信息,至于数据库的同步,是他不用关心的了。请问这样可行吗?或者是有更好的办法?
解决方案
可以批量插入啊,一次插入一千条之类的
解决方案二:
上万用户同时下单,这是并发执行的,各自的请求处理各自的插入操作,建议优化下单业务逻辑,提高代码效率,减少响应时间。如果是一个用户同时产生多条订单记录,可以用批量插入。
解决方案三:
不考虑一致性,或则业务上允许ehcache成功,但是最终落库失败的情况。可以这么搞。
如果业务上需要强一致性(告知用户成功,必须成功),可以考虑如下方案:
用户请求进来-->
拿令牌------>拿到令牌--->对blockingQueue拿等待操作的任务---->并发插入------>唤醒任务等待线程---->归还令牌
| |
---->没拿到令牌--->将任务放到blockingQueue--->当前线程等待---------->被唤醒-->返回结果
使用这个方案,等待任务需要设置一个超时时间,如果在blockingQueue等待时间过长,则等待线程直接返回。然后对应的等待任务被拿出来执行的时候,直接忽略.
这样的逻辑,可以直接放在持久化层,对外层的业务不影响。
时间: 2024-08-03 08:05:50