
(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....
首先明确答复你:超过之后会从0开始编码。下面以表示范围更小的单字节类型为例子说明,如果是有符号数据类型,首先从0开始编码,到127的时候就是最大,下一个数将是-128,随后-127、-126,直到0以后,又会从1开始编码。如果是无符号类型,那么会从0开始到256结束,然后又从0开始编号。上面可能有点糊涂,但是仔细看的话,我相信你能明白。
其次我告诉你:你应该选择足够大的数据类型,为了防止数据重复,你可以让你的程序在未来的十年都不会因为这样的问题成为缺陷,下面是MYSQL各数据类型表示的范围:
类型
字节
带符号的范围
无符号的范围
TINYINT
1
-128~127
0~ 255
SMALLINT
2
-32768~ 32767
0~ 65535
MEDIUMINT
3
-8388608~8388607
0~ 16777215
INT
4
-2147483648~2147483647
0~ 4294967295
BIGINT
8
-9223372036854775808~ 9223372036854775807
0~ 18446744073709551615
不直到你的业务有多少,BIGINT类型可能10年不会存满吧。
最后说一句,不要试图去想办法让ID值重复使用,尽管有许多办法可以实现,但那几乎是得不偿失的。
Access数据库为字段提供了10种数据类型,具体如下:
1.文本型(Text):用于输入文本或文本与数字相结合的数据,最长为255个字符(字节),默认值是50。在Access中,每一个汉字和所有特殊字符(包括中文标点符号)都算作一个字符。
2.货币型(Currency):用来存储货币值,占8个字节,在计算中禁止四舍五入。
3.数字型(Number):用于可以进行数值计算的数据,但货币除外。数字型字段按字段大小分字节、整型、长整型、单精度型、双精度型、同步复制ID和小数7种情形,分别占1、2、4、4、8、16和12个字节。
4.日期/时间型(Date/Time):用于存储日期和(或)时间值,占8个字节。
5、自动编号型(AutoNumber):用于在添加记录时自动插入的序号(每次递增1或随机数),默认是长整型,也可以改为同步复制ID。自动编号不能更新。
6、是/否型(Yes/No):用于表示逻辑值(是/否,真/假),占1个字节。
7、备注型(Memo):用于长文本或长文本与数字(大于255个字符)的结合,最长为65535个字符。
8、OLE对象型(OLE Object):用于使用OLE协议在其它程序中创建的OLE对象(如Word文档、Excel电子表格、图片、声音等),最多存储1GB(受磁盘空间限制)。
9、超级链接型(Hyper Link):用于存放超级链接地址,最多存储64000个字符。
10、查阅向导型(Lockup Wizard):让用户通过组合框或列表框选择来自其它表或值列表的值,实际的字段类型和长度取决于数据的来源。
参考资料来源:百度百科-Microsoft Office Access
参考资料来源:百度百科-数据类型
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)