2 qq 20473793 qq_20473793 于 2016.02.29 09:17 提问

并发下单的优化,如何优化insert操作? 2C

现在有一个web下单的系统,可能会有上万的用户同时下单,而且不用考虑库存是不是
足够的问题,主要的问题是上万次的insert操作会进行上万次的insert,请问可不可以进
行优化,让insert操作可以一部分的commit。然后还要能够保证客户下单以后能够立即
看到订单的信息?
1.现在已经使用了ehcache。我的打算是先把订单信息插入到ehcache,然后直接返回
,接着把订单信息放入blockingqueue,跟数据库进行同步。这样用户可以立马查询到
缓存的信息,至于数据库的同步,是他不用关心的了。

请问这样可行吗?或者是有更好的办法?

3个回答

xiongzirui
xiongzirui   2016.02.29 10:50

可以批量插入啊,一次插入一千条之类的

xiongzirui
xiongzirui 这么大数据量实时insert到数据库肯定是有问题的,可以采用redis存储,然后约定多久同步一次到数据库,也不用担心数据因为重启等原因丢失
2 年多之前 回复
wojiushiwo945you
wojiushiwo945you 每个用户就是一个请求,是多线程并发处理的,不可能收集到一起进行批量插入的。
2 年多之前 回复
wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.02.29 10:57

上万用户同时下单,这是并发执行的,各自的请求处理各自的插入操作,建议优化下单业务逻辑,提高代码效率,减少响应时间。如果是一个用户同时产生多条订单记录,可以用批量插入。

qq_20473793
qq_20473793 对,确实有顾虑到这样的问题,并发很难或者不可能把不相关的订单信息合到一起去处理的,他们的事务应该都是独立的,看来只能够增加服务器,提高业务逻辑的效率了?
2 年多之前 回复
broust
broust   2016.03.01 13:35

不考虑一致性,或则业务上允许ehcache成功,但是最终落库失败的情况。可以这么搞。
如果业务上需要强一致性(告知用户成功,必须成功),可以考虑如下方案:
用户请求进来-->
拿令牌------>拿到令牌--->对blockingQueue拿等待操作的任务---->并发插入------>唤醒任务等待线程---->归还令牌
| |
---->没拿到令牌--->将任务放到blockingQueue--->当前线程等待---------->被唤醒-->返回结果

使用这个方案,等待任务需要设置一个超时时间,如果在blockingQueue等待时间过长,则等待线程直接返回。然后对应的等待任务被拿出来执行的时候,直接忽略.

这样的逻辑,可以直接放在持久化层,对外层的业务不影响。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
高并发秒杀系统优化
首先我们要清楚,高并发发生在哪些部分,然后正对不同的模块来进行优化 红色为高并发对性能影响较大的部分。 1.详情页部署到CDN节点上用户在秒杀开始之前,会对详情页做大量的刷新操作。 所以我们将详情页部署到CDN上,CDN将详情页做静态化处理。 这样其实用户访问的静态页的html已经不在秒杀系统上了,而在CDN节点上。 其实访问静态资源和静态页面是不用访问我们的系统服务器的,所以我们要单
MySQL-SQL插入性能优化
对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长。特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久。因此,优化数据库插入性能是很有意义的。 经过对MySQL innodb的一些性能测试,发现一些可以提高insert效率的方法,供大家参考参考。 1. 一条SQL语句插入多条数据。 常用的插入语句如: 1234I
insert语句优化
insert语句优化
淘宝下单部分高并发设计 的个人理解
要优化下单就要提高TPS (Transaction per second)每秒下单数,我们首先要做的是对下单的逻辑剥离,只保留核心部分,而把附加功能剔除出去。     比如说下单要考虑库存量,考虑发短信,要给卖家发旺旺消息通知,要对订单做统计,要做销售额统计等等,这些功能是必要的,但是也是附加的功能,要最大程度提高下单这一步的TPS,就要先不考虑这些东西。     下单的核心是买家查看
MySQL性能研究之插入优化
本文出自:http://blog.csdn.net/hongchangfirst  序言         这篇文章研究了在海量数据需求下,MySQL数据库的承载能力。如果读者想尽快的获得帮助,而不想纠于细节,可以只看第一章;如果读者想具体了解结论是怎么得到的,是通过什么方式,可以继续看第二章;当然,所有的实验环境和部分SQL代码在第三章里指出,这一章读者可以快速浏览,以达到管中窥豹的效果。如有
并发链接,大批量写入数据的mysql插入优化
package com.xtuone.friday.server.modules.curriculum.fetchData.insert; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import ja
并发量大的网站,下单要注意的问题
(1)数据互串问题问题描述:发现两个在wap站支付的用户,在订单表中都没有查到订单,但是用户打客服说都支付了,我们查了下这个用户是真的支付了,但是支付的订单号是另外的一个人的订单 问题分析:下单时,数据串了,就是说A用户的请求,被B用户的线程接收了 解决问题方法: 加校验,订单确认页,往session里放一个标识,提交时携带这个标识,在后台接收此参数,与session中此标识对比,一样,则是此用户
mysql insert into (高并发插入时出现的问题) 解决
笔者最近工作中,遇到了一个问题就是笔者在给用户添加虚拟资源的时候出现了资源表中出现了uid 重复 如果按照代码梳理应该不会发生这种情况,但是抽奖程序在高量的并发下 出现了 用户id 重复 程序代码: $badge_data = DB::connection('active')->table('willow_player')->select('id', 'num')
如何处理PHP和MYSQL的并发以及优化
sql优化,数据缓存和页面静态化 首先各种优化程序逻辑优化数据库优化硬件横向扩展 数据hash、服务器提升性能、表hash、出钱找oraclec出解决方案 页面静态化: Php页面静态化有两种,第一,php模板,比如:smarty。第二,url伪静态,通过urlrewrite实现这种做法可以提高网站的排名和收索 像一些管理性质的网站,比如:新闻发布系统、CMS等,使用php模板静态化。一
Web大规模高并发请求和抢购的解决方案
电商的秒杀和抢购,对我们来说,都不是一个陌生的东西。然而,从技术的角度来说,这对于Web系统是一个巨大的考验。当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要。这次我们会关注秒杀和抢购的技术实现和优化,同时,从技术层面揭开,为什么我们总是不容易抢到火车票的原因? 一、大规模并发带来的挑战 在过去的工作中,我曾经面对过5w每秒的高并发秒杀功能,在这个