ID自动生成方法及装置
技术领域
本发明涉及数据库技术领域,特别涉及一种ID自动生成方法及装置。
背景技术
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,随着信息技术和市场的发展,数据管理不再仅仅是存储和管理数据,而转变成按照用户所需要的各种数据管理的方式。
在数据库所在服务器的内存中通常维护有ID(序列号)的最大值,便于生成新ID和对应的新数据项,但由于所述ID的最大值存在于内存中,若数据库出现异常,会导致所述ID的最大值丢失,此时会通过函数从所述数据库中查找ID的最大值,若数据库出现故障前,进行了删除操作,会使查找到的ID的最大值有误,生成错误新ID,导致用户信息与错误新ID对应,容易引起用户信息混乱,无法保证用户信息的正确性和稳定性。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种ID自动生成方法及装置。
依据本发明的一个方面,提供了一种ID自动生成方法,包括:
接收新的数据项;
依据预定规则为所述数据项生成ID;
将所述ID分配给所述数据项;以及
将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器中。
可选地,所述方法还包括:
将所述ID的最大值保存在数据库所在服务器的内存中。
可选地,所述方法还包括:
当再次接收到新的数据项时,判断数据库所在服务器的内存中是否存在所述ID的最大值;
若不存在,则从所述非易失性储存器中获取所述ID的最大值,并依据预定规则为再次接收到的所述数据项生成ID。
可选地,所述将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器中,进一步包括:
按照预设时间间隔将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器中。
可选地,所述按照预设时间间隔将所述ID中的最大值存储至所述数据库所在服务器的非易失性储存器中之前,所述方法还包括:
获取所述数据库的单位时间访问量,根据所述单位时间访问量确定所述预设时间间隔。
可选地,所述将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器中,进一步包括:
将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器的一个存储单元中,并记录所述存储单元的地址;
相应地,所述从所述非易失性储存器中获取所述ID的最大值,进一步包括:
根据所述存储单元的地址从所述存储单元中获取所述ID的最大值。
可选地,所述将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器中,进一步包括:
创建一个数据表,将已生成的ID的最大值存储至所述数据表中,所述数据表设置于所述非易失性储存器中;
相应地,所述从所述非易失性储存器中获取所述ID的最大值,进一步包括:
从所述数据表中获取所述ID的最大值。
依据本发明的一个方面,提供了一种ID自动生成装置,包括:
数据接收单元,适于接收新的数据项;
ID生成单元,适于依据预定规则为所述数据项生成ID;
ID分配单元,适于将所述ID分配给所述数据项;以及
第一保存单元,适于将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器中。
可选地,所述装置还包括:
第二保存单元,适于将所述ID的最大值保存在数据库所在服务器的内存中。
可选地,所述装置还包括:
内存判断单元,适于当再次接收到新的数据项时,判断数据库所在服务器的内存中是否存在所述ID的最大值;在不存在时,从所述非易失性储存器中获取所述ID的最大值,并依据预定规则为再次接收到的所述数据项生成ID。
可选地,所述第一保存单元,进一步适于按照预设时间间隔将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器中。
可选地,所述装置还包括:
间隔确定单元,适于获取所述数据库的单位时间访问量,根据所述单位时间访问量确定所述预设时间间隔。
可选地,所述第一保存单元,进一步适于将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器的一个存储单元中,并记录所述存储单元的地址;
相应地,所述内存判断单元,进一步适于根据所述存储单元的地址从所述存储单元中获取所述ID的最大值。
可选地,所述第一保存单元,进一步适于创建一个数据表,将已生成的ID的最大值存储至所述数据表中,所述数据表设置于所述非易失性储存器中;
相应地,所述内存判断单元,进一步适于从所述数据表中获取所述ID的最大值。
本发明在为新的数据项生成ID的过程中,会将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器中,便于在数据库出现异常时,为后续ID的生成提供参考,从而能够有效避免由于查找到的ID最大值有误,所引起的生成错误新ID的问题,避免用户信息混乱,保证了用户信息的正确性和稳定性。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1是本发明一种实施方式的ID自动生成方法的流程示意图;
图2是本发明一种实施方式的ID自动生成方法的流程示意图;
图3是本发明一种实施方式的ID自动生成方法的流程示意图;
图4是本发明一种实施方式的ID自动生成方法的流程示意图;
图5是本发明一种实施方式的ID自动生成方法的流程示意图;
图6是本发明一种实施方式的ID自动生成装置的结构框图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
图1是本发明一种实施方式的ID自动生成方法的流程示意图;参照图1,所述方法包括:
S101:接收新的数据项;
需要说明的是,本实施方式的方法的执行主体为数据库,当然,数据库通常是设置于服务器上的。
可理解的是,所述数据项通常是基于用户在终端上输入的操作指令所生成,例如:用户在终端上输入购物的操作指令,当然,所述数据项可由数据库所在服务器生成,也可由其他服务器生成,本实施方式对此不加以限制。
S102:依据预定规则为所述数据项生成ID;
可理解的是,为便于对所述数据项的后续查找,故而,需要为所述数据项生成ID。
需要说明的是,所述预定规则通常为在ID的最大值的基础上,增加预设增量值,例如:ID的最大值为17,假设预设增量值为1,此时,生成数值为18的ID,当然,所述预设增量值可根据需要进行设置,本实施方式对此不加以限制。
S103:将所述ID分配给所述数据项;
在具体实现中,所述数据库可为MySQL数据库,也就是关系型数据库,在将所述ID分配给所述数据项后,还需要根据所述ID将所述数据项与其他数据(如用户账号等数据)进行关联,故而,生成ID的正确与否直接影响到用户信息的正确性和稳定性。
例如:假设ID的最大值是5,在接收到用户账号A的数据项后,会为该数据项生成一个数值为6的ID,并将数值为6的ID与用户账号A关联,此时ID的最大值为6。
若收到删除数值为6的ID的指令时,会将所述数值为6的ID以及对应的数据项删除,如果数据库突然异常,此时,ID的最大值丢失,现有技术中,会通过select max(id)from的指令从数据库中查找ID的最大值,但由于此时数值为6的ID已经被删除,故而,查找到的ID的最大值为5;
如果接收到用户账号B的数据项后,会为该数据项再次生成一个数值为6的ID,但由于数字为6的ID已经与用户账号A相关联,使得用户账号B的数据项与用户账号A关联,引起用户信息混乱,无法保证用户信息的正确性和稳定性。
S104:将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器中。
需要说明的是,为便于在数据库出现异常时,为后续ID的生成提供参考,本实施方式中,会将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器中,也就是说,在ID的最大值丢失时,可从所述非易失性储存器中获取ID的最大值,保证获取ID的最大值的正确性。
可理解的是,所述非易失性存储器可选择任何形式的固态(没有可动部分)存储器,其不用定期地刷新存储器内容,例如:可以为所述数据库所在服务器的硬盘,也可以为插接在所述数据库所在服务器上的移动硬盘或U盘,当然,还可为其他具有类似功能的存储器,本实施方式对此不加以限制。
本实施方式在为新的数据项生成ID的过程中,会将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器中,便于在数据库出现异常时,为后续ID的生成提供参考,从而能够有效避免由于查找到的ID最大值有误,所引起的生成错误新ID的问题,避免用户信息混乱,保证了用户信息的正确性和稳定性。
图2是本发明一种实施方式的ID自动生成方法的流程示意图;参照图2,所述方法包括:
S201:接收新的数据项;
S202:依据预定规则为所述数据项生成ID;
S203:将所述ID分配给所述数据项;
S204:将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器中;
步骤S201~S204与图1所示的实施方式的步骤S101~S104相同,在此不再赘述。
S205:将所述ID的最大值保存在数据库所在服务器的内存中。
可理解的是,由于在读取非易失性储存器中的数据时,通常速度较慢,而由于数据库通常需要非常快的速度来生成ID,故而,本实施方式中,还会将所述ID的最大值保存在数据库所在服务器的内存中。
S206:当再次接收到新的数据项时,判断数据库所在服务器的内存中是否存在所述ID的最大值;若不存在,则从所述非易失性储存器中获取所述ID的最大值,并依据预定规则为再次接收到的所述数据项生成ID。
需要说明的是,由于所述内存中存储的ID的最大值可能会因数据库异常等问题而丢失,故而,本实施方式中,当再次接收到新的数据项时,可先判断数据库所在服务器的内存中是否存在所述ID的最大值,若不存在所述ID的最大值,则需要从数据库所在服务器的非易失性储存器中获取所述ID的最大值。
当然,若存在所述ID的最大值,则直接基于所述内存中存储的所述ID的最大值来生成ID。
图3是本发明一种实施方式的ID自动生成方法的流程示意图;参照图3,所述方法包括:
S301:接收新的数据项;
S302:依据预定规则为所述数据项生成ID;
S303:将所述ID分配给所述数据项;
步骤S301~S303与图1所示的实施方式的步骤S101~S103相同,在此不再赘述。
S304:按照预设时间间隔将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器中。
可理解的是,若每生成一个ID,均将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器中,由于生成ID的速度非常快,此时,会使得数据库所在服务器的处理负荷过大,对数据库的运行造成影响,故而,本实施方式中,会按照预设时间间隔将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器中。
但由于预设时间间隔设置的过长,容易导致存储至所述非易失性储存器中的ID最大值存在滞后,而预设时间间隔设置的过短,容易引起数据库所在服务器的处理负荷过大,为避免该问题,本实施方式中,还可通过数据库的单位时间访问量来动态调整预设时间间隔。
也就是说,在步骤S304之前,所述方法还可包括:
获取所述数据库的单位时间访问量,根据所述单位时间访问量确定所述预设时间间隔。
当然,所述单位时间访问量和所述预设时间间隔之间会呈反比关系,在根据所述单位时间访问量确定所述预设时间间隔时,可预先建立一个访问量和时间间隔之间的对应关系,从而,根据所述单位时间访问量查找对应关系,获得与所述单位时间访问量对应的预设时间间隔。
图4是本发明一种实施方式的ID自动生成方法的流程示意图;参照图4,所述方法包括:
S401:接收新的数据项;
S402:依据预定规则为所述数据项生成ID;
S403:将所述ID分配给所述数据项;
步骤S401~S403与图2所示的实施方式的步骤S201~S203相同,在此不再赘述。
S404:将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器的一个存储单元中,并记录所述存储单元的地址;
可理解的是,为便于实现,本实施方式中,将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器的一个存储单元中,虽然存储和获取ID的最大值的速度较慢,但无需对数据库的程序代码进行过多调整,实现方便。
S405:将所述ID的最大值保存在数据库所在服务器的内存中。
步骤S405与图2所示的实施方式的步骤S205相同,在此不再赘述。
S406:当再次接收到新的数据项时,判断数据库所在服务器的内存中是否存在所述ID的最大值;若不存在,则根据所述存储单元的地址从所述存储单元中获取所述ID的最大值,并依据预定规则为再次接收到的所述数据项生成ID。
需要说明的是,由于已生成的ID的最大值保存在数据库所在服务器的非易失性储存器的一个存储单元中,故而,在需要获取所述ID的最大值时,可根据所述存储单元的地址从所述存储单元中获取所述ID的最大值。
图5是本发明一种实施方式的ID自动生成方法的流程示意图;参照图5,所述方法包括:
S501:接收新的数据项;
S502:依据预定规则为所述数据项生成ID;
S503:将所述ID分配给所述数据项;
步骤S501~S503与图2所示的实施方式的步骤S201~S203相同,在此不再赘述。
S504:创建一个数据表,将已生成的ID的最大值存储至所述数据表中,所述数据表设置于所述非易失性储存器中;
可理解的是,本实施方式,将所述ID的最大值存储至数据表中,存储和获取所述ID的最大值的速度通常较快,但需要对数据库的程序代码进行调整,实现较为复杂。
S505:将所述ID的最大值保存在数据库所在服务器的内存中。
步骤S505与图2所示的实施方式的步骤S205相同,在此不再赘述。
S506:当再次接收到新的数据项时,判断数据库所在服务器的内存中是否存在所述ID的最大值;若不存在,则从所述数据表中获取所述ID的最大值,并依据预定规则为再次接收到的所述数据项生成ID。
需要说明的是,由于已生成的ID的最大值保存数据表中,故而,在需要获取所述ID的最大值时,可直接从所述数据表中获取所述ID的最大值。
图6是本发明一种实施方式的ID自动生成装置的结构框图;参照图6,所述装置包括:
数据接收单元601,适于接收新的数据项;
ID生成单元602,适于依据预定规则为所述数据项生成ID;
ID分配单元603,适于将所述ID分配给所述数据项;以及
第一保存单元604,适于将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器中。
在本发明的一种可选实施例中,所述装置还包括:
第二保存单元,适于将所述ID的最大值保存在数据库所在服务器的内存中。
在本发明的一种可选实施例中,所述装置还包括:
内存判断单元,适于当再次接收到新的数据项时,判断数据库所在服务器的内存中是否存在所述ID的最大值;在不存在时,从所述非易失性储存器中获取所述ID的最大值,并依据预定规则为再次接收到的所述数据项生成ID。
在本发明的一种可选实施例中,所述第一保存单元,进一步适于按照预设时间间隔将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器中。
在本发明的一种可选实施例中,所述装置还包括:
间隔确定单元,适于获取所述数据库的单位时间访问量,根据所述单位时间访问量确定所述预设时间间隔。
在本发明的一种可选实施例中,所述第一保存单元,进一步适于将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器的一个存储单元中,并记录所述存储单元的地址;
相应地,所述内存判断单元,进一步适于根据所述存储单元的地址从所述存储单元中获取所述ID的最大值。
在本发明的一种可选实施例中,所述第一保存单元,进一步适于创建一个数据表,将已生成的ID的最大值存储至所述数据表中,所述数据表设置于所述非易失性储存器中;
相应地,所述内存判断单元,进一步适于从所述数据表中获取所述ID的最大值。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
应当注意的是,在本发明的装置的各个部件中,根据其要实现的功能而对其中的部件进行了逻辑划分,但是,本发明不受限于此,可以根据需要对各个部件进行重新划分或者组合,例如,可以将一些部件组合为单个部件,或者可以将一些部件进一步分解为更多的子部件。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
以上实施方式仅适于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。
本发明公开了A1、一种ID自动生成方法,包括:
接收新的数据项;
依据预定规则为所述数据项生成ID;
将所述ID分配给所述数据项;以及
将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器中。
A2、如A1所述的方法,所述方法还包括:
将所述ID的最大值保存在数据库所在服务器的内存中。
A3、如A2所述的方法,所述方法还包括:
当再次接收到新的数据项时,判断数据库所在服务器的内存中是否存在所述ID的最大值;
若不存在,则从所述非易失性储存器中获取所述ID的最大值,并依据预定规则为再次接收到的所述数据项生成ID。
A4、如A1~A3中任一项所述的方法,所述将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器中,进一步包括:
按照预设时间间隔将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器中。
A5、如A4所述的方法,所述按照预设时间间隔将所述ID中的最大值存储至所述数据库所在服务器的非易失性储存器中之前,所述方法还包括:
获取所述数据库的单位时间访问量,根据所述单位时间访问量确定所述预设时间间隔。
A6、如A3~A5中任一项所述的方法,所述将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器中,进一步包括:
将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器的一个存储单元中,并记录所述存储单元的地址;
相应地,所述从所述非易失性储存器中获取所述ID的最大值,进一步包括:
根据所述存储单元的地址从所述存储单元中获取所述ID的最大值。
A7、如A3~A5中任一项所述的方法,所述将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器中,进一步包括:
创建一个数据表,将已生成的ID的最大值存储至所述数据表中,所述数据表设置于所述非易失性储存器中;
相应地,所述从所述非易失性储存器中获取所述ID的最大值,进一步包括:
从所述数据表中获取所述ID的最大值。
B8、一种ID自动生成装置,包括:
数据接收单元,适于接收新的数据项;
ID生成单元,适于依据预定规则为所述数据项生成ID;
ID分配单元,适于将所述ID分配给所述数据项;以及
第一保存单元,适于将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器中。
B9、如B8所述的装置,所述装置还包括:
第二保存单元,适于将所述ID的最大值保存在数据库所在服务器的内存中。
B10、如B9所述的装置,所述装置还包括:
内存判断单元,适于当再次接收到新的数据项时,判断数据库所在服务器的内存中是否存在所述ID的最大值;在不存在时,从所述非易失性储存器中获取所述ID的最大值,并依据预定规则为再次接收到的所述数据项生成ID。
B11、如B8~B10中任一项所述的装置,所述第一保存单元,进一步适于按照预设时间间隔将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器中。
B12、如B11所述的装置,所述装置还包括:
间隔确定单元,适于获取所述数据库的单位时间访问量,根据所述单位时间访问量确定所述预设时间间隔。
B13、如B10~B12所述的装置,所述第一保存单元,进一步适于将已生成的ID的最大值保存在数据库所在服务器的非易失性储存器的一个存储单元中,并记录所述存储单元的地址;
相应地,所述内存判断单元,进一步适于根据所述存储单元的地址从所述存储单元中获取所述ID的最大值。
B14、如B10~B12所述的装置,所述第一保存单元,进一步适于创建一个数据表,将已生成的ID的最大值存储至所述数据表中,所述数据表设置于所述非易失性储存器中;
相应地,所述内存判断单元,进一步适于从所述数据表中获取所述ID的最大值。