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

问题描述

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

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

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

解决方案

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

解决方案二:

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

解决方案三:

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

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

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

时间: 2024-08-03 08:05:50

并发下单的优化,如何优化insert操作?的相关文章

《程序设计解题策略》——1.4 利用改进型的二叉查找树优化动态集合的操作

1.4 利用改进型的二叉查找树优化动态集合的操作 我们知道,二叉查找树(binary search tree)能够支持多种动态集合操作,因此在程序设计竞赛中,二叉查找树起着非常重要的作用,它可以用来表示有序集合.建立索引或优先队列等.作用于二叉查找树上的基本操作时间是与树的高度成正比的:对于一棵含n个节点的二叉查找树,如果呈完全二叉树结构,则这些操作的最坏情况运行时间为O(log2n):但如果呈线性链结构,则这些操作的最坏情况运行时间退化为O(n).针对二叉查找树这种不平衡.不稳定的弊病,人们做

数据库性能优化三:程序操作优化提升性能_MsSql

数据库优化包含以下三部分,数据库自身的优化,数据库表优化,程序操作优化.此文为第三部分  概述:程序访问优化也可以认为是访问SQL语句的优化,一个好的SQL语句是可以减少非常多的程序性能的,下面列出常用错误习惯,并且提出相应的解决方案 一.操作符优化 1. IN.NOT IN 操作符 IN和EXISTS 性能有外表和内表区分的,但是在大数据量的表中推荐用EXISTS 代替IN . Not IN 不走索引的是绝对不能用的,可以用NOT EXISTS 代替 2. IS NULL 或IS NOT NU

数据库性能优化三:程序操作优化提升性能

数据库优化包含以下三部分,数据库自身的优化,数据库表优化,程序操作优化.此文为第三部分 概述:程序访问优化也可以认为是访问SQL语句的优化,一个好的SQL语句是可以减少非常多的程序性能的,下面列出常用错误习惯,并且提出相应的解决方案 一.操作符优化 1. IN.NOT IN 操作符 IN和EXISTS 性能有外表和内表区分的,但是在大数据量的表中推荐用EXISTS 代替IN . Not IN 不走索引的是绝对不能用的,可以用NOT EXISTS 代替 2. IS NULL 或IS NOT NUL

javascript性能优化之DOM交互操作实例分析_javascript技巧

本文实例讲述了javascript性能优化之DOM交互操作技巧.分享给大家供大家参考,具体如下: 在javascript各个方面,DOM毫无疑问是最慢的一部分.DOM操作与交互要耗费大量时间,因为它们往往需要重新渲染整个页面或者某一部分.理解如何优化与DOM的交互可以极大提高脚本完成的速度. 1.最小化DOM更新 看下面例子: var list = document.getElementById("ul"); for (var i=0; i < 10; i++){ var ite

ASP.NET性能的优化:网站优化需要考虑的方面

导读:作者燕洋天写了一系列关于ASP.NET的文章.我有段时间没有写ASP.NET的东西了,心里总是觉得缺少了什么,毕竟自己对ASP.NET还是情有独钟的.在本系列文章中,准备比较全面的讲述ASP.NET的性能的优化,从前台到后台,以后本列文也看作为大家的一个手册来查询!以下是文章内容: 网站优化需要考虑的方面 在用ASP.NET开发网站的时候,性能是永远需要考虑和关注的问题,性能不仅仅只是程序代码执行时候的速度,而是涉及到方方面面的东西. 就拿ASP.NET的一个请求来讲,从浏览器向服务器的A

DB2性能优化圣经——优化准则

在制定一个性能优化总体方案时,应当考虑下列准则: 1.牢记缩减回报定律最大的性能收益通常来自最初的努力.以后的修改一般只产生越来越小的效益,并且需要付出更多的努力. 2.不要为了优化而优化优化是为了解除一致的约束.如果优化资源不是引起性能问题的主要原因,那么除非接触了主要约束,否则这种优化对响应时间几乎不产生影响,而且这种优化实际上会使后续优化工作变得更加困难.如果有任何重要的潜在改进因素的话,就在于改进某些资源的性能,这些资源是影响响应时间的主要因素. 3.考虑整个系统永远不能只有话一个参数或

MyBatis魔法堂:Insert操作详解(返回主键、批量插入)

一.前言      数据库操作怎能少了INSERT操作呢?下面记录MyBatis关于INSERT操作的笔记,以便日后查阅.   二. insert元素 属性详解   其属性如下:    parameterType ,入参的全限定类名或类型别名    keyColumn ,设置数据表自动生成的主键名.对特定数据库(如PostgreSQL),若自动生成的主键不是第一个字段则必须设置    keyProperty ,默认值unset,用于设置getGeneratedKeys方法或selectKey子元

对象-C++ primer 里面STL容器set的insert操作问题。。。

问题描述 C++ primer 里面STL容器set的insert操作问题... 在C++primer 5th 的13.4节里面有个类的定义是这样的: class Message { friend void swap(Message&, Message&); friend class Folder; public: //folders被隐式初始化为空集合 explicit Message(const string &str=""):contents(str){}

对于一个偶尔高并发的活动页面(涉及db操作,db为mysql,集群部署),你怎么做

问题描述 对于一个偶尔高并发的活动页面(涉及db操作,db为mysql,集群部署),你怎么做 对于一个偶尔高并发的活动页面(涉及db操作,db为mysql,集群部署),你怎么做 解决方案 高并发的话,可以通过据库集群.库表散列.缓存等技术: 偶尔的话,建议选择mongoDB非关系数据库.你是开发的话我想应该懂mongoDB吧. 对了景安新推出快云mongoDB,你可以去免费公测试试. 解决方案二: 高并发,一般使用负载均衡解决前端访问问题,用进程管理器解决业务逻辑调度问题,db如果是你的业务瓶颈