文档章节

高并发下生成订单唯一流水号的方法

alan-
 alan-
发布于 2015/06/28 22:04
字数 384
阅读 348
收藏 1

1 设置主键自增为何不可取

这样的话,数据库本身是单点,不可拆库,因为id会重复。


2 依赖数据库自增机制达到全局ID唯一

使用如下语句:

REPLACE INTO Tickets64 (stub) VALUES ('a');

SELECT LAST_INSERT_ID();

这样可以保证全局ID唯一,但这个Tickets64表依旧是个单点。


3 依赖数据库自增机制达到全局ID唯一并消除单点

在2的基础上,部署两个(多个)数据库实例,

设置自增步长为2(多个则为实例数),即auto-increment-increment = 2

设置auto-increment-offset分别为1,2.....

这样第一台数据库服务器的自增id为 1 3 5 7 9

第二台为2 4 6 8 10


4 解决每次请求全局ID都读库写库压力过大的问题

比如第一次启动业务服务,会请求一个唯一id为3559

如果是2、3的方法,则id为3559,这样每次都请求数据库,对数据库压力比较大

可以用3559 * 65536(举个例子,并不一定是65536)+ 内存自增变量来作为id

当内存自增变量到达65535时,从数据库重新获取一个自增id

这样即使有多台业务服务器,id也不会重复:

第一台 3559 * 65536 + 1,2,3.....65535

第二台 3560 * 65536 + 1,2,3.....65535

然后第一台到65535了,换一个数据库自增id,这时候可能是3561 * 65536 + 1,2,3....



本文转载自:java吧

alan-
粉丝 8
博文 9
码字总数 1342
作品 0
浦东
程序员
私信 提问
PHP生成订单号算法

首先,订单号不适合用自增字段,因为会暴露一个网站的业务量(参见“德国坦克问题” http://en.wikipedia.org/wiki/Germantank_problem)。另外,通常在订单在写入数据库之前,业务就需要用到...

jims
2016/08/28
0
0
ASP.NET 生成唯一不重复的订单号 支持多用户并发、持多数据库的实现参考

ASP.NET 生成唯一不重复的订单号 支持多用户并发、持多数据库的实现参考(C#.NET通用权限管理系统组件源码组成部分) 我们在日常开发项目过程中往往需要各种订单单号的产生方法,而且是支持多...

技术小阿哥
2017/11/27
0
0
再问订单号生成算法?

业务场景,高并发,多用户操作 使用microtime生成的时间戳生成唯一订单序列号,事实上高并发情况下有一定的重复几率,就连uniqid($more_entropy参数为false)函数生成的序列号都可能有重复的...

主编
2015/01/21
7.9K
18
mysql并发插入重复数据问题的解决思路

一、问题描述 涉及到的功能是一个表单页面添加数据,后端接口的功能就是往数据库中写入表单的数据,系统属于后台系统,但因为跟钱有关,添加的数据要保证同一次填写的数据只能入一次库。 测试...

八月下沙
2016/12/21
723
0
支付宝支付设计文档

进入支付宝开放平台,注册开放平台密钥或者mapiwang'guan payment 支付表 名称 类型 描述 user_id integer 用户ID payment_no string 支付单号(支付的时候生成一个唯一的支付单号) transa...

藤原佐为
2017/12/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
今天
5
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
今天
8
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
12
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
16
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部