秒杀设计 mysql_秒杀程序数据库设计
上个月有幸去腾讯逛了一圈,面试一个职位,尽管没被录取可是过程整体来讲还是愉快的。面试过程中面试我的小朋友(看年龄大概在26,7岁)问了我一个关于秒杀的问题,他说腾讯游戏常常会有秒杀的活动,非常多次会导致server死锁或压力太大,应该怎样设计减轻数据库server压力。当然由于面试的是PHP职位,我做的是C#和JAVA我知道应该没机会所以本不想太过“配合”的回答,可是看面试我的小朋友看我好像非常不削的样子(可能由于面试的是PHP职位并且一上来就让我做题目,尽管我有点不情愿做题可是毕竟是腾讯还是做了可是PHP接触的真的不多所以题目差点儿是连蒙带猜的完毕的,预计不是非常好看),所以还是认真想了想解决方式。
秒杀说究竟就是瞬间大规模訪问,导致的压力,前端我们能够使用集群技术,数据库呢?拆表?是个方法,可是假设仅仅是简单拆表仍然会有问题,毕竟秒杀商品被记录到表中后用户秒杀必然是须要通过改动表中已有的秒杀商品记录来确定这个商品是否已经被秒走。为了防止抢到同一条记录加锁是必须。而数据库一锁性能问题就来了。那怎么办呢?我想了一个方法(至少有一点能够确定腾讯游戏没实用这种方法解决),秒杀时并非立马去改动数据库中记录(进行update操作),而是先向一张表中插入一条记录,类似进入等待队列,为了防止大规模插入操作导致锁表我们能够将队列表拆成多张同样结构表。有一个job会不断读取这些队列表并依照插入时间排列计算那些记录被秒杀成功。而client在点击秒杀button后断开连接,几秒后再次通过查询语句来查询结果,并返回给前台客户。
这样做的优点秒杀过程是分段的,前台用户在秒杀时仅是向(多张队列表中)某一张队列表中插入一条记录,之后便断开本次连接进入等待,job程序通过合并查询将多张秒杀表合并按插入时间排序,按规则得出秒杀成功的用户并改动秒杀商品表,表明此商品已被秒杀,前台程序在等待几秒后查询秒杀商品表获得自己是否已秒杀成功。
由于第一步仅仅是插入操作,无需操心同步操作带来的脏数据问题,所以我们能够通过拆表来分散压力减少隔离等级。更新操作是有一个单独的job程序完毕的,由于仅仅有一个程序会去改记录所以就不存在锁表问题。最后前台通过查询语句来获取结果,由于查询商品秒杀结果也不须要不论什么的顺序仅仅须要知道是不是你自己抢到的就好,所以能够使用with(nolock)一类的忽略锁机制来运行。
秒杀设计 mysql_秒杀程序数据库设计相关推荐
- 固定资产管理mysql_固定资产管理系统数据库设计
固定资产管理系统数据库设计 如何看待固定资产管理系统数据库设计呢?近年来越来越多的企业在资产管理方面投入着更多的精力,主要就是因资产管理是企业生产经营活动中比较重要的环节.而其中固定资产又是企业中资产 ...
- (数据库系统概论|王珊)第七章数据库设计-第一节:数据库设计概述
注意:此部分内容和软件工程的知识点重合较多,更多请点击[免费分享]软件工程核心知识点 本章较分散,各节导航如下 (数据库系统概论|王珊)第七章数据库设计-第二节:需求分析 (数据库系统概论|王珊)第七 ...
- 【学习记录】第一章 数据库设计-《SQL Server数据库设计和开发基础篇视频课程》...
一.课程笔记 1.1 软件开发周期 (1)需求分析阶段 分析客户的业务和数据处理需求. (2)概要设计阶段 设计数据库的E-R模型图,确认需求信息的正确和完整. /* E-R图:实体-关系图(Ent ...
- 餐饮管理系统 mysql数据库设计分析_终稿课程设计_餐饮管理系统数据库设计.docOK版(样例3)...
<课程设计_餐饮管理系统数据库设计.doc>由会员分享,可免费在线阅读全文,更多与<(终稿)课程设计_餐饮管理系统数据库设计.doc(OK版)>相关文档资源请在帮帮文库(www ...
- 在线答题小程序数据库设计
背景介绍 最近有不少朋友咨询我在线答题小程序的数据库集合设计,现专门写文整理下,该小程序目前包含以下十个集合 数据库设计 admin 该集合主要用于指定管理员openid,对于部分openid开放创建 ...
- 数据库设计五要点 让数据库设计更加规范
通常情况下,可以从两个方面来判断数据库是否设计的比较规范.一是看看是否拥有大量的窄表,二是宽表的数量是否足够的少.若符合这两个条件,则可以说明这个数据库的规范化水平还是比较高的.当然这是两个泛泛而谈的 ...
- 数据库设计(二)——数据库设计原则
一.数据库表的设计原则 1.不应该针对整个系统进行数据库设计,而应该根据系统架构中的组件划分,针对每个组件所处理的业务进行组件单元的数据库设计:不同组件间所对应的数据库表之间的关联应尽可能减少,如果不 ...
- 数据库设计方法与规范 数据库设计过程
数据库技术是信息资源管理最有效的手段.数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户信息要求和处理要求. 数据库设计中需求分析阶段综合各个用 ...
- mysql数据库设计的原则_MySQL数据库设计原则
转自 http://www.supidea.com/post/mysql_design_database.aspx MySQL数据库设计原则 MySQL对于成为一个非常快速的数据库服务器有着当之无愧的 ...
- mysql 游戏服务器设计_网络游戏服务器数据库设计和实现.doc
网络游戏服务器数据库设计和实现 摘 要 随着的普及,网络游戏已经成为大家耳濡目染的新生事物.现在,可以说网络游戏已经成为人们休闲.娱乐的有效方式.网络游戏必须依托于互联网可以多人同时参与游戏,通过人与 ...
最新文章
- java list 拼音排序_java中实现List集合中对象元素按其属性的中文拼音排序
- java第四节 类的继承/抽象/接口/多态性
- 汇编语言--转移指令
- java中class.forname连接mysql数据库_数据库链接与 Class.forName()用法详解
- 微信小程序--页面传参
- Effective C++学习第五天
- JAVA设计模式-装饰器模式(Decorator)
- 西工大疫情期间关于如何做好博士学位论文专题讲座笔记
- 风哥Oracle数据库视频培训教程大合集(网盘下载.共18套)
- mysql数据库客户端--navicat for mysql 12中文破解版64位/32位 v12.0.29
- 在网易游戏的第三年——Jerish的2021总结
- mp3格式怎么转html格式转换器,flac转mp3格式转换器 如何将flac格式的音频文件转换为MP3格式...
- windows7操作系统安装步骤(精简版)
- C语言 金明的预算方案(动态规划):金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用 的很宽敞的房间。
- 今日头条2018校招测试开发方向(第一、二、三、四批)编程题汇总 - 题解
- ios 行间距和段落间距_如何在Microsoft Word中控制行间距和段落间距
- java通过struts实现web中的文件上传
- 什么叫共同富裕,刘强东给老板们打了个样
- Pandas str列内置方法
- JVM内存与垃圾回收篇——堆