高并发下投标过程进行优化

原创 2015年11月18日 11:33:24

业务流程


对于一个融资标的invest表, 标的id,标的总融资金额(total_money), 已投资金额(invested_money),满标时间(finish_invest_time),标的状态(status)

假如有多个用户user同时投标,投资金额为M,  为保证数据一致性,以下步聚在同一个事务当中

1.  查询left = total_money - invested_money, 如果left <=0, 则不可投, 如果M > left, 则提示投资金额不能大于剩余可投金额

2. 查询用户资金余额balance, 如果balance<M, 则提示用户账户余额不足请先充值

3. int rows = update user表set balance = balance - M where id = ? and balance - M >=0,如果rows=0,则回滚

4. 插入记录到已投资列表表中insert into invest_list表

5. int rows = update invest表 set invested_money = invested_money + M where id = ? and invested_money + M <= total_money, 如果rows=0则事务回滚

6. 查询left = total_money - invested_money,如果left=0,则更改状态status为'还款中',满标时间为当前时间

7.给用户发送短信或邮件提示投标成功


如果按照此事务流程,系统最容易堵塞在步骤5中,系统的并发度比较低, 所以计划采用异步队列的方式

 将标的id,和可投资金额left=total_money - invested_money保存在内存ConcurrentHashMap中, 当用户投资金额M时, left = left - M,如果left> 0时,表示可投,则分出一个线程并在同一个事务中用来执行如下操作

1. 查询用户资金余额balance, 如果balance<M, 则提示用户账户余额不足请先充值,并将map中left加回M

2. int rows = update user表set balance = balance - M where id = ? and balance - M >=0,如果rows=0,则回滚并将map中left加回M

3. 插入记录到已投资列表表中insert into invest_list表,并将该用户投资记录放到一个queue中去

4. 从queue中取出该用户投资记录,并异步执行上一个事务的5、6、7步聚


总结, 想方设法将单事务任务转变成多线程任务来执行, 使用消息队列来达到最终一致性



PHPer必知:高并发网站应该如何进行优化?

PHPer打交道最多的就是网站。一个没有流量的网站,毫无疑问不能说有价值的网站。但是如果手里管理的网站是高并发、大流量的网站,虽然是好事,但是如果处理不好,就会导致网站访问缓慢,用户体验极度不好。那么...

招投标过程---投标之述标 大杂烩

唱标与述标 唱标 简介  开标时,公开宣读投标人关于投标人报价、工期、质量、工程项目经理等招标人有实质要求的内容。唱,意即大声地公布。唱标人可以是投标人,也可以是参加开标会的其他工作人员,但除投标...
  • wlanye
  • wlanye
  • 2011年09月06日 21:43
  • 5049

大数据量高并发的数据库优化

  • 2010年06月05日 19:22
  • 20KB
  • 下载

高并发性的设计和优化

  • 2016年10月31日 22:27
  • 1.55MB
  • 下载

特定数量的商品如何在高并发下进行库存锁定 ?

特定数量的商品如何在高并发下进行库存锁定 ? PMCAFF产品经理 12-22 对于特定数量的商品,如何在高并发下进行库存锁定呢 ? 促销的商品数量有限,用户加入购物车后,实际库...
  • hl_java
  • hl_java
  • 2017年08月08日 17:18
  • 705

Linux下使用ab命令进行高并发压力测试

1、做压力测试的工具:ab 2、性能的监控工具:nmon     查看下linux主机上的ulimit -n 的数据,没有改动过的是1024,最好要改的大一点。这个是linux下最大线程数,如果过...

不适用临时表进行分页,筛选,查询,避免高并发的方法。

 ALTER proc [dbo].[GetD_OrderInfoCollectionForPaging] (         @PageIndex int,     ----当前的页码 ...

单机模拟高并发进行压力测试

本文主要介绍如何使用netty实现C100K级别的并发长连接

高并发支撑设计及优化规范

  • 2017年10月24日 11:46
  • 1.32MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:高并发下投标过程进行优化
举报原因:
原因补充:

(最多只允许输入30个字)