分享超级表格的id号的生成规则

原创 2013年12月04日 11:54:14

关键词:
记录ID
GUID
如何生成唯一ID
如何生成不太长的纯数字ID
超级表格




表记录的关键字段(一般取名为id)的值的生成方式,通常有下列几种:

1、数据库自增,即从0开始,每次加1。在记录插入到数据库表时生成;这是mysql数据库的用户最多人的选择。不足之处是在新记录插入数据库前,并不知道它的值;第二个不足是无法在多个表记录间保持id唯一(某些系统会要求这点,这个理解起来有一定困难。)
2、GUID字符串:全局唯一标识符(GUID,Globally Unique Identifier)。GUID是一种由算法生成的二进制长度为128位的数字标识符。GUID主要用于在拥有多个节点、多台计算机的网络或系统中。在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。GUID 的总数达到了2^128(3.4×10^38)个,所以随机生成两个相同GUID的可能性非常小,但并不为0。GUID一词有时也专指微软对UUID标准的实现。
不足是字段类型必须是字符串,排序和性能都不如数字类型。
3、时间戳:精确到毫秒,意味着当同一个毫秒有多条记录生成时,id就可能重复,导致新记录无法插入。
4、自定义函数

超级表格某些关键表的id的生成,有下列要求:
1、高性能,最好是数字类型,而不是字符串;
2、提前生成(而不是在插入数据库后才生成),即在用户输入页面时就生成;
3、不但要求本表唯一,而且不能与其它表记录的id重复。因为有些公共的表会把来自不同表的记录的id记录在一起。
4、足够低的重复概率,能满足超级表的数量的要求。

为满足这些要求,我们设计了一个简单而实用的timeid的生成方式。
首先用时间函数生成一个包括年、月、日、时、分、秒、毫秒的数字类型的字符串。例如2013年12月3日14时50分12秒345毫秒,对应的字符串是131203145012345。
我们只取年分的最后两位,这样可以节省两位数,而且能满足100年不重复(足够了)。
如果只是这个算法生成的id,万一在同一毫秒生成了多个id,那就重复了。为了继续减少重复概率,我们又加上了从10000到99999之间的一个随机数。
这意味着,在同一时间(精确到毫秒),有10万分之一的重复概率。足够低了,足以满足超级表格的数量级别要求。

timeid除了重复率足够低,因为完全是数字组成,可以存储为数字类型,性能高;而且是按时间先后顺序生成,id基本也是递增的(之所以说是“基本”,因为同一毫秒内的id可能不是递增)。
不足是数字位数达20位,显得稍多,需用double类型存储。


下面就是生成timeid的函数js代码:

//获得时间随机数,从年份的最后2位,到毫秒,最后加5 位随机数,共20位。例如13112918400745636211
function getTimeId()
{
var date1=new Date();
var r="";
r=date1.getFullYear().toString().substring(2);
var d=date1.getMonth()+1;
if (d<10)r+="0"+d;else r+=d;
d=date1.getDate();
if (d<10)r+="0"+d;else r+=d;
d=date1.getHours();
if (d<10)r+="0"+d;else r+=d;
d=date1.getMinutes();
if (d<10)r+="0"+d;else r+=""+d;
d=date1.getSeconds();
if (d<10)r+="0"+d;else r+=""+d;
var d=date1.getMilliseconds();
if (d<10)r+="0"+d;
else
if (d<100)r+="00"+d;
else r+=d;

var   x="0123456789";
var   tmp="";
for(var   i=0;i<5;i++)
tmp+=x.charAt(Math.ceil(Math.random()*100000000)%x.length);
r+=tmp;
return r;
}



超级表格



生成唯一id号解决方法

生成唯一id号解决方法 1  添加一个id自增表t_Next  FUserID(用户唯一标示符) FTableName(要唯一id号的表的名称) FNextNo(下一个id号) 2 添加存储过...
  • tlammon
  • tlammon
  • 2016年03月29日 19:58
  • 468

MongoDB中ObjectId生成规则参考

MongoDB中我们经常会接触到一个自动生成的字段:”_id”,类型为ObjectId。本文会详解ObjectId的构成和使用。ObjectId构成之前我们使用MySQL等关系型数据库时,主键都是设置...
  • liuzx32
  • liuzx32
  • 2017年02月17日 15:41
  • 3994

3分钟让你学会如何用超级表格发布搜索,查询数据

据说看了这篇文章的人,工作效率提升了300%
  • kongki
  • kongki
  • 2016年09月28日 18:15
  • 1825

3分钟学会用超级表格发布在线表单收集数据

3分钟学会在使用超级表格发布表单,在线收集数据。
  • kongki
  • kongki
  • 2016年09月23日 09:59
  • 2320

生成唯一id号解决方法

生成唯一id号解决方法 1  添加一个id自增表t_Next  FUserID(用户唯一标示符) FTableName(要唯一id号的表的名称) FNextNo(下一个id号) 2 添加存储过...
  • tlammon
  • tlammon
  • 2016年03月29日 19:58
  • 468

分布式全局不重复ID生成算法

在分布式系统中经常会使用到生成全局唯一不重复ID的情况。本篇博客介绍生成的一些方法。  常见的一些方式:  1、通过DB做全局自增操作  优点:简单、高效  缺点:大并发、分布式情况下...
  • guodongCC322
  • guodongCC322
  • 2017年02月15日 16:19
  • 764

解析各大电子商务网站订单号的生成方式

摘要:订单是整个电子商务的核心。整个电子商务的流程也是围绕订单的状态执行的。这篇博客主要向大家介绍订单号的生成方式... 订单是整个电子商务的核心。整个电子商务的流程也是围绕订单的状态执行的...
  • Yahuvi
  • Yahuvi
  • 2016年03月07日 13:54
  • 9439

集装箱编号校验码规则及java程序的实现

由于工作原因要接触到集装箱编号,便了解了下集装箱编号最后一位校验位的规则顺便写了个程序实现,找了一批编号,验证通过,贴出来做个记录。集装箱校验码校验规则: 集装箱号由4位公司代码和7位数字组成(如CB...
  • benkwok
  • benkwok
  • 2017年02月10日 16:01
  • 1153

电商平台订单号生成策略

订单是整个电子商务的核心。整个电子商务的流程也是围绕订单的状态执行的。这篇博客主要向大家介绍订单号的生成方式。 现在大型电商网站大多都有好几种下单途径。比如:通过Web网站下单,通过打电话到呼叫...
  • hughtw
  • hughtw
  • 2014年12月10日 10:00
  • 2469

Android 设备唯一标识生成方式

Android设备唯一标识生成方式 为什么很多安卓应用都要获取IMEI? 很多应用都会要求获取IMEI,尤其神奇的是,我禁用了天猫客户端的权限,弹出来一行英文,大概是什么内容获取不到,无法登录,又...
  • zhimingshangyan
  • zhimingshangyan
  • 2016年04月02日 16:15
  • 6526
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:分享超级表格的id号的生成规则
举报原因:
原因补充:

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