一种数据库记录唯一标识符生成的方法及装置的制作方法

文档序号:6577475阅读:214来源:国知局
专利名称:一种数据库记录唯一标识符生成的方法及装置的制作方法
一种数据库记录唯一标识符生成的方法及装置技术领域本申请涉及计算机技术领域,尤其涉及一种数据库记录唯一标识符生成 的方法及装置。
背景技术
在数据库系统的开发中,往往会用到唯一标识符来作为数据表的主键, 以区别数据表的每一行记录,而唯一标识符的生成方式直接影响数据表中数 据的写入效率和检索效率。
一般来说,如果不同计算机各自生成唯一标识符时不需要一个集中的服务器来协调,这样的方法是效率高的;如果生成的唯 一标识符的顺序符合数据记录天然顺序,这样的唯一标识符对于数据检索效 率较高;如果计算机生成的唯一标识符所占字节越少,这样的唯一标识符对 于数据检索效率越高,并且更节省存储空间;如果计算机生成的唯一标识符 符合大多数编程语言的标识符定义,则这样的唯一标识符是对编程友好的。目前,生成唯一标识符的方法主要有两种。 一种是利用数据库提供的自 增机制来生成唯一标识符。一般的数据库都会提供自增数据类型或自增序列。对于需要生成唯一标 识符的数据列,首先要指定该数据列为自增数据类型或指定其从自增序列中 取得自增数值。当需要生成唯一标识符时,只需向数据库的数据表插入记录, 唯一标识符的数据列就会自动产生。对于自增数据类型或自增序列,每次产生的值都会自动增加,这样就能保证所生成标识符的有序性。如果是数据库 的客户端需要生成唯一标识符,则客户端需要往返数据库服务器后才能得到 唯一标识符,数据库服务器也就成为了各个客户端生成唯一标识符的协调服 务器。例如,在MS SQL Server数据库中就提供了 一种特殊的数据类型属性标识 符。在每次产生新记录的时候,标识符列都会自动增长,以实现数据记录的唯一标识。再如,在ORACLE数据库中也提供了SEQUENCE机制,来实现自 增机制的唯一标识符生成。当需要使用自增标识符的时候,可从相关的 SEQUENCE中获取不断增长的序列值。另一种是4吏用随机算法生成唯一标识符,例如使用UUID (Universal Unique Identifier,世界统一标识符)算法或GUID ( Global Unique Identifier, 全球统一标识符)算法来生成唯一标识符。利用随机算法来生成唯一标识符,主要是利用时间和计算机当前的软硬 件信息来产生随机数。因此,在不同的计算机中每次生成的标识符是完全不 相同的,这就保证了标识符的唯一性。例如,首先使用GUID算法用随机数生成标识符开头部分,接下来使用系 统的时间戳、机器运行状态和硬件特征等信息来增加标识的随机性。这样可 以保证世界上任何两台计算机所生成的标识都是唯一的。需要特别指出的是, 虽然使用GUID算法生成的唯一标识符中包括了系统的时间瞿t但是由于位于 该标识符开头部分的是随机数,所以标识符不符合数据记录天然顺序,仅仅 只是保证标识符的唯一性。在实现本申请的过程中,发明人发现现有技术存在以下缺点 1.利用数据库提供的自增机制生成唯一标识符的缺点。 利用数据库提供的自增机制生成的标识符并非全球唯一,不具有唯一性 在单一数据库情况下,自增机制可以保证标识的唯一性。然而在分布式 的多数据库环境下,则无法保证数据库之间的标识唯一性。这就导致在分布 式数据库之间重新分割或移动数据时,会面临非常复杂的标识冲突管理问题。 例如,使用MS SQL Server或ORACLE数据的自增机制时,自己公司内的 标识唯一性问题可以通过制定统一的策略来控制。但一旦要和别的公司进行数据交换时,就会出现存在多个相同的唯一标识符的问题,其根源就在于自 增机制产生的标识并非全球唯一的。又例如,不同的MS SQL Server或ORACLE数据服务器自己会维护一套自 增序列数据。但对于分布式的数据库存储来说,同一个数据集合的数据会分 散到多个数据库中存储。这就要求每一个数据库所产生的自增标识要与其他数据库所产生的标识不同才行,否则会产生标识唯一性冲突。而数据库各自 的自增机制并没有考虑到与其他数据库的冲突问题。因此,为了能在分布式 存储环境下仍然能使用数据自增机制,必须规定各个数据库的自增策略,每 个数据库按互不沖突的规则来产生自增标识。同时,当需要增加新的存储数 据库,或者将数据库的记录再分开存储,或者将部分数据从一个数据移到另 一个数据库时,整套标识自增控制策略可能又要进行一次大调整。这些都给 分布式存储的开发带来不少的问题和麻烦。2.利用随机算法生成唯一标识符的缺点利用随机算法生成的标识符不符合数据记录天然顺序,不具有有序性随机产生的唯一标识符没有一定的次序,与数据记录的自然顺序无关。检索相关的B+树逻辑顺序与物理顺序不相同,从而导致数据检索效率越低。而且,数据读取或检索时涉及的緩存机制大都是连续性的缓存机制,而利用 随机算法生成的唯一标识符并不存在连续性,因此,读取或检索这样的唯一 标识符导致緩存效率较低。例如,GU1D或UUID生成的标识符是完全随机的。在插入数据库记录时, 前一条插入记录的物理位置与后一条插入的物理位置一般都很接近。但这两 条记录的逻辑顺序是与标识的顺序相关的,而两次生成的标识符完全随机, 这就导致了记录的逻辑顺序与物理顺序完全不同,反映在^f全索记录所需索引 的B+树排列结构上,物理上相邻的两个节点的逻辑上完全不相邻。从而导致 检索数据时,往往需要在索引文件或数据文件上大幅进行指针跳转操作,影响检索速度。 发明内容本申请实施例提供一种数据库记录唯一标识符生成的方法及装置,解决 了唯一标识符的唯一性和有序性无法同时实现的问题,在保证标识符唯一性 的同时保证了标识符的有序性。本申请实施例提供了 一种数据库记录唯一标识符生成的方法,包括以下 步骤获取系统时间;根据所述系统时间生成时间部分字符串; 生成随机部分字符串;将所述时间部分字符串和所述随机部分字符串拼接成唯一标识符,所述时间部分字符串位于所述唯一标识符的开头位置;将所述唯一标识符分配给数据表作为所述数据表的主^t。其中,所述根据所述系统时间生成时间部分字符串包括根据所述系统时间获得时间部分待转换值;将所述时间部分待转换值转换为所述时间部分字符串。其中,所述将时间部分待转换值转换为所述时间部分字符串包括将所述时间部分待转换值转换为所述时间部分字符串中第一位字符,所述第一位字符为A-Z中的任意一个字符;最后一位字符,所述第二位字符到最后一位字符中的每位字符为0-9和/或A-Z 中的任意一个字符;将所述第 一位字符到最后 一位字符拼接成所述时间部分字符串。位字符包括根据所述时间部分待转换值计算所述第 一位字符对应的可转换值; 将计算得到的所述第一位字符对应的可转换值转换为所述A-Z中的任意一个字符。其中,所述将所述时间部分待转换值转换为所述时间部分字符串中的第 二位字符到最后一位字符包括根据所述时间部分待转换值计算所述第二位字符到最后一位字符对应的 可转换值;将计算得到的所述第二位字符到最后一位字符对应的可转换值转换为所 述0-9和/或A-Z中的任意一个字符。其中,所述将时间部分4争转换值转换为所述时间部分字符串包括最后一位字符,所述第一位字符到最后一位字符为0-9和/或A-Z中的任意一 个字符;
将所述第一位字符到最后一位字符拼接成所述时间部分字符串。
其中,所述将所述时间部分待转换值转换为所述时间部分字符串中的第
一位字符到最后 一位字符包括
根据所述时间部分待转换值计算所述第一位字符到最后一位字符对应的
可转换值;
将计算得到的所述第一位字符到最后一位字符对应的可转换值转换为所 述0-9和/或A-Z中的任意一个字符。
其中,所述生成随机部分字符串包括 生成随机数;
根据所述随机数获取随机部分待转换值; 将所述随机部分待转换值转换为所述随机部分字符串。 其中,所述将随机部分待转换值转换为所迷随机部分字符串包括 将所述随机部分待转换值转换为所述随机部分字符串中的第 一位字符到
最后一位字符,所述第一位字符到最后一位字符为0-9和/或A-Z中的任意一
个字符;
将所述第一位字符到最后一位字符拼接成所述随机部分字符串。
一位字符到最后一位字符包括.-
根据所述随机部分待转换值计算所述第一位字符到最后一位字符对应的 可转换值;
将计算得到的所述第 一位字符到最后一位字符对应的可转换值转换为所 述0-9和/或A-Z中的任意一个字符。
本申请实施例提供了 一种实现数据库记录唯一标识符生成的装置,包括 系统时间获取模块、时间部分字符串生成模块、随机部分字符串生成模块、字符串拼接模块和标识符分配模块,其中,
所述系统时间获取模块,用于获取系统时间;
所述时间部分字符串生成模块,与所述系统时间获取模块连接,用于根
据所述系统时间获耳又^^莫块获取的系统时间生成时间部分字符串; 所述随机部分字符串生成模块,用于生成随机部分字符串; 所述字符串拼接模块,与所述时间部分字符串生成模块和所述随机部分 字符串生成模块分别连接,用于将所述时间部分字符串生成模块生成的时间 部分字符串和所述随机部分字符串生成模块生成的随机部分字符串拼接成唯 一标识符,所述时间部分字符串位于所述唯一标识符的开头位置;
所述标识符分配^^块,与所述字符串拼接^f莫块连接,用于将所述字符串 拼接模块获得的唯一标识符分配给数据表作为所述数据表的主键。
其中,所述时间部分字符串生成模块包括时间部分待转换值获取单元和 时间部分字符串获取单元,其中,
所述时间部分待转换值获取单元,用于根据所述系统时间获取时间部分
待转换值;
所述时间部分字符串获取单元,与所述时间部分待转换值获取单元连接, 用于将所述时间部分待转换值获取单元获取的时间部分待转换值转换为所述 时间部分字符串。
其中,所述时间部分字符串荻取单元包括第一获取子单元、第二获取子 单元和第一处理子单元,其中,
所述第一获取子单元,用于将所述时间部分待转换值转换为所述时间部 分字符串中第一位字符,所述第一位字符为A-Z中的任意一个字符;
所述第二获取子单元,用于将所述时间部分待转换值转换为所述时间部 分字符串中的第二位字符到最后一位字符,所述第二位字符到最后一位字符
中的每位字符为0-9和/或A-Z中的任意一个字符;
所述第一处理子单元,与所述第一获取子单元和所述第二获取子单元分 别连接,用于将所述第一获取子单元和所述第二获取子单元获取的第一位字 符到最后一位字符拼接成所述时间部分字符串。其中,所述第一获取子单元具体用于,根据所述时间部分待转换值计算
所述第一位字符对应的可转换值;将计算得到的所述第一位字符对应的可转 换值转换为所述A-Z中的任意一个字符。
其中,所述第二获取子单元具体用于,根据所述时间部分待转换值计算 所述第二位字符到最后一位字符对应的可转换值;将计算得到的所述第二位 字符到最后一位字符对应的可转换值转换为所述0-9和/或A-Z中的任意一个 字符。
其中,所述时间部分字符串获取单元包括第三获取子单元和第二处理子 单元,其中,
所述第三获取子单元,用于将所述时间部分待转换值转换为所述时间部 分字符串中的第一位字符到最后一位字符,所述第一位字符到最后一位字符
为0-9和/或A-Z中的任意一个字符;
所述第二处理子单元,与所述第三获取子单元连接,用于将所述第三获 取子单元获取的第一位字符到最后一位字符拼接成所述时间部分字符串。
其中,所述第三获取子单元具体用于,根据所述时间部分待转换值计算 所述第一位字符到最后一位字符对应的可转换值;将计算得到的所述第一位 字符到最后一位字符对应的可转换值转换为所述0-9和/或A-Z中的任意一个 字符。
其中,所述随机部分字符串生成模块包括随机数生成单元、随机部分待 转换值获取单元和随机部分字符串获取单元,其中, 所述随机数生成单元,用于生成随机数;
所述随机部分待转换值获取单元,与所述随机数生成单元连接,用于根 据所述随机数生成单元生成的随机数获取随机部分待转换值;
所述随机部分字符串获取单元,与所述随机部分待转换值获取单元连接, 用于将所述随机部分待转换值获取单元获取的随机部分待转换值转换为所述 随机部分字符串。
其中,所述随机部分字符串获取单元包括第四获取子单元和第三处理子 单元,其中,所述第四获取子单元,用于将所述随机部分待转换值转换为所述随机部 分字符串中的第一位字符到最后一位字符,所述第一位字符到最后一位字符
为0-9和/或A-Z中的^f壬意一个字符;
所述第三处理子单元,与所述第四获取子单元连接,用于将所述第四获 取子单元获取的第一位字符到最后一位字符拼接成所述随机部分字符串。
其中,所述第四获取子单元具体用于,根据所述随机部分待转换值计算 所述第一位字符到最后一位字符对应的可转换值;将计算得到的所述第一位 字符到最后一位字符对应的可转换值转换为所述0-9和/或A-Z中的任意一个 字符。
本申请实施例中,通过将生成的时间部分字符串和随机部分字符串拼接 成唯一标识符,并将时间部分字符串置于唯一标识符的开头位置,解决了唯 一标识符的唯一性和有序性无法同时实现的问题,在保证标识符唯一性的同 时保证了标识符的有序性。


为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实 施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下 面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲, 在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例一中一种数据库记录唯一标识符生成的方法的流程
图2是本申请实施例 一 中 一 种生成时间部分字符串的方法的流程图3是本申请实施例一中一种将时间部分待转换值转换为时间部分字符 串的方法的流程图4是本申请实施例一中一种将时间部分待转换值转换为时间部分字符 串的方法的流程图5是本申请实施例一中一种将时间部分待转换值转换为时间部分字符 串的方法的流程图;图6是本申请实施例一中一种生成随机部分字符串的方法的流程图; 图7是本申请实施例一中一种将随机部分待转换值转换为随机部分字符 串的方法的流程图8是本申请实施例二中一种数据库记录唯一标识符生成的方法的流程
图9是本申请实施例三中一种数据库记录唯一标识符生成的方法的流程
图lo是本申请实施例四中 一种数据库记录唯一标识符生成的方法的流程
图11是本申请实施例五中一种数据库记录唯一标识符生成的方法的流程
图12是本申请实施例六中 一种数据库记录唯一标识符生成的方法的流程
图13是本申请实施例七中一种数据库记录唯一标识符生成的方法的流程
图14是本申请实施例八中 一种实现数据库记录唯 一标识符生成的装置的 结构图15是本申请实施例八中 一 种时间部分字符串生成模块的结构图; 图16是本申请实施例八中 一种时间部分字符串获取单元的结构图; 图17是本申请实施例八中 一种时间部分字符串获取单元的结构图; 图18是本申请实施例八中一种随机部分字符串生成模块的结构图; 图19是本申请实施例八中 一种随机部分字符串获取单元的结构图。
具体实施例方式
为了使本申请的目的、技术方案和优点更加清楚,下面结合附图和具体 实施例对本申请进行详细描述。显然,所描述的实施例仅仅是本申请一部分 实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保 护的范围。
本申请中,通过提供一种数据库记录唯一标识符生成方法及装置,通过 将生成的时间部分字符串和随机部分字符串拼接成唯一标识符,并将时间部 分字符串置于唯一标识符的开头位置,解决了唯一标识符的唯一性和有序性 无法同时实现的问题,在保证标识符唯一性的同时保证了标识符的有序性。 下面结合附图和实施例,对本申请的具体实施方式
作进一步详细描述 本申请实施例一提供了 一种数据库记录唯一标识符生成的方法,如图1所
示,包括以下步骤
步骤101,获取系统时间并根据系统时间生成时间部分字符串。 步骤102,生成随机部分字符串。
步骤103,将时间部分字符串和随机部分字符串4并接成唯一标识符,时间 部分字符串位于唯一标识符的开头位置。
步骤104,将唯一标识符分配给数据表作为数据表的主键。具体的,数据 库中的每张数据表都具有固定的主键列,该主键列中的每个主键用以唯一标 识数据表的每一行记录。则将唯一标识符分配给数据表作为数据表的主键的 过程即将唯一标识符写入到对应数据行的主键列中。
其中,步骤101和步骤102没有必然的先后顺序。即生成时间部分字符串 和随机部分字符串的过程可以并行进行,也可以根据具体的设置先后进行。
本申请实施例一还提供了一种生成时间部分字符串的方法,如图2所示, 包括以下步骤
步骤201 ,根据系统时间获取时间部分待转换值。
在使用本实施例提供的方法时,需要预先设置一个系统时间为计时零点, 该计时零点对应的毫秒整数值为O。在获取了系统时间后,将获取的系统时间 与计时零点对应的系统时间相减并将差值精确到毫秒,得到系统时间对应的 毫秒整数值。得到系统时间对应的毫秒整数值后,可以直接将系统时间对应 的毫秒整数值直接作为时间部分待转换值,也可以将系统时间对应的毫秒整 数值乘以时间部分转换系数,得到时间部分待转换值。步骤202,将时间部分待转换值转换为时间部分字符串。
具体的,可以采用如图3所示步骤将时间部分待转换值转换为时间部分字符串。
步骤301,将时间部分待转换值转换为时间部分字符串中第一位字符,第 一位字符为A-Z中的任意一个字符。
步骤302,将时间部分待转换值转换为时间部分字符串中的第二位字符到 最后一位字符,第二位字符到最后一位字符中的每位字符为0-9和/或A-Z中的 任意一个字符。
例如如果时间部分字符串共有八位字符。可以先将时间部分待转换值 整除以78364164096 (36的7次方),再取26的模(即整除26后取余数),得 到0到25之间的一个整数,即第一位字符对应的可转换值。然后,将获得的O 到25之间的一个整数转换为A-Z的字符,具体的转换规则为O对应A、 l对应 B、 ... 25对应Z。先将时间部分待转换值整除以36的7次方可以保证第一位字 符串在运算中的位数高于其它七位字符串,即在八位字符串中,第一位字符 是最不容易跟随系统时间的变化而变化的。
第二位到第八位字符可以采用以下方法获得先将时间部分待转换值分 别整除以36的6次方、36的5次方、36的4次方、36的3次方、36的2次方、36的 l次方、36的0次方,然后将得数分别以36取模,得到7个0到35之间的整数, 即第二位字符到第八位字符对应的可转换整数值。然后,将获得的7个0到35 之间的整数转换为0-9和/或A-Z的字符,具体的转换规则为整数值0-9对应字符 0-9,整数值10-35对应字符A-Z。
步骤303,将时间部分字符^H妄成时间部分字符串。
例如,可以将步骤301中获得的第一位字符和步骤302中获得的第二位字 符到第八位字符拼接成8位长的字符串。
具体的,也可以采用如图4所示步骤将时间部分待转换值转换为时间部分 字符串。
步骤401,将时间部分待转换值转换为时间部分字符串中的第二位字符到 最后 一位字符,第二位字符到最后 一位字符中的每位字符为0-9和/或A-Z中的任意一个字符。
步骤402,将时间部分待转换值转换为时间部分字符串中第一位字符,第
一位字符为A-Z中的任意一个字符。
步骤403,将时间部分字符拼接成时间部分字符串。
例如,可以将步骤401中获得的第二位字符到第八位字符和步骤402中获 得的第一位字符拼接成8位长的字符串。
具体的,也可以采用如图5所示步骤将时间部分待转换值转换为时间部分 字符串。
步骤501,将时间部分待转换值转换为时间部分字符串中的第一位字符到 最后一位字符,第一位字符到最后一位字符为0-9和/或A-Z中的任意一个字符。
例如,如果时间部分字符串共有八位字符,第一位到第八位字符可以采 用以下方法获得可以先将时间部分待转换值分别整除以36的7次方、36的6 次方、36的5次方、36的4次方、36的3次方、36的2次方、36的1次方、36的0 次方,然后将得数分别以36取模,得到8个0到35之间的整数,即第一位字符 到第八位字符对应的可转换整数值。然后,将获得的8个0到35之间的整数转 换为0-9和/或A-Z的字符,具体的转换规则为整数值0-9对应字符0-9,整数值 10-35对应字符A-Z。
步骤502,将时间部分字符拼接成时间部分字符串。
例如,可以将步骤501中获得的第一位字符到第八位字符拼接成8位长的 字符串。
本申请实施例 一还提供了 一种生成随机部分字符串的方法,如图6所示, 包括以下步骤
步骤601,生成随机数。具体的,可以采用UUID算法或GUID算法生成该
随机数。
例如,若随机部分字符串共有十二位字符,并且每位字符为0-9和/或A-Z 中的任意一个字符则。则可以生成一个0到4738381338321616896 ( 36的12次 方)之间的随机整数,这样可以保证随机数空间最大而且不会产生多余的随 机数。步骤602,根据随机数获取随机部分待转换值。可以将随机数直接作为随
机部分待转换值,也可以将生成的随机数乘以随机部分转换系数,得到随机
部分待转换值。例如,可以将随机部分转换系数设定为l,将步骤601中获得
的整数值乘以l后,得到时间随机待转换值。
步骤603 ,将得到的随机部分待转换值转换为随机部分字符串。
具体的,可以采用如图7所示步骤将随机部分待转换值转换为随机部分字符串。
步骤701,将随^L部分待转换值转换为随机部分字符串中的第 一位字符到 最后一位字符,第一位字符到最后一位字符为0-9和/或A-Z中的任意一个字符。
例如,如果随机部分字符串共有十二位字符,第一位到第十二位字符可 以采用以下方法获得可以先将随机部分待转换值分别整除以36的11次方、 36的10次方、36的9次方、36的8次方、36的7次方、36的6次方、36 的5次方、36的4次方、36的3次方、36的2次方、36的1次方、36的0 次方,然后将得数分别以36取模,得到12个0到35之间的整数,即第一位 字符到第十二位字符对应的可转换整数值。然后,将获得的12个0到35之 间的整数转换为0-9和/或A-Z的字符,具体的转换规则为整数值0-9对应字 符0-9,整数值10-35对应字符A陽Z。
步骤702,将随机部分字符拼接成随机部分字符串。
例如,可以将步骤701中获得的第一位字符到第十二位字符拼接成12位 长的字符串。
本申请实施例 一 中,通过将生成的时间部分字符串和随机部分字符串拼 接成唯一标识符,并将时间部分字符串置于唯一标识符的开头位置,解决了 唯一标识符的唯一性和有序性无法同时实现的问题,在保证标识符唯一性的
同时保证了标识符的有序性。
本申请实施例二提供了 一种数据库记录唯一标识符生成的方法,预先设 置1999年9月9日零时为计时零点,如图8所示,包括以下步骤步骤801,获取系统时间对应的整数值,当前的系统时间是1999年9月 9日零时。则系统时间对应的整数值为0 。
步骤802,将系统时间对应的整数值乘以时间部分转换系数0.5,得到时 间部分待转换值。即用步骤801获取的整数值乘以0.5,得到时间部分待转换 值为0。
步骤803,根据步骤802中得到的时间部分待转换值计算第一位字符对应 的可转换值。可以将时间部分待转换值整除以78364164096 ( 36的7次方), 再取26的模,得到O,即第一位字符对应的可转换值。
步骤804,将计算得到的第一位字符对应的可转换值转换为A-Z中的字 符。具体的转换规则为O对应A、 1对应B、 ... 25对应Z,则转换结果为"A"。
步骤805,根据步骤802中得到的时间部分待转换值计算第二位字符到最 后一位字符对应的可转换值。可以将时间部分待转换值分别整除以36的6次 方、36的5次方、36的4次方、36的3次方、36的2次方、36的1次方、 36的0次方,然后将得数分别以36取模,依次得到7个整数,分别为"0"、 "0"、 "0"、 "0"、 "0"、 "0"、 "0"。
步骤806,将计算得到的第二位字符到最后一位字符对应的可转换值转换 为由0-9和/或A-Z中的字符组成的字符串。具体的转换规则为整数值0-9对 应字符0-9,整数值10-35对应字符A-Z,之后拼接成7位长的字符串为 "0000000"。
步骤807,将步骤804中获得的第一位字符和步骤806中获得的第二位字 符到第八位字符拼接成8位长的字符串,结果为"AOOOOOOO"。
步骤808,生成随机婆t。可以生成一个0到4738381338321616896 ( 36的 12次方)之间的随机整数,例如,生成的随机数为2656690246482105794。
步骤809,将生成的随机数乘以随机部分转换系数1,得到随机部分待转 换值为2656690246482105794。
步骤810,将随机部分待转换值转换为随机部分字符串,其中的第一位字 符到最后一位字符为0-9和/或A-Z中的字符。即,先将随机部分待转换值分 别整除以36的11次方、36的10次方、36的9次方、36的8次方、36的7次方、36的6次方、36的5次方、36的4次方、36的3次方、36的2次方、 36的1次方、36的0次方,然后将得数分别以36取模,得到12个0到35 之间的整数,即第一位字符到第十二位字符对应的可转换整数值。然后,将 获得的12个0到35之间的整数转换为0-9和/或A-Z的字符,具体的转换规 则为整数值0-9对应字符0-9,整数值10-35对应字符A-Z,得到第一位到第 十二位的字符依次为"K6MU3EHXZK5E"。
步骤811,将步骤810中获得的第一位字符到第十二位字符拼接成12位 长的字符串,结果为"K6MU3EHXZK5E"。
步骤812,将步骤807得到的时间部分字符串和步骤811得到的随机部分 字符串拼接成唯一标识符,时间部分字符串位于唯一标识符的开头位置。拼 接得到的唯一标识符为"A0000000K6MU3EHXZK5E,,。
在获得唯一标识符后,需要将唯一标识符分配给数据表作为数据表的主 键。其中,步骤801—807与步骤808—811没有必然的先后顺序。也可以先 执行步骤808—811,再执行步骤801 — 807,最后执行步骤812。还可以同时 并行执行步骤801—807与步骤808—811,在步骤807和步骤811都执行完毕 后,最后执行步骤812。
本申请实施例三提供了 一种数据库记录唯一标识符生成的方法,预先设 置1999年9月9日零时为计时零点,如图9所示,包括以下步骤
步骤901,获取系统时间对应的整数值,当前的系统时间是1999年9月 9日 一时。则系统时间对应的整数值为3600000。
步骤902,将系统时间对应的整数值乘以时间部分转换系数0.5,得到时 间部分待转换值。即用步骤901获取的整数值乘以0.5,得到时间部分待转换 值为1800000。
步骤903,根据步骤902中得到的时间部分待转换值计算第一位字符对应 的可转换值。可以将时间部分待转换值整除以78364164096 (36的7次方), 再取26的模,得到O,即第一位字符对应的可转换值。
步骤904,将计算得到的第一位字符对应的可转换值转换为A-Z中的字符。具体的转换规则为0对应A、 1对应B、 ... 25对应Z,则转换结果为"A"。
步骤905,根据步骤902中得到的时间部分待转换值计算第二位字符到最 后一位字符对应的可转换值。可以将时间部分待转换值分别整除以36的6次 方、36的5次方、36的4次方、36的3次方、36的2次方、36的1次方、 36的0次方,然后将得数分别以36取模,依次得到7个整数,分别为"0"、 "0"、 T、 "2"、 "20"、 "32"、 "0"。
步骤906,将计算得到的第二位字符到最后一位字符对应的可转换值转换 为所述0-9和/或A-Z中的任意一个字符。具体的转换规则为整数值0-9对应 字符0-9,整数值10-35对应字符A-Z,得到第二位字符到最后一位字符(第 八位字符)依次为"0012KW0"。
步骤907,将步骤904中获得的第一位字符和步骤906中获得的第二位字 符到第八位字符^H妄成8位长的字符串,结果为"A0012KW0"。
步骤908,生成随机数。可以生成一个0到4738381338321616896 ( 36的 12次方)之间的随机整数,例如,生成的随机数为2316270079877052556。
步骤909,将生成的随机数乘以随机部分转换系数l,得到随机部分待转 换值为2316270079877052556
步骤910,将随机部分待转换值转换为随机部分字符串,其中的第一位字 符到最后一位字符为0-9和/或A-Z中的任意一个字符。即,先将随机部分待 转换值分别整除以36的11次方、36的10次方、36的9次方、36的8次方、 36的7次方、36的6次方、36的5次方、36的4次方、36的3次方、36的 2次方、36的1次方、36的0次方,然后将得数分别以36取模,得到12个 0到35之间的整数,即第一位字符到第十二位字符对应的可转换整数值。然 后,将获得的12个0到35之间的整数转换为0-9和/或A-Z的字符,具体的 转换规则为整数值0-9对应字符0-9,整数值10-35对应字符A-Z,得到第一 位到第十二位的字符依次为"HLIX7SWLKQKS"。
步骤911,将步骤910中获得的第一位字符到第十二位字符拼接成12位 长的字符串,结果为"HLIX7SWLKQKS"。
步骤912,将步骤907得到的时间部分字符串和步骤911得到的随机部分字符串拼接成唯一标识符,时间部分字符串位于唯一标识符的开头位置。拼
接得到的唯一标识符为"A0012KW0HLIX7SWLKQKS"。
在获得唯一标识符后,需要将唯一标识符分配给数据表作为数据表的主 键。其中,步骤901—907与步骤908—911没有必然的先后顺序。也可以先 执行步骤908—911,再执行步骤901—907,最后执行步骤912。还可以同时 并行执行步骤卯1—卯7与步骤908—911,在步骤907和步骤911都执行完毕 后,最后执行步骤912。
本申请实施例四提供了 一种数据库记录唯一标识符生成的方法,预先设 置1999年9月9日零时为计时零点,如图10所示,包括以下步骤
步骤IOOI,获取系统时间对应的整数值,当前的系统时间是1999年9月 9曰二时。则系统时间对应的整数值为7200000 。
步骤1002,将系统时间对应的整数值乘以时间部分转换系数0.5,得到时 间部分待转换值。即用步骤1001获取的整数值乘以0.5,得到时间部分待转 换值为3600000。
步骤1003,根据步骤1002中得到的时间部分待转换值计算第一位字符对 应的可转换值。可以将时间部分待转换值整除以78364164096 ( 36的7次方), 再取26的模,得到,即第一位字符对应的可转换值3600000。
步骤1004,将计算得到的第一位字符对应的可转换值转换为A-Z中的字 符。具体的转换规则为O对应A、 1对应B、 ...25对应Z,则转换结果为"A"
步骤1005,根据步骤1002中得到的时间部分待转换值计算第二位字符到 最后一位字符对应的可转换值。可以将时间部分待转换值分别整除以36的6 次方、36的5次方、36的4次方、36的3次方、36的2次方、36的1次方、 36的0次方,然后将得数分别以36取模,依次得到7个整数,分别为"0"、 "0"、 "2"、 "5"、 "5"、 "28"、 "0"。
步骤1006,将计算得到的第二位字符到最后一位字符对应的可转换值转 换为所述0-9和/或A-Z中的任意一个字符。具体的转换规则为整数值0-9对 应字符0-9,整数值10-35对应字符A-Z,得到第二位字符到最后一位字符(第八位字符)依次为"00255S0"。
步骤1007,将步骤1004中获得的第一位字符和步骤1006中获得的第二 位字符到第八位字符4并接成8位长的字符串,结果为"A00255S0"。
步骤1008,生成随4几数。可以生成一个0到4738381338321616896 ( 36 的12次方)之间的随机整数,例如,生成的随机数为910359253433179823。
步骤1009,将生成的随机数乘以随机部分转换系数1,得到随机部分待 转换值为910359253433179823。
步骤1010,将随机部分待转换值转换为随机部分字符串,其中的第一位 字符到最后一位字符为0-9和/或A-Z中的任意一个字符。即,先将随机部分 待转换值分别整除以36的11次方、36的10次方、36的9次方、36的8次 方、36的7次方、36的6次方、36的5次方、36的4次方、36的3次方、 36的2次方、36的1次方、36的0次方,然后将得数分别以36取模,得到 12个0到35之间的整数,即第一位字符到第十二位字符对应的可转换整数值。 然后,将获得的12个0到35之间的整数转换为0-9和/或A-Z的字符,具体 的转换规则为整数值0-9对应字符0-9,整数值10-35对应字符A-Z,得到第 一位到第十二位的字符依次为"6WZRF7IYQD2N"。
步骤1011,将步骤1010中获得的第一位字符到第十二位字符拼接成12 位长的字符串,结果为"6WZRF7IYQD2N"
步骤1012,将步骤1007得到的时间部分字符串和步骤1011得到的随机 部分字符串拼接成唯一标识符,时间部分字符串位于唯一标识符的开头位置。 拼接得到的唯一标识符为"A00255S06WZRF7IYQD2N"。
在获得唯一标识符后,需要将唯一标识符分配给数据表作为数据表的主 键。其中,步骤1001 — 1007与步骤1008—1011没有必然的先后顺序。也可 以先执行步骤1008—1011,再执行步骤1001 —1007,最后执行步骤1012。还 可以同时并行执行步骤1001 — 1007与步骤1008—1011,在步骤1007和步骤 1011都执行完毕后,最后执行步骤1012。
实施例二、实施例三和实施例四采用相同的标识符生成机制生成了 3个 不同系统时间下的唯一标识符。实施例二中的系统时间为1999年9月9曰零时,生成的p舉一标识符为"A0000000K6MU3EHXZK5E",实施例三中的系统 时间为 1999 年 9 月 9 日 一 时,生成的唯 一 标识符为 "A0012KW0HLIX7SWLKQKS"。实施例四中的系统时间为1999年9月9日 二时,生成的"舉一标识符为"A00255S06WZRF7IYQD2N"。由于这三个唯一 标识符的开头部分(即开头八个字符)是根据系统时间转换获得的,所以这 三个唯一标识符符合数据记录天然顺序,具有有序性。并且,由随机数转换
获得的后12位字符保证了标识符的全球唯一性。
本申请实施例五提供了 一种数据库记录唯一标识符生成的方法,预先设 置1999年9月9日零时为计时零点,如图ll所示,包括以下步骤
步骤IIOI,获取系统时间对应的整数值,当前的系统时间是1999年9月 9日零时。则系统时间对应的整数值为0 。
步骤1102,将系统时间对应的整数值乘以时间部分转换系数0.5,得到时 间部分待转换值。即用步骤1101获取的整数值乘以0.5,得到时间部分待转 换值为0。
步骤1103,将时间部分待转换值转换为时间部分字符串中的第一位字符 到最后一位字符,第一位字符到最后一位字符为0-9和/或A-Z中的任意一个 字符。可以先将时间部分^f寺转换值分别整除以36的7次方、36的6次方、36 的5次方、36的4次方、36的3次方、36的2次方、36的1次方、36的0 次方,然后将得数分别以36取模,得到8个0到35之间的整数。然后,将 获得的8个0到35之间的整数转换为0-9和/或A-Z的字符,具体的转换规则 为整数值0-9对应字符0-9,整数值10-35对应字符A-Z。则获得的第一位字 符到第八位字符依次为"00000000"。
步骤1104,将步骤1103中获得的第一位字符到第八位字符拼接成8位长 的字符串,结果为"00000000"。
步骤1105,生成随机数。可以生成一个0到4738381338321616896 (36 的12次方)之间的随机整数,例如,生成的随机数为1374370047210628002。
步骤1106,将生成的随机数乘以随机部分转换系数1,得到随机部分待转换值为1374370047210628002。
步骤1107,将随机部分待转换值转换为随机部分字符串中的第一位字符 到最后一位字符,第一位字符到最后一位字符为0-9和/或A-Z中的任意一个 字符。即,先将随机部分待转换值分别整除以36的11次方、36的10次方、 36的9次方、36的8次方、36的7次方、36的6次方、36的5次方、36的 4次方、36的3次方、36的2次方、36的1次方、36的0次方,然后将得数 分别以36取模,得到12个0到35之间的整数,即第一位字符到第十二位字 符对应的可转换整数值。然后,将获得的12个0到35之间的整数转换为0-9 和/或A-Z的字符,具体的转换规则为整数值0-9对应字符0-9,整数值10-35 对应字符A-Z,得到第一位到第十二位的字符依次为"AFWLIRFI5NDU"。
步骤1108,将步骤1107中获得的第一位字符到第十二位字符拼接成12 位长的字符串,结果为"AFWLIRFI5NDU"。
步骤1109,将步骤1104得到的时间部分字符串和步骤1108得到的随机 部分字符串^f^妻成唯一标识符,时间部分字符串位于唯一标识符的开头位置。 拼接得到的唯一标识符为"00000000AFWLIRFI5NDU"。
在获得唯一标识符后,需要将唯一标识符分配给数据表作为数据表的主 键。其中,步骤1101 — 1104与步骤1105—1108没有必然的先后顺序。也可以 先执行步骤1105 — 1108,再执行步骤1101 — 1104,最后执行步骤1109。还可 以同时并行执行步骤1101 — 1104与步骤1105—1108,在步骤1104和步骤1108 都执行完毕后,最后执行步骤1109。
本申请实施例六提供了 一种数据库记录唯一标识符生成的方法,预先设 置1999年9月9日零时为计时零点,如图12所示,包括以下步骤
步骤1201,获取系统时间对应的整数值,当前的系统时间是1999年9月 9曰 一 时。则系统时间对应的整数值为3 600000 。
步骤1202,将系统时间对应的整数值乘以时间部分转换系数0.5,得到时 间部分待转换值。即用步骤1201获取的整数值乘以0.5,得到时间部分待转 换值为1800000。步骤1203,将时间部分待转换值转换为时间部分字符串中的第一位字符 到最后一位字符,第一位字符到最后一位字符为0-9和/或A-Z中的任意一个 字符。可以先将时间部分待转换值分别整除以36的7次方、36的6次方、36 的5次方、36的4次方、36的3次方、36的2次方、36的1次方、36的0 次方,然后将得数分别以36取模,得到8个0到35之间的整数。然后,将 获得的8个0到35之间的整数转换为0-9和/或A-Z的字符,具体的转换规则 为整数值0-9对应字符0-9,整数值10-35对应字符A-Z。则获得的第一位字 符到第八位字符依次为"00012KW0"。
步骤1204,将步骤1203中获得的第一位字符到第八位字符拼接成8位长 的字符串,结果为"00012KW0"。
步骤1205,生成随机数。可以生成一个0到4738381338321616896 ( 36 的12次方)之间的随机整数,例如,生成的随机数为2180336132633863188。
步骤1206,将生成的随机数乘以随机部分转换系数1,得到随机部分待 转换值为2180336132633863188。
步骤1207,将随机部分待转换值转换为随机部分字符串中的第一位字符 到最后一位字符,第一位字符到最后一位字符为0-9和/或A-Z中的任意一个 字符。即,先将随机部分待转换值分别整除以36的11次方、36的10次方、 36的9次方、36的8次方、36的7次方、36的6次方、36的5次方、36的 4次方、36的3次方、36的2次方、36的1次方、36的0次方,然后将得数 分别以36取模,得到12个0到35之间的整数,即第一位字符到第十二位字 符对应的可转换整数值。然后,将获得的12个0到35之间的整数转换为0-9 和/或A-Z的字符,具体的转换规则为整数值0-9对应字符0-9 ,整数值10-3 5 对应字符A-Z,得到第一位到第十二位的字符依次为"GKCGNJMVHPUC"。
步骤1208,将步骤1207中获得的第一位字符到第十二位字符拼接成12 位长的字符串,结果为"GKCGNJMVHPUC"。
步骤1209,将步骤1204得到的时间部分字符串和步骤1208得到的随机 部分字符串拼接成唯一标识符,时间部分字符串位于唯一标识符的开头位置。 拼接得到的唯一标识符为"00012KW0GKCGNJMVHPUC"。在获得唯一标识符后,需要将唯一标识符分配给^:据表作为数据表的主 键。其中,步骤1201 — 1204与步骤1205—1208没有必然的先后顺序。也可 以先执行步骤1205 — 1208,再执行步骤1201 — 1204,最后执行步骤1209。还 可以同时并行执行步骤1201 — 1204与步骤1205—1208,在步骤1204和步骤 1208都执行完毕后,最后执行步骤1209。
本申请实施例七提供了 一种数据库记录唯一标识符生成的方法,预先设 置1999年9月9日零时为计时零点,如图13所示,包括以下步骤
步骤130L获取系统时间对应的整数值,当前的系统时间是1999年9月 9日二时。则系统时间对应的整|丈值为7200000 。
步骤1302,将系统时间对应的整数值乘以时间部分转换系数0.5,得到时 间部分待转换值。即用步骤1301获取的整数值乘以0.5,得到时间部分待转 换值为3600000。
步骤1303,将时间部分待转换值转换为时间部分字符串中的第一位字符 到最后一位字符,第一位字符到最后一位字符为0-9和/或A-Z中的任意一个 字符。可以先将时间部分待转换值分别整除以36的7次方、36的6次方、36 的5次方、36的4次方、36的3次方、36的2次方、36的1次方、36的0 次方,然后将得数分别以36取模,得到8个0到35之间的整数。然后,将 获得的8个0到35之间的整数转换为0-9和/或A-Z的字符,具体的转换规则 为整数值0-9对应字符0-9,整数值10-35对应字符A-Z。则获得的第一位字 符到第八位字符依次为"000255S0"。
步骤1304,将步骤1303中获得的第一位字符到第八位字符拼接成8位长 的字符串,结果为"000255S0"。
步骤1305,生成随机数。可以生成一个0到4738381338321616896 ( 36 的12次方)之间的随机整数,例如,生成的随机数为497228203135368276。
步骤1306,将生成的随机数乘以随机部分转换系数1,得到随机部分待 转换值为497228203135368276。
步骤1307,将随机部分待转换值转换为随机部分字符串中的第一位字符到最后一位字符,第一位字符到最后一位字符为0-9和/或A-Z中的任意一个
字符。即,先将随^^部分待转换值分别整除以36的11次方、36的10次方、 36的9次方、36的8次方、36的7次方、36的6次方、36的5次方、36的 4次方、36的3次方、36的2次方、36的1次方、36的0次方,然后将得数 分别以36取模,得到12个0到35之间的整数,即第一位字符到第十二位字 符对应的可转换整数值。然后,将获得的12个0到35之间的整数转换为0-9 和/或A-Z的字符,具体的转换规则为整数值0-9对应字符0-9,整数值10-35 对应字符A-Z,得到第一位到第十二位的字符依次为"3RZWOR3JlAVO"。
步骤1308,将步骤1307中获得的第一位字符到第十二位字符拼接成12 位长的字符串,结果为"3RZW0R3J1AV0"。
步骤1309,将步骤1304得到的时间部分字符串和步骤1308得到的随机 部分字符串拼接成唯一标识符,时间部分字符串位于唯一标识符的开头位置。 拼接得到的唯一标识符为"000255S03RZWOR3J1 AVO"。
在获得唯一标识符后,需要将唯一标识符分配给数据表作为数据表的主 键。其中,步骤1301 — 1304与步骤1305 — 1308没有必然的先后顺序。也可 以先执行步骤1305—1308,再执行步骤1301 — 1304,最后执行步骤1309。还 可以同时并行执行步骤1301 — 1304与步骤1305 — 1308,在步骤1304和步骤 1308都执行完毕后,最后执行步骤1309。
实施例五、实施例六和实施例七采用相同的标识符生成机制生成了 3个 不同系统时间下的唯一标识符。实施例五中的系统时间为1999年9月9日零 时,生成的唯一标识符为"00000000AFWLIRFI5NDU,,,实施例六中的系统时 间为 1999 年 9 月 9 日 一 时,生成的唯 一 标识符为 "00012KW0GKCGNJMVHPUC"。实施例七中的系统时间为1999年9月9 日二时,生成的唯一标识符为"000255S03RZWOR3J1AVO"。由于这三个唯 一标识符的开头部分(即开头八个字符)是根据系统时间转换获得的,所以 这三个唯一标识符符合数据记录天然顺序,具有有序性。并且,由随机数转 换获得的后12位字符保证了标识符的全球唯一性。本申请实施例八提供了一种实现唯一标识符生成的装置,如图14所示,
包括
系统时间获取模块4,用于获取系统时间;
时间部分字符串生成模块1,与系统时间获取模块4连接,用于根据系统 时间获取模块4获取的系统时间生成时间部分字符串;
随机部分字符串生成模块2,用于生成随机部分字符串;
字符串拼接模块3,与时间部分字符串生成模块1和随机部分字符串生成 模块2分别连接,用于将时间部分字符串生成模块1生成的时间部分字符串 和随机部分字符串生成^t块2生成的随机部分字符串拼接成唯一标识符,所 述时间部分字符串位于所述唯一标识符的开头位置;
标识符分配模块5,与字符串拼接模块3连接,用于将字符串拼接模块3 获得的唯一标识符分配给数据表作为数据表的主键。
其中,时间部分字符串生成模块1的具体结构可以如图15所示,包括 时间部分待转换值获取单元11和时间部分字符串获取单元12,其中,
时间部分待转换值获取单元11,用于根据系统时间获得时间部分待转换
值;
时间部分字符串获取单元12,与时间部分待转换值获取单元11连接,用 于将时间部分待转换值获取单元11获取的时间部分待转换值转换为所述时间 部分字符串。
其中,时间部分字符串获取单元12的具体结构可以如图16所示,包括 第一获取子单元121、第二获取子单元122和第一处理子单元123,其中,
第一获取子单元121,用于将所述时间部分待转换值转换为所述时间部分 字符串中第一位字符,所述第一位字符为A-Z中的任意一个字符;
第二获取子单元122,用于将所述时间部分待转换值转换为所述时间部分 字符串中的第二位字符到最后一位字符,所述第二位字符到最后一位字符中 的每位字符为0-9和/或A-Z中的任意一个字符;第一处理子单元123,与第一获取子单元121和第二获取子单元122分别 连接,用于将第一获if又子单元121和第二获取子单元122获取的第一位字符 到最后一位字符拼接成所述时间部分字符串。
其中,第一获取子单元121具体用于,根据所述时间部分待转换值计算 所述第一位字符对应的可转换值;将计算得到的所述第 一位字符对应的可转 换值转换为所述A-Z中的任意一个字符。
其中,第二获取子单元122具体用于,根据所述时间部分待转换值计算 所述第二位字符到最后 一位字符对应的可转换值;将计算得到的所述第二位 字符到最后一位字符对应的可转换值转换为所述0-9和/或A-Z中的任意一个 字符。
其中,时间部分字符串获取单元12的具体结构可以如图17所示,包括 第三获取子单元124和第二处理子单元125,其中,
第三获取子单元124,用于将所述时间部分待转换值转换为所述时间部分 字符串中的第一位字符到最后一位字符,所述第一位字符到最后一位字符为
0-9和/或A-Z中的任意一个字符;
第二处理子单元125,与第三获取子单元124连接,用于将第三获取子单 元124获取的第一位字符到最后一位字符拼接成所述时间部分字符串。
其中,第三获iF又子单元124具体用于,根据所述时间部分待转换值计算 所述第一位字符到最后一位字符对应的可转换值;将计算得到的所述第一位 字符到最后一位字符对应的可转换值转换为所述0-9和/或A-Z中的任意一个 字符。
其中,随机部分字符串生成模块2的具体结构可以如图18所示,包括 随机数生成单元21、随机部分待转换值获取单元22和随机部分字符串获取单 元23,其中,
随机数生成单元21,用于生成随机数;
随机部分待转换值获取单元22,与随机数生成单元21连接,用于根据随机数生成单元21生成的随机数获得随机部分待转换值;
随机部分字符串获取单元23,与随机部分待转换值获取单元22连接,用 于将随机部分待转换值获取单元22获取的随机部分待转换值转换为所述随机 部分字符串。
其中,随机部分字符串获取单元23的具体结构可以如图19所示,包括 第四获取子单元和第三处理子单元,其中,
第四获取子单元231,用于将所述随机部分待转换值转换为所述随机部分 字符串中的第 一位字符到最后 一位字符,所述第 一位字符到最后 一位字符为 0-9和/或A-Z中的任意一个字符;
第三处理子单元232,与第四获取子单元231连接,用于将第四获取子单 元231获取的第一位字符到最后一位字符拼接成所述随机部分字符串。
其中,第四获取子单元231具体用于,根据所述随机部分待转换值计算 所述第一位字符到最后一位字符对应的可转换值;将计算得到的所述第一位 字符到最后一位字符对应的可转换值转换为所述0-9和/或A-Z中的任意一个 字符。
本申请的实施例中,通过将生成的时间部分字符串和随机部分字符串拼 接成唯一标识符,并将时间部分字符串置于唯一标识符的开头位置,解决了 唯一标识符的唯一性和有序性无法同时实现的问题,在保证标识符唯一性的 同时保证了标识符的有序性。
为了描述的方便,以上所述装置的各部分以功能分为各种模块或单元分 别描述。当然,在实施本申请时可以把各模块或单元的功能在同一个或多个 软件或硬件中实现。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本 申请可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬 件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技 术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使 得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行
本申请各个实施例所述的方法。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中 的模块或流程并不 一定是实施本申请所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描 述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例 的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进 一步拆分成多个子模块。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
以上公开的仅为本申请的几个具体实施例,但是,本申请并非局限于 此,任何本领域的技术人员能思之的变化都应落入本申请的保护范围。
权利要求
1、一种数据库记录唯一标识符生成的方法,该唯一标识符用来作为数据表的主键,其特征在于,包括以下步骤获取系统时间;根据所述系统时间生成时间部分字符串;生成随机部分字符串;将所述时间部分字符串和所述随机部分字符串拼接成唯一标识符,所述时间部分字符串位于所述唯一标识符的开头位置;将所述唯一标识符分配给数据表作为所述数据表的主键。
2、 如权利要求l所述的方法,其特征在于,所述根据所述系统时间生成 时间部分字符串包括根据所述系统时间获得时间部分待转换值;将所述时间部分待转换值转换为所述时间部分字符串。
3、 如权利要求2所述的方法,其特征在于,所述将时间部分待转换值转 换为所述时间部分字符串包括将所述时间部分待转换值转换为所述时间部分字符串中第一位字符,所 述第一位字符为A-Z中的任意一个字符;将所述时间部分待转换值转换为所述时间部分字符串中的第二位字符到 最后一位字符,所述第二位字符到最后一位字符中的每位字符为0-9和/或A-Z 中的任意一个字符;将所述第 一位字符到最后一位字符拼接成所述时间部分字符串。
4、 如权利要求3所述的方法,其特征在于,所述将所述时间部分待转换 值转换为所述时间部分字符串中第 一位字符包括根据所述时间部分待转换值计算所述第一位字符对应的可转换值; 将计算得到的所述第一位字符对应的可转换值转换为所述A-Z中的任意 一个字符。
5、 如权利要求3所述的方法,其特征在于,所述将所述时间部分待转换 值转换为所述时间部分字符串中的第二位字符到最后一位字符包括根据所述时间部分待转换值计算所述第二位字符到最后一位字符对应的可转换值;将计算得到的所述第二位字符到最后 一位字符对应的可转换值转换为所述0-9和/或A-Z中的任意一个字符。
6、 如权利要求2所述的方法,其特征在于,所述将时间部分待转换值转 换为所述时间部分字符串包括将所述时间部分待转换值转换为所述时间部分字符串中的第一位字符到 最后一位字符,所述第一位字符到最后一位字符为0-9和/或A-Z中的任意一 个字符;将所述第 一位字符到最后一位字符拼接成所述时间部分字符串。
7、 如权利要求6所述的方法,其特征在于,所述将所述时间部分待转换 值转换为所述时间部分字符串中的第 一位字符到最后一位字符包括根据所述时间部分待转换值计算所述第一位字符到最后一位字符对应的 可转换值;将计算得到的所述第 一位字符到最后一位字符对应的可转换值转换为所 述0-9和/或A-Z中的任意一个字符。
8、 如权利要求l所述的方法,其特征在于,所述生成随机部分字符串包括生成随机数;根据所述随机数获取随机部分待转换值; 将所述随机部分待转换值转换为所述随机部分字符串。
9、 如权利要求8所述的方法,其特征在于,所述将随机部分待转换值转 换为所述随机部分字符串包括将所述随机部分待转换值转换为所述随机部分字符串中的第 一位字符到 最后一位字符,所述第一位字符到最后一位字符为0-9和/或A-Z中的任意一个字符;将所述第一位字符到最后一位字符拼接成所述随机部分字符串。
10、 如权利要求9所述的方法,其特征在于,所述将所述随机部分待转 换值转换为所述随机部分字符串中的第 一位字符到最后一位字符包括根据所述随机部分待转换值计算所述第一位字符到最后一位字符对应的可转换值;将计算得到的所述第一位字符到最后一位字符对应的可转换值转换为所述0-9和/或A-Z中的任意一个字符。
11、 一种实现唯一标识符生成的装置,其特征在于,包括系统时间获取 模块、时间部分字符串生成模块、随机部分字符串生成模块、字符串拼接模 块和标识符分配模块,其中,所述系统时间获耳又模块,用于获取系统时间;所述时间部分字符串生成模块,与所述系统时间获取模块连接,用于根 据所述系统时间获取模块获取的系统时间生成时间部分字符串; 所述随机部分字符串生成模块,用于生成随机部分字符串; 所述字符串拼接模块,与所述时间部分字符串生成模块和所述随机部分 字符串生成模块分别连接,用于将所述时间部分字符串生成模块生成的时间 部分字符串和所述随机部分字符串生成模块生成的随机部分字符串拼接成唯一标识符,所述时间部分字符串位于所述唯一标识符的开头位置;所述标识符分配模块,与所述字符串拼接模块连接,用于将所述字符串 拼接模块获得的唯一标识符分配给数据表作为所述数据表的主键。
12、 如权利要求11所述的装置,其特征在于,所述时间部分字符串生成 模块包括时间部分待转换值获取单元和时间部分字符串获取单元,其中,所述时间部分待转换值获取单元,用于根据所述系统时间获取时间部分 待转换值;所述时间部分字符串获取单元,与所述时间部分待转换值获取单元连接, 用于将所述时间部分待转换值获取单元获取的时间部分待转换值转换为所述 时间部分字符串。
13、 如权利要求12所述的装置,其特征在于,所述时间部分字符串获取 单元包括第一获取子单元、第二获取子单元和第一处理子单元,其中,所述第一获取子单元,用于将所述时间部分待转换值转换为所述时间部分字符串中第一位字符,所述第一位字符为A-Z中的任意一个字符;所述第二获取子单元,用于将所述时间部分待转换值转换为所述时间部 分字符串中的第二位字符到最后一位字符,所述第二位字符到最后一位字符中的每位字符为0-9和/或A-Z中的任意一个字符;所述第一处理子单元,与所述第一获取子单元和所述第二获取子单元分 别连接,用于将所述第一获取子单元和所述第二获^^子单元获取的第一位字 符到最后一位字符拼接成所述时间部分字符串。
14、 如权利要求13所述的装置,其特征在于,所述第一获取子单元具体 用于,根据所述时间部分待转换值计算所述第一位字符对应的可转换值;将 计算得到的所述第一位字符对应的可转换值转换为所述A-Z中的任意一个字 符。
15、 如权利要求13所述的装置,其特征在于,所述第二获取子单元具体 用于,根据所述时间部分待转换值计算所述第二位字符到最后一位字符对应 的可转换值;将计算得到的所述第二位字符到最后一位字符对应的可转换值 转换为所述0-9和/或A-Z中的任意一个字符。
16、 如权利要求12所述的装置,其特征在于,所述时间部分字符串获取 单元包括第三获取子单元和第二处理子单元,其中,分字符串中的第一位字符到最后一位字符,所述第一位字符到最后一位字符 为0-9和/或A-Z中的任意一个字符;所述第二处理子单元,与所述第三获取子单元连接,用于将所述第三获 取子单元获取的第 一位字符到最后一位字符拼接成所述时间部分字符串。
17、 如权利要求16所述的装置,其特征在于,所述第三获取子单元具体 用于,根据所述时间部分待转换值计算所述第一位字符到最后一位字符对应 的可转换值;将计算得到的所述第一位字符到最后一位字符对应的可转换值 转换为所述0-9和/或A-Z中的任意一个字符。
18、 如权利要求11所述的装置,其特征在于,所述随机部分字符串生成 模块包括随机数生成单元、随机部分待转换值获取单元和随机部分字符串获取单元,其中,所述随机数生成单元,用于生成随机数;所述随机部分待转换值获取单元,与所述随机数生成单元连接,用于根 据所述随机数生成单元生成的随机数获取随机部分待转换值;所述随机部分字符串获取单元,与所述随机部分待转换值获取单元连接, 用于将所述随机部分待转换值获取单元获取的随机部分待转换值转换为所述 随机部分字符串。
19、 如权利要求18所述的装置,其特征在于,所述随机部分字符串获取 单元包括第四获取子单元和第三处理子单元,其中,所述第四获取子单元,用于将所述随机部分待转换值转换为所述随机部 分字符串中的第 一位字符到最后 一位字符,所述第 一位字符到最后 一位字符 为0-9和/或A-Z中的任意一个字符;所述第三处理子单元,与所述第四获取子单元连接,用于将所述第四获 取子单元获取的第一位字符到最后一位字符拼接成所述随机部分字符串。。
20、 如权利要求19所述的装置,其特征在于,所述第四获取子单元具体 用于,根据所述随机部分待转换值计算所述第一位字符到最后一位字符对应 的可转换值;将计算得到的所述第一位字符到最后一位字符对应的可转换值 转换为所述0-9和/或A-Z中的任意一个字符。
全文摘要
本申请公开了一种数据库记录唯一标识符生成的方法及装置。所述方法包括以下步骤获取系统时间;根据所述系统时间生成时间部分字符串;生成随机部分字符串;将所述时间部分字符串和所述随机部分字符串拼接成唯一标识符,所述时间部分字符串位于所述唯一标识符的开头位置;将所述唯一标识符分配给数据表作为所述数据表的主键。本申请的实施例中,通过将生成的时间部分字符串和随机部分字符串拼接成唯一标识符,并将时间部分字符串置于唯一标识符的开头位置,解决了唯一标识符的唯一性和有序性无法同时实现的问题,在保证标识符唯一性的同时保证了标识符的有序性。
文档编号G06F17/30GK101533414SQ200910130809
公开日2009年9月16日 申请日期2009年4月15日 优先权日2009年4月15日
发明者李战园 申请人:阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1