CN105812248A - 标识取值的分配方法和装置 - Google Patents
标识取值的分配方法和装置 Download PDFInfo
- Publication number
- CN105812248A CN105812248A CN201610303538.9A CN201610303538A CN105812248A CN 105812248 A CN105812248 A CN 105812248A CN 201610303538 A CN201610303538 A CN 201610303538A CN 105812248 A CN105812248 A CN 105812248A
- Authority
- CN
- China
- Prior art keywords
- mark
- value
- interval
- mark value
- distribution
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L51/00—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
- H04L51/52—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail for supporting social networking services
Landscapes
- Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种标识取值的分配方法和装置。其中,该方法包括:接收标识分配请求,标识分配请求中携带有待分配标识取值的对象的类型;确定与类型对应的目标标识取值区间,目标标识取值区间中存在尚未分配的标识取值;从尚未分配的标识取值中,选择一个目标标识取值作为待分配给对象的标识取值。本发明解决了相关技术中标识资源的使用率较低的技术问题。
Description
技术领域
本发明涉及互联网领域,具体而言,涉及一种标识取值的分配方法和装置。
背景技术
在一些应用程序(如社交平台应用)中,每秒钟会产生上万条消息,每条消息都需要分配一条唯一的ID(如在分布式系统中,通过多个服务器来协同处理ID生成请求时,针对不同的ID生成请求,不同的服务器产生的ID不同),这些ID还需要以一定的顺序排列,以方便客户端排序,为了满足上述的需求,ID生成算法应运而生,并逐渐地被广泛应用于各种场景中。
现有的ID生成算法生成的ID位数一般是固定的,如图1所示的算法生成的ID位数为64位,这个64位ID包括如下4部分:(1)41位时间戳,使用精确到毫秒的长度为41位的时间序列可以使用69年;(2)10位的工作机器标识,10位长度的标识最多支持部署1024个机器节点;(3)12位的计数序列号,12位的计数序列号支持每个节点每毫秒产生4096个ID序号;(4)最高比特位标记为不可用。
通过上述ID生成算法生成的ID是固定位数(如64位),在一些应用的生成ID的场景中,如为账号分配ID时,不需要生成大量的ID,也不需要生成上述固定长度的ID,如,不需要每个毫秒生成ID,更加不需要部署多达1024个的机器节点,对于这些不需要生成大量ID场景来说,通过现有技术中的ID生成方案,会造成可用标识资源(即可用的ID资源)的浪费,并影响可用ID资源的使用率。
针对相关技术中标识资源的使用率较低的技术问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种标识取值的分配方法和装置,以至少解决相关技术中标识资源的使用率较低的技术问题。
根据本发明实施例的一个方面,提供了一种标识取值的分配方法,该方法包括:接收标识分配请求,其中,标识分配请求中携带有待分配标识取值的对象的类型;确定与类型对应的目标标识取值区间,其中,目标标识取值区间中存在尚未分配的标识取值;从尚未分配的标识取值中,选择一个目标标识取值作为待分配给对象的标识取值。
根据本发明实施例的另一方面,还提供了一种标识取值的分配装置,该装置包括:接收单元,用于接收标识分配请求,其中,标识分配请求中携带有待分配标识取值的对象的类型;确定单元,用于确定与类型对应的目标标识取值区间,其中,目标标识取值区间中存在尚未分配的标识取值;处理单元,用于从尚未分配的标识取值中,选择一个目标标识取值作为待分配给对象的标识取值。
采用本发明上述实施例,在接收到标识分配请求之后,确定一个与该对象的类型对应的目标标识取值区间,该目标标识取值区间中存在尚未分配的标识取值,从该目标标识取值区间的尚未分配的标识取值中,选择一个目标标识取值作为待分配给对象的标识取值,并利用该目标标识取值标识该对象,通过上述实施例,将目标标识取值区间中尚未分配的标识取值分配给对象,可以解决了相关技术中标识资源的使用率较低的技术问题,提高了标识资源的使用率。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据现有技术的一种标识信息结构的示意图;
图2是根据本发明实施例的一种终端的硬件环境示意图;
图3是根据本发明实施例的标识取值的分配系统的示意图;
图4是根据本发明实施例的标识取值的分配方法的流程图;
图5是根据本发明实施例的共享内存的示意图;
图6是根据本发明实施例一个可选的标识取值的分配方法的流程图;
图7是根据本发明实施例的标识取值的分配装置的示意图;
图8是根据本发明实施例的一种可选的标识取值的分配装置的示意图;
图9是根据本发明实施例的另一种可选的标识取值的分配装置的示意图;
图10是根据本发明实施例的另一种可选的标识取值的分配装置的示意图;
图11是根据本发明实施例的另一种可选的标识取值的分配装置的示意图;以及
图12是根据本发明实施例的另一种终端的硬件环境示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
首先,对本发明实施例中涉及的术语解释如下:
共享内存(英文名称为SharedMemory):共享内存是Unix系统下的多进程之间的一种通信方法,这种方法通常用于一个程序的多进程间的通信,实际上多个程序间也可以通过共享内存来传递信息。
数据库(英文名称为Database,简称DB):以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度的特点的数据集合,该数据集合是与应用程序彼此独立的数据集合。
服务(英文名称为Server):是相对于客户端(client)而言的,指能够开放网络端口,接受其他的客户端软件建立的连接,并且通过此连接与客户端软件之间交换数据的软件。
标识取值区间:包含若干个用于分配给目标对象的标识取值的集合,集合中的标识取值可以是连续的,标识取值用于标识目标对象的身份,如为每条消息分配的消息ID(即Identity)。
实施例1
根据本发明实施例,提供了一种标识取值的分配方法,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
可选地,在本实施例中,本申请的分配方法可以应用于如图2所示的发起请求的终端10和处理请求的服务器20所构成的硬件环境中。如图2所示,终端10通过网络与服务器20进行连接。上述的终端可以为移动终端或者固定终端,如笔记本电脑、台式电脑、平板电脑和PDA。
上述网络包括但不限于:广域网、城域网或局域网。优选地,上述的网络为局域网。
为了实现本申请的分配方法,可以采用图3所示的系统部署架构,如图3所示,该架构在逻辑上可以分为3个部分:服务器侧的多个节点(每个节点均可以为一个物理服务器)、共享内存(设置在各个节点上)和数据库。通过上述节点、共享内存和数据库可以共同组成一个高可用、高性能的服务系统。
上述的节点为服务部署的机器或者服务器,用于处理分配请求,使用上述方法可以平行扩展,通过部署多个机器,实现服务的高可用性;共享内存在物理上存在于各个节点中,该共享内存不同于传统的内存,该共享内存可以防止节点重启时丢失可分配ID区间(即本申请实施例中的标识取值区间),以避免浪费可分配的ID资源,同时,共享内存也兼具传统内存的高性能特性,可以保证服务的高性能。
为了实现本申请的方法,实现服务的平行扩展和多点部署,通过数据库来同步各个节点的最大可分配ID,这样可以保证由各个节点分配出去的ID不会重复,数据库的功能为统筹管理ID资源,各个节点和数据库之间可以相互读写资源,也即数据库可以实时读取并备份部署在各个节点的共享内存上的数据,防止节点中的共享内存由于某种原因丢失后,节点无法正确初始化共享内存。
对于终端上的轻量级应用(如手游类应用、阅读类应用、网银类应用等)而言,其主要用于提供游戏、娱乐、网银等功能,其消息量相对较小,使用上述的方法和系统为应用的消息分配对应的标识取值,可以减轻移动终端的存储压力,同时提高标识资源的使用率。
图4是根据本发明实施例的标识取值的分配方法的流程图,如图4所示,该方法应用在图3所示的系统部署架构中的任意一个节点上,该方法包括:
步骤S401,接收标识分配请求,标识分配请求中携带有待分配标识取值的对象的类型;
步骤S402,确定与类型对应的目标标识取值区间,目标标识取值区间中存在尚未分配的标识取值;
步骤S403,从尚未分配的标识取值中,选择一个目标标识取值作为待分配给对象的标识取值。
采用本发明上述实施例,在接收到标识分配请求之后,确定一个与该对象的类型对应的目标标识取值区间,该目标标识取值区间中存在尚未分配的标识取值,从该目标标识取值区间的尚未分配的标识取值中,选择一个目标标识取值作为待分配给对象的标识取值,并利用该目标标识取值标识该对象,通过上述实施例,将目标标识取值区间中尚未分配的标识取值分配给对象,可以解决了相关技术中标识资源的使用率较低的技术问题,提高了标识资源的使用率。
具体地,现有技术中,在应用程序中,按照时间生成ID,甚至为每个毫秒分配多个数值,在同一毫秒中,若只接收到一个ID生成请求,则只会生成一个ID,该毫秒中其余的为该应用程序配置的ID不会被使用,也即,这些ID被浪费掉了。
而本申请的上述实施例中,在确定与类型对应的目标标识取值区间之后,从该目标标识取值区间中尚未被分配的标识取值中选取一个目标标识取值作为该对象的标识取值,该区间中尚未被分配的标识取值均会有被选取的机会,如果标识分配请求足够多,该区间中的所有标识取值均可能被选取,在该方案中,区间中配置的标识取值不会有浪费。
进一步地,上述实施例中,每个标识取值区间中标识取值的数值不同,标识取值的长度也不同,而现有技术中的ID生成的长度固定均为64位,与现有技术中的方案相比,本申请实施例中的标识取值的长度可以变化,如,标识取值较小时,长度可以设置为8位或16位的。
上述实施例,对象可以为账号、多媒体类型(如图片类型或音视频类型)、以及社交平台文件类型(如对象为帖子,则该对象的类型即为社交平台文件类型),对象的类型可以以类型标识的方式携带在标识分配请求中,如,id=a表示该对象的类型为账号类型。
下面以手游宝应用为例,详述本发明实施例:
在终端上启动手游宝应用的客户端之后,客户端会根据用户的操作发送对应的操作信息至对应的服务器,服务器根据用户的操作信息生成对应的标识分配请求,如在用户注册账号时生成注册消息的标识分配请求、在用户进行支付操作时生成支付消息的标识分配请求、在用户与其他用户通过该应用进行聊天时生成聊天消息的标识分配请求、在用户进行道具选择时生成道具选择消息的标识分配请求等,服务器端在生成标识分配请求之后,也即服务器获取到标识分配请求。
服务器根据其对象的类型(如支付、聊天、道具选择等)确定与之对应的标识取值区间,从标识取值区间中获取尚未分配的目标标识取值,并利用目标标识取值标识该对象(该对象可以为消息)。
需要说明的是,目标标识取值区间中标识取值的最小值没有限制,如可以从零开始,需要使用多少ID,就生成多少ID;进一步地,目标标识取值区间中的标识取值可以根据标识分配请求的数量而变化,如,初始的目标标识取值区间可以为1至100,在将该目标标识取值区间的标识取值分配完之后,可以对目标标识取值区间中的标识取值重新配置或者重新配置一个目标标识取值区间,如配置一个标识取值以101开始,以200结束的标识取值区间。由此可以看出,每一个对象对应于一个标识取值,随着标识取值的分配,标识取值的数值会发生变化,标识取值的长度也会发生变化,这样,可以将标识取值配置为在满足标识分配请求的同时标识取值的长度最短,从而可以降低终端上存储标识取值的压力。
需要说明的是,本发明实施例中的标识取值可以直接作为标识的值,利用该标识的值标识对应的对象,以完成对该对象的标注。
上述实施例中的步骤S402,确定与类型对应的目标标识取值区间可以通过如下方式实现:
步骤S4021,判断当前节点上的当前标识取值区间中是否存在尚未分配的标识取值。
各个节点上的标识取值区间均可以存在共享内存中,在共享内存上可以同时存储多个业务对象的标识取值区间,在当前节点(如服务器)接收到标识分配请求时,解析出标识分配请求中的业务对象信息(即待分配标识取值的对象的类型),并根据该类型读取共享内存中存储的该类型的当前标识取值区间。
在获取到当前标识取值区间之后,判断当前标识取值区间中是否存在尚未分配的标识取值,具体地,可以通过判断当前标识取值区间是否为空来判断当前标识取值区间中是否存在尚未分配的标识取值,可选地,可以采用下述方式实现:
获取当前标识取值区间中最后分配的标识取值和允许分配的最大标识取值;若最后分配的标识取值等于最大标识取值,则判断出当前标识取值区间中不存在尚未分配的标识取值;若最后分配的标识取值小于最大标识取值,则判断出当前标识取值区间中存在尚未分配的标识取值。
其中,最后分配的标识取值为最后一次分配出去的标识取值,该值随着标识取值的分配会发生变化;允许分配的最大标识取值为该当前标识取值区间中的最大标识取值,该最大标识取值对于一个当前标识取值区间来讲可以是不变的。
图5示出了各个节点的共享内存中存储标识取值区间的一种数据结构,如图5所示,该数据结构中可以包括两个字段,最后分配的标识取值(即CurrentID)字段和允许分配的最大标识取值(即MaxID)字段,该CurrentID可以为最后一次分配出去的标识取值,在读取了在共享内存中的当前标识取值区间之后,即可通过这两个参数确定该取值区间是否为有效的取值区间,即判断当前标识取值区间中是否存在尚未分配的标识取值。
步骤S4022,若该当前标识取值区间中存在尚未分配的标识取值,则可以将当前标识取值区间确定为目标标识取值区间。
如,当前标识取值区间的CurrentID为100,MaxID为200的情况下,CurrentID小于MaxID,则表明当前标识取值区间为有效的取值区间,当前标识取值区间中存在尚未分配的标识取值,可以将当前标识取值区间确定为目标标识取值区间,从该当前标识取值区间中选取目标标识取值,以根据标识分配请求进行ID分配。
步骤S4023,若该当前标识取值区间中不存在尚未分配的标识取值,则获取新的标识取值区间,并将新的标识取值区间确定为目标标识取值区间,其中,新的标识取值区间中的标识取值均未被分配,且新的标识取值区间与目标标识取值区间的区间范围不重叠。
如,在CurrentID为200,且MaxID为200的情况下,则确定该当前标识取值区间为无效的取值区间,若仍将该当前标识取值区间中的标识取值分配给业务对象,则分配的标识取值会溢出该取值区间,并且有可能导致该分配的标识取值重复,影响系统的可靠性。为了保证系统的可靠运行,在该种情况下,获取新的标识取值区间,并将新的标识取值区间确定为目标标识取值区间,并利用新获取的目标标识取值区间中的标识取值为对象分配对应的标识取值。
需要说明的是,在上述实施例中,在判断出当前标识取值区间中不存在尚未分配的标识取值之后,获取新的标识取值区间。在本申请实施例中中,可以由数据库统一对多个节点进行标识取值区间的分配,在获取新的标识取值区间时,可以从数据库中,获取与类型对应的新的标识取值区间,新的标识取值区间的区间范围与数据库已经分配的标识取值区间的区间范围相连续、且不重叠。即对于数据库而言,可以向多个节点分配相互联系且互不重叠的区间范围。
可选地,在数据库中设置多个字段,用字段“iAppID”记录对象的类型的标识,用字段“IBeginID”记录该类型的起始分配取值,用字段“iInterval”记录该对象的类型每次可分配给一个节点的区间长度。
其中,该起始分配取值可以自定义(如预先配置),如可以从零开始,也可以从某个自然数开始,本申请对此不做限定。上述的区间长度也可以为预先配置的长度,也可以根据该对象的类型进行动态调整,如,在某个时间段内,接收标识分配请求的频率高于预定阈值,则在分配区间时可以分配一个较长的区间长度,该较长的区间长度可以是该预先配置的长度的N倍,N大于1,N可以为自然数或者小数。
进一步地,在执行步骤S401的接收标识分配请求之前,可以通过数据库对各个节点中的标识取值区间进行初始化配置,具体地,可以将用于标识目标标识取值区间的信息存储在当前节点的共享内存中。其中,该信息包括:目标标识取值区间中最后分配的标识取值和允许分配的最大标识取值,最后分配的标识取值的初始值为允许分配的最小标识取值。
具体地,在初始化时,获取目标标识取值区间的取值起点和区间长度,该最后分配的标识取值为允许分配的最小标识取值,也即上述的取值起点,在该目标标识取值区间中存在分配出去的标识取值的情况下,该最后分配的标识取值为最后一次分配出去的标识取值。
下面以一个类型为例,详述上述初始化的分配过程:
数据库确定待分配标识取值区间的节点的数量P、该类型的标识起始取值Q以及区间长度M,依次获取各个标识取值区间的信息保存至各个节点的共享内存中,则第i个节点分配到的标识取值区间可以为[Q+(i-1)M,Q+iM),其中,i为大于等于1且小于等于P的自然数;或者将该区间表示为(Q+(i-1)M,Q+iM]。
进一步地,该区间的初始表现形式可以为一个闭区间,也可以为前开后闭的区间或者为前闭后开的区间。
在该区间的初始表现形式可以为一个闭区间的情况下,两个端点中值小的端点为最后分配的标识取值;两个端点中值大的端点为允许分配的最大标识取值。
在该区间初始形式表示为[Q+(i-1)M,Q+iM)的情况下,允许分配的最大标识取值为Q+iM-1,最后分配的标识取值的初始值为Q+(i-1)M;在该区间的初始形式表示为(Q+(i-1)M,Q+iM]的情况下,允许分配的最大标识取值为Q+iM,最后分配的标识取值的初始值为Q+(i-1)M+1。
需要说明的是,确定分配给当前节点的标识取值区间之后,可以将该区间的两个端点的数值(即上述的最后分配的标识取值的初始值和允许分配的最大标识取值)发送至该当前节点的共享内存中,并将两个端点的取值存储在对应的字段中。
可选地,在从尚未分配的标识取值中选择目标标识取值时,可以从尚未分配的标识取值中选取最小值作为目标标识取值。
例如,该当前标识取值区间被确定为目标标识取值区间,且该当前标识取值区间的初始表现形式为(1,100],第一次分配标识取值时,可以将“1”分配出去,并且该“1”是最后一次分配出去的标识取值,该标识取值区间仍被记录为(1,100],第二次分配标识取值时,则获取的最后一次分配出去的标识取值为“1”,将标识取值“2”分配出去之后,该标识取值区间被记录为(2,100]。
下面结合图6详述本申请的实施例,如图6所示,该实施例可以通过如下步骤实现:
步骤S601,初始化iInterval配置。
根据需要配置每个类型的iInterval的值,可以为不同的类型配置相同的值,如不同的类型的起始取值均配置为100,也可以为不同的类型配置不同的值,如对于某些消息量较多的类型(如社交平台文件类型)配置较大的数值,对某些消息量较少的类型(如账号类型)配置较小的数值,对于同一业务对象,也可以根据该业务对象的消息量的变化,调整iInterval的值。
步骤S602,判断CurrentID是否小于MaxID。
在各个节点接收到标识分配请求时,需要判断当前节点上的当前标识取值区间中是否存在尚未分配的标识取值,即判断CurrentID是否小于MaxID。若是则执行步骤S603,若否则执行步骤S604。
步骤S603,更新数据库中的IBeginID和共享内存的CurrentID、MaxID。
例如,若共享内存中CurrentID和MaxID的值均为200,数据库中,IBeginID的值为1101,iInterval的值为150,则在为共享内存分配新的标识取值区间之后,该共享内存中CurrentID的值为1101,MaxID的值为1250,更新后的数据库中的IBeginID的值为1251,在下次接收到共享内存的请求时,通过更新后的IBeginID为其分配标识取值区间。
步骤S604,为对象分配对应的ID。
可选地,从目标标识取值区间中的尚未分配的标识取值中,选择一个目标标识取值作为待分配给对象的标识取值:获取尚未分配的标识取值中的极值;将极值(如极小值)作为待分配给对象的标识取值。
具体地,可以对该尚未分配的标识取值排序,得到按照预定顺序排序的标识取值序列,从该标识取值序列中读取第一个或最后一个标识取值,将该读取到的标识取值作为目标标识取值。
在一个可选的实施例中,可以将分配出去(或者已经分配)的标识取值标记为已分配。
在另一个可选的实施例中,可以在将极值(如极小值)作为待分配给对象的标识取值之后,将该极值从尚未分配的标识取值中删除。
具体地,当分配请求过来的时候,服务会去比较CurrentID的值和MaxID的值的大小,如果CurrentID的值小于MaxID的值,则直接将CurrentID的值加1后返回给调用方,不需要和数据库交互;如果CurrentID的值等于MaxID的值,则需要和数据库交互,取出数据库中的IBeginID的值,结合配置的区间值iInterval,更新数据库中的IBeginID的值,同时更新共享内存中的CurrentID的值和MaxID的值。
例如,若是在共享内存更新了新的标识取值区间之后,可以直接将标识取值区间中的可分配的取值中的最小值分配给业务对象,如将上述的标识取值区间[1101,1150)中的1101分配给业务对象,然后将1101从该标识取值区间中删除,对于保存该标识取值区间的节点而言,新的当前标识取值区间变为前开后闭的取值区间(1101,1150)。当新的分配请求来的时候,当前节点会通过取值区间(1101,1150)为其分配对应的标识取值(即ID)。
若在节点接收到标识分配请求时,判断出当前标识取值区间中存在尚未分配的标识取值,就会读取该取值区间,如读取上述的取值区间(1101,1150),并直接将“CurrentID”的值加1后返回给调用方,即将1102返回给调用方,用于标识业务对象,不需要和数据库交互。同时,更新共享内存中CurrentID的值,即当前标识取值区间变更为(1102,1150)。
在上述实施例中,业务对象的类型包括账号类型、多媒体类型和社交平台文件类型,例如,对于移动终端上的移动应用而言,该应用可能存在多种信息标识的需求,如账号信息,图片视频等多媒体信息,在论坛发表的帖子等论坛共享信息。
例如,在手游类应用中,许多的业务需要生成唯一的ID(即上述的标识取值),在用户首次使用的时候需要先注册账号,需要对账号进行标识,生成账号ID;在用户通过该应用发表帖子时,需要为这条帖子生成一个帖子ID;在用户通过该应用上传图片时,需要为这张图片生成一个图片ID等。这里展示了3种需要生成ID的业务场景(即3中对象类型):账号申请、帖子发表和图片上传,这些ID在各自业务范围内需具备唯一性,即所有的账号ID中不能有重复的,所有的帖子ID中不能有重复的,所有的图片ID中不能有重复的,但是,账号ID可以和帖子ID或者图片ID重复。同时,在这些业务ID中,尤其是在账号ID中,为了易于用户传播和方便开发人员调试程序和解决问题,也应当具备较高的可读性,如果ID太长,显然不便于开发人员调试,因此,在满足业务需求的同时应该尽量缩短ID的长度。使用上述的方法,在应用端会将用户的操作信息发送至服务器,服务器会根据接收到的操作信息生成对应的标识分配请求,根据对象类型确定与之对应的标识取值区间,从标识取值区间中获取尚未分配的标识取值,并通过该标识取值标识当前消息。
需要说明的是,在服务器接收到标识分配请求时,首先会判断业务对象的类型,然后为其分配对应的目标标识取值,在确定了待分配给对象的目标标识取值之后,还可以根据需要,根据业务对象的类型对目标标识取值进行不同的处理。
在一个可选的实施例中,对于多媒体类型和社交平台文件类型的目标标识取值,在服务器侧接收到的是移动终端的多媒体信息或者论坛共享信息,然后需要判断服务器中是否已经存在已经标识的且与移动终端上传的多媒体信息或者论坛共享信息相同的信息,若存在,则不需要进行标识,若不存在,则会生成对应的标识分配请求,以为对应的多媒体信息或者论坛共享信息分配目标标识取值,并直接将目标标识取值和对应的多媒体信息或者论坛共享信息保存在服务器即可。
在另一个可选的实施例中,对于类型为账号类型的信息,其相当于是在移动终端上生成了一个标识分配请求,服务器接收到的标识分配请求为客户端发送的,而不是在服务器侧生成的,在接收到标识分配请求之后,从尚未分配的标识取值中,选择一个目标标识取值作为待分配给对象的标识取值,并将目标标识取值发送至客户端,用户可通过客户端接收器申请的账号信息(即接收到的目标标识取值)。
可选地,为了提高标识取值的可读性,目标标识取值以十进制的方式表示。
在上述实施例中,在数据库的表中用字段“iAppid”表示业务的业务ID,用字段“lBeginId”表示该业务的起始分配ID,并详细描述了根据业务对象的类型产生唯一ID(即标识取值)的流程,各个业务对象之间是平行独立的关系,支持多业务对象的扩展,在新增业务对象时,只需做微小的改动即能实现,即增加新的业务ID;服务部署的各个机器的共享内存节点中增加了“CurrentID”和“MaxID”两字段,用于表示可分配的取值区间,在业务方发出请求时带上各自的业务ID,服务就会找到对应的业务下的共享内存节点,并为其分配ID。
通过上述实施例,利用本申请的方法生成的ID,ID的长度没有最低长度限制,可以从0开始,业务对象使用多少ID就生成多少ID,最大支持生成“263-1”个ID,即ID的最大长度为63位,可以满足绝大部分业务场景,且由于起始ID和每次分配的区间长度可以根据需要进行配置,这样在生成的ID的长度有很大的灵活性,从而可以解决现有的ID生成算法(如Twitter-Snowflake算法)生成的ID过长的问题,实现ID长度的灵活配置,且由于其分配ID时是从区间中的最小ID开始分配,因此,可以避免资源浪费的问题,提高标识资源的利用率。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
实施例2
根据本发明实施例,还提供了一种用于实施上述标识取值的分配方法的标识取值的分配装置。
可以将本申请的分配装置应用到如图3所示的系统部署架构中,如图3所示,该架构在逻辑上可以分为3个部分:服务器侧的多个节点(每个节点均可以为一个物理服务器)、共享内存(设置在各个节点上)和数据库。通过上述节点、共享内存和数据库可以共同组成一个高可用、高性能的服务系统。
上述的节点为服务部署的机器或者服务器,用于处理分配请求,通过部署多个机器,实现服务的高可用性;共享内存在物理上存在于各个节点中,该共享内存不同于传统的内存,该共享内存可以防止节点重启时丢失可分配ID区间(即本申请实施例中的标识取值区间),以避免浪费可分配的ID资源,同时,共享内存也兼具传统内存的高性能特性,可以保证服务的高性能。
为了实现本申请的装置,实现服务的平行扩展和多点部署,通过数据库来同步各个节点的最大可分配ID,这样可以保证由各个节点分配出去的ID不会重复,数据库的功能为统筹管理ID资源,各个节点和数据库之间可以相互读写资源,也即数据库可以实时读取并备份部署在各个节点的共享内存上的数据,防止节点中的共享内存由于某种原因丢失后,节点无法正确初始化共享内存。
对于终端上的轻量级应用(如手游类应用、阅读类应用、网银类应用等)而言,其主要用于提供游戏、娱乐、网银等功能,其消息量相对较小,使用上述的装置和系统为应用的消息分配对应的标识取值,可以减轻移动终端的存储压力,同时提高标识资源的使用率。
图7是根据本发明实施例的标识取值的分配装置的示意图,如图7所示,该装置包括:接收单元71、确定单元72以及处理单元73。
接收单元71用于接收标识分配请求,标识分配请求中携带有待分配标识取值的对象的类型;
确定单元72用于确定与类型对应的目标标识取值区间,目标标识取值区间中存在尚未分配的标识取值;
处理单元73用于从尚未分配的标识取值中,选择一个目标标识取值作为待分配给对象的标识取值。
采用本发明上述实施例,接收单元接收到一个标识分配请求;确定单元确定一个与该对象的类型对应的目标标识取值区间,该目标标识取值区间中存在尚未分配的标识取值;处理单元从该目标标识取值区间的尚未分配的标识取值中,选择一个目标标识取值作为待分配给对象的标识取值,并利用该目标标识取值标识该对象,通过上述实施例,将目标标识取值区间中尚未分配的标识取值分配给对象,可以解决了相关技术中标识资源的使用率较低的技术问题,提高了标识资源的使用率。
具体地,现有技术中,在应用程序中,按照时间生成ID,甚至为每个毫秒分配多个数值,在同一毫秒中,若只接收到一个ID生成请求,则只会生成一个ID,该毫秒中其余的为该应用程序配置的ID不会被使用,也即,这些ID被浪费掉了。
而本申请的上述实施例中,在确定与类型对应的目标标识取值区间之后,从该目标标识取值区间中尚未被分配的标识取值中选取一个目标标识取值作为该对象的标识取值,该区间中尚未被分配的标识取值均会有被选取的机会,如果标识分配请求足够多,该区间中的所有标识取值均可能被选取,在该方案中,区间中配置的标识取值不会有浪费。
进一步地,上述实施例中,每个标识取值区间中标识取值的数值不同,标识取值的长度也不同,而现有技术中的ID生成的长度固定均为64位,与现有技术中的方案相比,本申请实施例中的标识取值的长度可以变化,如,标识取值较小时,长度可以设置为8位或16位的。
上述实施例,对象可以为账号、多媒体类型(如图片类型或音视频类型)、以及社交平台文件类型(如对象为帖子,则该对象的类型即为社交平台文件类型),对象的类型可以以类型标识的方式携带在标识分配请求中,如,id=a表示该对象的类型为账号类型。
下面以手游宝应用为例,详述本发明实施例:
在终端上启动手游宝应用的客户端之后,客户端会根据用户的操作发送对应的操作信息至对应的服务器,服务器根据用户的操作信息生成对应的标识分配请求,如在用户注册账号时生成注册消息的标识分配请求、在用户进行支付操作时生成支付消息的标识分配请求、在用户与其他用户通过该应用进行聊天时生成聊天消息的标识分配请求、在用户进行道具选择时生成道具选择消息的标识分配请求等,服务器端在生成标识分配请求之后,也即服务器获取到标识分配请求。
服务器根据其对象的类型(如支付、聊天、道具选择等)确定与之对应的标识取值区间,从标识取值区间中获取尚未分配的目标标识取值,并利用目标标识取值标识该对象(该对象可以为消息)。
需要说明的是,目标标识取值区间中标识取值的最小值没有限制,如可以从零开始,需要使用多少ID,就生成多少ID;进一步地,目标标识取值区间中的标识取值可以根据标识分配请求的数量而变化,如,初始的目标标识取值区间可以为1至100,在将该目标标识取值区间的标识取值分配完之后,可以对目标标识取值区间中的标识取值重新配置或者重新配置一个目标标识取值区间,如配置一个标识取值以101开始,以200结束的标识取值区间。由此可以看出,每一个对象对应于一个标识取值,随着标识取值的分配,标识取值的数值会发生变化,标识取值的长度也会发生变化,这样,可以将标识取值配置为在满足标识分配请求的同时标识取值的长度最短,从而可以降低终端上存储标识取值的压力。
需要说明的是,本发明实施例中的标识取值可以直接作为标识的值,利用该标识的值标识对应的对象,以完成对该对象的标注。
在接收单元接收标识分配请求之前,可以通过数据库对各个节点中的标识取值区间进行初始化配置,具体可以通过如图8所示的分配装置的存储单元74实现,存储单元将用于标识目标标识取值区间的信息存储在当前节点的共享内存中,该信息包括:目标标识取值区间中最后分配的标识取值和允许分配的最大标识取值,最后分配的标识取值的初始值为允许分配的最小标识取值。在初始化之后,系统可提供标识取值分配的服务。
可选地,如图9所示,上述的确定单元72包括:判断模块721,用于判断当前节点上的当前标识取值区间中是否存在尚未分配的标识取值;第一确定模块722,用于若存在尚未分配的标识取值,则将当前标识取值区间确定为目标标识取值区间;第二确定模块723,用于若不存在尚未分配的标识取值,则获取新的标识取值区间,并将新的标识取值区间确定为目标标识取值区间,其中,新的标识取值区间中的标识取值均未被分配,且新的标识取值区间与目标标识取值区间的区间范围不重叠。
各个节点上的标识取值区间均可以存在共享内存中,在共享内存上可以同时存储多个业务对象的标识取值区间,在当前节点(如服务器)接收到标识分配请求时,解析出标识分配请求中的业务对象信息(即待分配标识取值的对象的类型),并根据该类型读取共享内存中存储的该类型的当前标识取值区间。
在获取到当前标识取值区间之后,判断模块就判断当前标识取值区间中是否存在尚未分配的标识取值,如图10所示,通过判断模块721的下述子模块实现:获取子模块7211,用于获取当前标识取值区间中最后分配的标识取值和允许分配的最大标识取值;第一判断子模块7212,用于若最后分配的标识取值等于最大标识取值,则判断出当前标识取值区间中不存在尚未分配的标识取值;第二判断子模块7213,用于若最后分配的标识取值小于最大标识取值,则判断出当前标识取值区间中存在尚未分配的标识取值。
其中,最后分配的标识取值为最后一次分配出去的标识取值,该值随着标识取值的分配会发生变化;允许分配的最大标识取值为该当前标识取值区间中的最大标识取值,该最大标识取值对于一个当前标识取值区间来讲可以是不变的。
在图5中,示出了在各个节点的共享内存中,标识取值区间的一种数据结构,如图5所示,该数据结构主要包括已最后分配的标识取值(即CurrentID)和允许分配的最大标识取值(即MaxID),CurrentID可以为最后一次分配出去的标识取值,在服务器读取了在共享内存中的当前标识取值区间之后,即可通过这两个参数确定该取值区间是否为有效的取值区间,即判断当前标识取值区间中是否存在尚未分配的标识取值。
如,当前标识取值区间的CurrentID为100,MaxID为200的情况下,CurrentID小于MaxID,则表明当前标识取值区间为有效的取值区间,当前标识取值区间中存在尚未分配的标识取值,可以将当前标识取值区间确定为目标标识取值区间,从该当前标识取值区间中选取目标标识取值,以根据标识分配请求进行ID分配。
而在CurrentID为200,且MaxID为200的情况下,则确定该当前标识取值区间为无效的取值区间,若仍将该当前标识取值区间中的标识取值分配给业务对象,则分配的标识取值会溢出该取值区间,并且有可能导致该分配的标识取值重复,影响系统的可靠性。为了保证系统的可靠运行,在该种情况下,获取新的标识取值区间,并将新的标识取值区间确定为目标标识取值区间,并利用新获取的目标标识取值区间中的标识取值为对象分配对应的标识取值。
需要说明的是,在上述实施例中,在判断出当前标识取值区间中不存在尚未分配的标识取值之后,获取新的标识取值区间。在本申请实施例中中,可以由数据库统一对多个节点进行标识取值区间的分配,在获取新的标识取值区间时,可以从数据库中,获取与类型对应的新的标识取值区间,新的标识取值区间的区间范围与数据库已经分配的标识取值区间的区间范围相连续、且不重叠。即对于数据库而言,可以向多个节点分配相互联系且互不重叠的区间范围。
可选地,在数据库中设置多个字段,用字段“iAppID”记录对象的类型的标识,用字段“IBeginID”记录该类型的起始分配取值,用字段“iInterval”记录该对象的类型每次可分配给一个节点的区间长度。
其中,该起始分配取值可以自定义(如预先配置),如可以从零开始,也可以从某个自然数开始,本申请对此不做限定。上述的区间长度也可以为预先配置的长度,也可以根据该对象的类型进行动态调整,如,在某个时间段内,接收标识分配请求的频率高于预定阈值,则在分配区间时可以分配一个较长的区间长度,该较长的区间长度可以是该预先配置的长度的N倍,N大于1,N可以为自然数或者小数。
进一步地,在接收标识分配请求之前,可以通过数据库对各个节点中的标识取值区间进行初始化配置,具体地,可以将用于标识目标标识取值区间的信息存储在当前节点的共享内存中。其中,该信息包括:目标标识取值区间中最后分配的标识取值和允许分配的最大标识取值,最后分配的标识取值的初始值为允许分配的最小标识取值。
具体地,在初始化时,获取目标标识取值区间的取值起点和区间长度,该最后分配的标识取值为允许分配的最小标识取值,也即上述的取值起点,在该目标标识取值区间中存在分配出去的标识取值的情况下,该最后分配的标识取值为最后一次分配出去的标识取值。
下面以一个类型为例,详述上述初始化的分配过程:
数据库确定待分配标识取值区间的节点的数量P、该类型的标识起始取值Q以及区间长度M,依次获取各个标识取值区间的信息保存至各个节点的共享内存中,则第i个节点分配到的标识取值区间可以为[Q+(i-1)M,Q+iM),其中,i为大于等于1且小于等于P的自然数;或者将该区间表示为(Q+(i-1)M,Q+iM]。
进一步地,该区间的初始表现形式可以为一个闭区间,也可以为前开后闭的区间或者为前闭后开的区间。
在该区间的初始表现形式可以为一个闭区间的情况下,两个端点中值小的端点为最后分配的标识取值;两个端点中值大的端点为允许分配的最大标识取值。
在该区间初始形式表示为[Q+(i-1)M,Q+iM)的情况下,允许分配的最大标识取值为Q+iM-1,最后分配的标识取值的初始值为Q+(i-1)M;在该区间的初始形式表示为(Q+(i-1)M,Q+iM]的情况下,允许分配的最大标识取值为Q+iM,最后分配的标识取值的初始值为Q+(i-1)M+1。
需要说明的是,确定分配给当前节点的标识取值区间之后,可以将该区间的两个端点的数值(即上述的最后分配的标识取值的初始值和允许分配的最大标识取值)发送至该当前节点的共享内存中,并将两个端点的取值存储在对应的字段中。
可选地,在从尚未分配的标识取值中选择目标标识取值时,可以从尚未分配的标识取值中选取最小值作为目标标识取值。
例如,该当前标识取值区间被确定为目标标识取值区间,且该当前标识取值区间的初始表现形式为(1,100],第一次分配标识取值时,可以将“1”分配出去,并且该“1”是最后一次分配出去的标识取值,该标识取值区间仍被记录为(1,100],第二次分配标识取值时,则获取的最后一次分配出去的标识取值为“1”,将标识取值“2”分配出去之后,该标识取值区间被记录为(2,100]。
根据需要配置每个类型的iInterval的值,可以为不同的类型配置相同的值,如不同的类型的起始取值均配置为100,也可以为不同的类型配置不同的值,如对于某些消息量较多的类型(如社交平台文件类型)配置较大的数值,对某些消息量较少的类型(如账号类型)配置较小的数值,对于同一业务对象,也可以根据该业务对象的消息量的变化,调整iInterval的值。
在各个节点接收到标识分配请求时,需要判断当前节点上的当前标识取值区间中是否存在尚未分配的标识取值,即判断CurrentID是否小于MaxID。
若当前节点上的当前标识取值区间中存在尚未分配的标识取值,则更新数据库中的IBeginID和共享内存的CurrentID、MaxID。
例如,若共享内存中CurrentID和MaxID的值均为200,数据库中,IBeginID的值为1101,iInterval的值为150,则在为共享内存分配新的标识取值区间之后,该共享内存中CurrentID的值为1101,MaxID的值为1250,更新后的数据库中的IBeginID的值为1251,在下次接收到共享内存的请求时,通过更新后的IBeginID为其分配标识取值区间。
在确定了目标标识取值区间之后,即可通过处理单元确定出需要分配的标识取值。如图11所示,具体可以通过处理单元73的如下模块实现:获取模块731,用于获取尚未分配的标识取值中的极值;处理模块732,用于将极值作为待分配给对象的标识取值。
需要说明的是,处理模块还用于在将极值作为待分配给对象的标识取值之后,将极值从尚未分配的标识取值中删除。在为业务对象分配ID时,可以分为如下两种情况:
例如,若是在共享内存更新了新的标识取值区间之后,可以直接将标识取值区间中的可分配的取值中的最小值分配给业务对象,如将上述的标识取值区间[1101,1150)中的1101分配给业务对象,然后将1101从该标识取值区间中删除,对于保存该标识取值区间的节点而言,新的当前标识取值区间变为前开后闭的取值区间(1101,1150)。当新的分配请求来的时候,当前节点会通过取值区间(1101,1150)为其分配对应的标识取值(即ID)。
若在节点接收到标识分配请求时,判断出当前标识取值区间中存在尚未分配的标识取值,就会读取该取值区间,如读取上述的取值区间(1101,1150),并直接将“CurrentID”的值加1后返回给调用方,即将1102返回给调用方,用于标识业务对象,不需要和数据库交互。同时,更新共享内存中CurrentID的值,即当前标识取值区间变更为(1102,1150)。
在上述实施例中,业务对象的类型包括账号类型、多媒体类型和社交平台文件类型,例如,对于移动终端上的移动应用而言,该应用可能存在多种信息标识的需求,如账号信息,图片视频等多媒体信息,在论坛发表的帖子等论坛共享信息。
需要说明的是,在服务器接收到标识分配请求时,首先会判断业务对象的类型,然后为其分配对应的目标标识取值,在确定了待分配给对象的目标标识取值之后,还可以根据需要,根据业务对象的类型对目标标识取值进行不同的处理。
在一个可选的实施例中,对于多媒体类型和社交平台文件类型的目标标识取值,在服务器侧接收到的是移动终端的多媒体信息或者论坛共享信息,然后需要判断服务器中是否已经存在已经标识的且与移动终端上传的多媒体信息或者论坛共享信息相同的信息,若存在,则不需要进行标识,若不存在,则会生成对应的标识分配请求,以为对应的多媒体信息或者论坛共享信息分配目标标识取值,并直接将目标标识取值和对应的多媒体信息或者论坛共享信息保存在服务器即可。
在另一个可选的实施例中,对于类型为账号类型的信息,其相当于是在移动终端上生成了一个标识分配请求,服务器接收到的标识分配请求为客户端发送的,而不是在服务器侧生成的,在接收到标识分配请求之后,从尚未分配的标识取值中,选择一个目标标识取值作为待分配给对象的标识取值,并将目标标识取值发送至客户端,用户可通过客户端接收器申请的账号信息(即接收到的目标标识取值)。
可选地,为了提高标识取值的可读性,目标标识取值以十进制的方式表示。
通过上述实施例,利用本申请的方法生成的ID,ID的长度没有最低长度限制,可以从0开始,业务对象使用多少ID就生成多少ID,最大支持生成“263-1”个ID,即ID的最大长度为63位,可以满足绝大部分业务场景,且由于起始ID和每次分配的区间长度可以根据需要进行配置,这样在生成的ID的长度有很大的灵活性,从而可以解决现有的ID生成算法(如Twitter-Snowflake算法)生成的ID过长的问题,实现ID长度的灵活配置,且由于其分配ID时是从区间中的最小ID开始分配,因此,可以避免资源浪费的问题,提高标识资源的利用率。
本实施例中所提供的各个模块与方法实施例对应步骤所提供的使用方法相同、应用场景也可以相同。当然,需要注意的是,上述模块涉及的方案可以不限于上述实施例中的内容和场景,且上述模块可以运行在计算机终端或移动终端,可以通过软件或硬件实现。
实施例3
根据本发明实施例,还提供了一种用于实施上述标识取值的分配方法的终端,上述实施例中的标识取值的分配装置可以设置在该终端上。
如图12所示,该终端包括:一个或多个(图中仅示出一个)处理器121、存储器122、以及传输装置123,如图12所示,该终端还可以包括输入输出设备124。
其中,存储器122可用于存储软件程序以及模块,如本发明实施例中的标识取值的分配方法和装置对应的程序指令/模块,处理器121通过运行存储在存储器122内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的标识取值的分配方法。存储器122可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器122可进一步包括相对于处理器121远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
上述的传输装置123用于经由一个网络接收或者发送数据,还可以用于处理器与存储器之间的数据传输。上述的网络具体实例可包括有线网络及无线网络。在一个实例中,传输装置123包括一个网络适配器(NetworkInterfaceController,NIC),其可通过网线与其他网络设备与路由器相连从而可与互联网或局域网进行通讯。在一个实例中,传输装置123为射频(RadioFrequency,RF)模块,其用于通过无线方式与互联网进行通讯。
其中,具体地,存储器122用于存储应用程序。
处理器121可以通过传输装置123调用存储器122存储的应用程序,以执行下述步骤:接收标识分配请求,标识分配请求中携带有待分配标识取值的对象的类型;确定与类型对应的目标标识取值区间,目标标识取值区间中存在尚未分配的标识取值;从尚未分配的标识取值中,选择一个目标标识取值作为待分配给对象的标识取值。
采用本发明上述实施例,在接收到标识分配请求之后,确定一个与该对象的类型对应的目标标识取值区间,该目标标识取值区间中存在尚未分配的标识取值,从该目标标识取值区间的尚未分配的标识取值中,选择一个目标标识取值作为待分配给对象的标识取值,并利用该目标标识取值标识该对象,通过上述实施例,将目标标识取值区间中尚未分配的标识取值分配给对象,可以解决了相关技术中标识资源的使用率较低的技术问题,提高了标识资源的使用率。
可选地,处理器121可以通过传输装置123调用存储器122存储的应用程序,以执行下述步骤:判断当前节点上的当前标识取值区间中是否存在尚未分配的标识取值;若存在尚未分配的标识取值,则将当前标识取值区间确定为目标标识取值区间;若不存在尚未分配的标识取值,则获取新的标识取值区间,并将新的标识取值区间确定为目标标识取值区间,其中,新的标识取值区间中的标识取值均未被分配,且新的标识取值区间与目标标识取值区间的区间范围不重叠。
可选地,处理器121可以通过传输装置123调用存储器122存储的应用程序,以执行下述步骤:获取当前标识取值区间中最后分配的标识取值和允许分配的最大标识取值;若最后分配的标识取值等于最大标识取值,则判断出当前标识取值区间中不存在尚未分配的标识取值;若最后分配的标识取值小于最大标识取值,则判断出当前标识取值区间中存在尚未分配的标识取值。
可选地,处理器121可以通过传输装置123调用存储器122存储的应用程序,以执行下述步骤:从数据库中,获取与类型对应的新的标识取值区间,其中,新的标识取值区间的区间范围与数据库已经分配的标识取值区间的区间范围相连续、且不重叠。
可选地,处理器121可以通过传输装置123调用存储器122存储的应用程序,以执行下述步骤:将用于标识目标标识取值区间的信息存储在当前节点的共享内存中,其中,信息包括:目标标识取值区间中最后分配的标识取值和允许分配的最大标识取值,最后分配的标识取值的初始值为允许分配的最小标识取值。
可选地,处理器121可以通过传输装置123调用存储器122存储的应用程序,以执行下述步骤:获取尚未分配的标识取值中的极值;将极值作为待分配给对象的标识取值;在将极值作为待分配给对象的标识取值之后,将极值从尚未分配的标识取值中删除。
可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。
本领域普通技术人员可以理解,图12所示的结构仅为示意,终端可以是台式机、笔记本、平板电脑、掌上电脑以及移动互联网设备(MobileInternetDevices,MID)、PAD等终端设备。图12其并不对上述电子装置的结构造成限定。例如,终端还可包括比图12中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图12所示不同的配置。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-OnlyMemory,ROM)、随机存取器(RandomAccessMemory,RAM)、磁盘或光盘等。
实施例4
本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于执行标识取值的分配方法。
可选地,在本实施例中,上述存储介质可以位于上述实施例所示的网络中的多个网络设备中的至少一个网络设备上。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:接收标识分配请求,标识分配请求中携带有待分配标识取值的对象的类型;确定与类型对应的目标标识取值区间,目标标识取值区间中存在尚未分配的标识取值;从尚未分配的标识取值中,选择一个目标标识取值作为待分配给对象的标识取值。
采用本发明上述实施例,在接收到标识分配请求之后,确定一个与该对象的类型对应的目标标识取值区间,该目标标识取值区间中存在尚未分配的标识取值,从该目标标识取值区间的尚未分配的标识取值中,选择一个目标标识取值作为待分配给对象的标识取值,并利用该目标标识取值标识该对象,通过上述实施例,将目标标识取值区间中尚未分配的标识取值分配给对象,可以解决了相关技术中标识资源的使用率较低的技术问题,提高了标识资源的使用率。
可选地,存储介质被设置为存储用于执行以下步骤的程序代码:判断当前节点上的当前标识取值区间中是否存在尚未分配的标识取值;若存在尚未分配的标识取值,则将当前标识取值区间确定为目标标识取值区间;若不存在尚未分配的标识取值,则获取新的标识取值区间,并将新的标识取值区间确定为目标标识取值区间,其中,新的标识取值区间中的标识取值均未被分配,且新的标识取值区间与目标标识取值区间的区间范围不重叠。
可选地,存储介质被设置为存储用于执行以下步骤的程序代码:获取当前标识取值区间中最后分配的标识取值和允许分配的最大标识取值;若最后分配的标识取值等于最大标识取值,则判断出当前标识取值区间中不存在尚未分配的标识取值;若最后分配的标识取值小于最大标识取值,则判断出当前标识取值区间中存在尚未分配的标识取值。
可选地,存储介质被设置为存储用于执行以下步骤的程序代码:从数据库中,获取与类型对应的新的标识取值区间,其中,新的标识取值区间的区间范围与数据库已经分配的标识取值区间的区间范围相连续、且不重叠。
可选地,存储介质被设置为存储用于执行以下步骤的程序代码:将用于标识目标标识取值区间的信息存储在当前节点的共享内存中,其中,信息包括:目标标识取值区间中最后分配的标识取值和允许分配的最大标识取值,最后分配的标识取值的初始值为允许分配的最小标识取值。
可选地,存储介质被设置为存储用于执行以下步骤的程序代码:获取尚未分配的标识取值中的极值;将极值作为待分配给对象的标识取值;在将极值作为待分配给对象的标识取值之后,将极值从尚未分配的标识取值中删除。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (15)
1.一种标识取值的分配方法,其特征在于,包括:
接收标识分配请求,其中,所述标识分配请求中携带有待分配标识取值的对象的类型;
确定与所述类型对应的目标标识取值区间,其中,所述目标标识取值区间中存在尚未分配的标识取值;
从所述尚未分配的标识取值中,选择一个目标标识取值作为待分配给所述对象的标识取值。
2.根据权利要求1所述的分配方法,其特征在于,确定与所述类型对应的目标标识取值区间包括:
判断当前节点上的当前标识取值区间中是否存在所述尚未分配的标识取值;
若存在所述尚未分配的标识取值,则将所述当前标识取值区间确定为所述目标标识取值区间;
若不存在所述尚未分配的标识取值,则获取新的标识取值区间,并将所述新的标识取值区间确定为所述目标标识取值区间,其中,所述新的标识取值区间中的标识取值均未被分配,且所述新的标识取值区间与所述目标标识取值区间的区间范围不重叠。
3.根据权利要求2所述的分配方法,其特征在于,判断当前节点上的当前标识取值区间中是否存在所述尚未分配的标识取值包括:
获取所述当前标识取值区间中最后分配的标识取值和允许分配的最大标识取值;
若所述最后分配的标识取值等于所述最大标识取值,则判断出所述当前标识取值区间中不存在尚未分配的标识取值;
若所述最后分配的标识取值小于所述最大标识取值,则判断出所述当前标识取值区间中存在尚未分配的标识取值。
4.根据权利要求2所述的分配方法,其特征在于,获取新的标识取值区间包括:
从数据库中,获取与所述类型对应的所述新的标识取值区间,其中,所述新的标识取值区间的区间范围与所述数据库已经分配的标识取值区间的区间范围相连续、且不重叠。
5.根据权利要求1所述的分配方法,其特征在于,在接收标识分配请求之前,包括:
将用于标识所述目标标识取值区间的信息存储在当前节点的共享内存中,其中,所述信息包括:所述目标标识取值区间中最后分配的标识取值和允许分配的最大标识取值,所述最后分配的标识取值的初始值为允许分配的最小标识取值。
6.根据权利要求1至5中任一项所述的分配方法,其特征在于,所述目标标识取值以十进制的方式表示。
7.根据权利要求1所述的分配方法,其特征在于,
从所述尚未分配的标识取值中,选择一个目标标识取值作为待分配给所述对象的标识取值包括:获取所述尚未分配的标识取值中的极值;将所述极值作为待分配给所述对象的标识取值;
在将所述极值作为待分配给所述对象的标识取值之后,所述方法还包括:
将所述极值从所述尚未分配的标识取值中删除。
8.根据权利要求1至5中任一项所述的分配方法,其特征在于,
接收标识分配请求包括:接收客户端发送的所述标识分配请求;
在从所述尚未分配的标识取值中,选择一个目标标识取值作为待分配给所述对象的标识取值之后,所述方法还包括:将所述目标标识取值发送至所述客户端。
9.根据权利要求1至5中任一项所述的分配方法,其特征在于,所述类型包括账号类型、多媒体类型和社交平台文件类型。
10.一种标识取值的分配装置,其特征在于,包括:
接收单元,用于接收标识分配请求,其中,所述标识分配请求中携带有待分配标识取值的对象的类型;
确定单元,用于确定与所述类型对应的目标标识取值区间,其中,所述目标标识取值区间中存在尚未分配的标识取值;
处理单元,用于从所述尚未分配的标识取值中,选择一个目标标识取值作为待分配给所述对象的标识取值。
11.根据权利要求10所述的分配装置,其特征在于,所述确定单元包括:
判断模块,用于判断当前节点上的当前标识取值区间中是否存在所述尚未分配的标识取值;
第一确定模块,用于若存在所述尚未分配的标识取值,则将所述当前标识取值区间确定为所述目标标识取值区间;
第二确定模块,用于若不存在所述尚未分配的标识取值,则获取新的标识取值区间,并将所述新的标识取值区间确定为所述目标标识取值区间,其中,所述新的标识取值区间中的标识取值均未被分配,且所述新的标识取值区间与所述目标标识取值区间的区间范围不重叠。
12.根据权利要求11所述的分配装置,其特征在于,所述判断模块包括:
获取子模块,用于获取所述当前标识取值区间中最后分配的标识取值和允许分配的最大标识取值;
第一判断子模块,用于若所述最后分配的标识取值等于所述最大标识取值,则判断出所述当前标识取值区间中不存在尚未分配的标识取值;
第二判断子模块,用于若所述最后分配的标识取值小于所述最大标识取值,则判断出所述当前标识取值区间中存在尚未分配的标识取值。
13.根据权利要求11所述的分配装置,其特征在于,第二确定模块还用于从数据库中,获取与所述类型对应的所述新的标识取值区间,其中,所述新的标识取值区间的区间范围与所述数据库已经分配的标识取值区间的区间范围相连续、且不重叠。
14.根据权利要求10所述的分配装置,其特征在于,所述装置还包括:
存储单元,用于在接收标识分配请求之前,将用于标识所述目标标识取值区间的信息存储在当前节点的共享内存中,其中,所述信息包括:所述目标标识取值区间中最后分配的标识取值和允许分配的最大标识取值,所述最后分配的标识取值的初始值为允许分配的最小标识取值。
15.根据权利要求10所述的分配装置,其特征在于,
所述处理单元包括:获取模块,用于获取所述尚未分配的标识取值中的极值;处理模块,用于将所述极值作为待分配给所述对象的标识取值;
所述处理模块还用于在将所述极值作为待分配给所述对象的标识取值之后,将所述极值从所述尚未分配的标识取值中删除。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610303538.9A CN105812248A (zh) | 2016-05-09 | 2016-05-09 | 标识取值的分配方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610303538.9A CN105812248A (zh) | 2016-05-09 | 2016-05-09 | 标识取值的分配方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105812248A true CN105812248A (zh) | 2016-07-27 |
Family
ID=56456494
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610303538.9A Pending CN105812248A (zh) | 2016-05-09 | 2016-05-09 | 标识取值的分配方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105812248A (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106341497A (zh) * | 2016-11-18 | 2017-01-18 | 腾讯科技(深圳)有限公司 | 数字id生成方法及装置 |
CN107038191A (zh) * | 2016-11-15 | 2017-08-11 | 阿里巴巴集团控股有限公司 | 一种数据库序列的数据处理方法、装置及服务器 |
CN107864233A (zh) * | 2017-11-08 | 2018-03-30 | 千寻位置网络有限公司 | 全局唯一id结构及生成方法 |
CN108614740A (zh) * | 2016-12-12 | 2018-10-02 | 上海美桔网络科技有限公司 | 基于进程间共享内存方式生成唯一id的方法及系统 |
CN109344162A (zh) * | 2018-09-14 | 2019-02-15 | 北京京东金融科技控股有限公司 | 业务数据处理方法和装置 |
CN109388502A (zh) * | 2018-09-10 | 2019-02-26 | 珠海天燕科技有限公司 | 一种业务标识分配方法及装置 |
CN110046192A (zh) * | 2019-04-22 | 2019-07-23 | 广州荔支网络技术有限公司 | 请求信息的序号生成系统和方法 |
CN110196860A (zh) * | 2018-04-12 | 2019-09-03 | 腾讯科技(深圳)有限公司 | 唯一标识分配方法及装置、电子设备、存储介质 |
CN110933196A (zh) * | 2019-11-26 | 2020-03-27 | 上海莉莉丝科技股份有限公司 | 用于全球同服架构的id分配方法、系统及存储介质 |
CN111385370A (zh) * | 2018-12-28 | 2020-07-07 | 广州市百果园信息技术有限公司 | Id分配方法、装置、存储介质及id分配系统 |
WO2020177336A1 (zh) * | 2019-03-07 | 2020-09-10 | 上海商汤智能科技有限公司 | 资源调度方法、设备、系统及中心服务器 |
CN111831639A (zh) * | 2019-04-19 | 2020-10-27 | 北京车和家信息技术有限公司 | 一种全局唯一id生成方法及装置、车辆管理系统 |
CN114124862A (zh) * | 2020-08-31 | 2022-03-01 | 上海云鱼智能科技有限公司 | 依据超短id获取用户信息的方法、装置、服务器、客户端、终端及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1798061A (zh) * | 2004-12-24 | 2006-07-05 | 华为技术有限公司 | 一种管理对象的标识分配方法 |
EP2480009A1 (en) * | 2009-10-20 | 2012-07-25 | ZTE Corporation | Multimedia message transmission method and apparatus thereof, and domain name server |
CN102694878A (zh) * | 2012-05-16 | 2012-09-26 | 烽火通信科技股份有限公司 | 一种分段式id分配方法 |
CN102811211A (zh) * | 2011-05-30 | 2012-12-05 | 索尼公司 | 支持登录验证的设备和进行登录验证的方法 |
CN103873389A (zh) * | 2012-12-12 | 2014-06-18 | 北京百度网讯科技有限公司 | 一种标识资源分配方法及系统 |
-
2016
- 2016-05-09 CN CN201610303538.9A patent/CN105812248A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1798061A (zh) * | 2004-12-24 | 2006-07-05 | 华为技术有限公司 | 一种管理对象的标识分配方法 |
EP2480009A1 (en) * | 2009-10-20 | 2012-07-25 | ZTE Corporation | Multimedia message transmission method and apparatus thereof, and domain name server |
CN102811211A (zh) * | 2011-05-30 | 2012-12-05 | 索尼公司 | 支持登录验证的设备和进行登录验证的方法 |
CN102694878A (zh) * | 2012-05-16 | 2012-09-26 | 烽火通信科技股份有限公司 | 一种分段式id分配方法 |
CN103873389A (zh) * | 2012-12-12 | 2014-06-18 | 北京百度网讯科技有限公司 | 一种标识资源分配方法及系统 |
Cited By (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107038191A (zh) * | 2016-11-15 | 2017-08-11 | 阿里巴巴集团控股有限公司 | 一种数据库序列的数据处理方法、装置及服务器 |
CN106341497A (zh) * | 2016-11-18 | 2017-01-18 | 腾讯科技(深圳)有限公司 | 数字id生成方法及装置 |
CN106341497B (zh) * | 2016-11-18 | 2019-08-30 | 腾讯科技(深圳)有限公司 | 数字id生成方法及装置 |
CN108614740A (zh) * | 2016-12-12 | 2018-10-02 | 上海美桔网络科技有限公司 | 基于进程间共享内存方式生成唯一id的方法及系统 |
CN107864233A (zh) * | 2017-11-08 | 2018-03-30 | 千寻位置网络有限公司 | 全局唯一id结构及生成方法 |
CN110196860B (zh) * | 2018-04-12 | 2024-03-05 | 腾讯科技(深圳)有限公司 | 唯一标识分配方法及装置、电子设备、存储介质 |
CN110196860A (zh) * | 2018-04-12 | 2019-09-03 | 腾讯科技(深圳)有限公司 | 唯一标识分配方法及装置、电子设备、存储介质 |
CN109388502A (zh) * | 2018-09-10 | 2019-02-26 | 珠海天燕科技有限公司 | 一种业务标识分配方法及装置 |
CN109344162A (zh) * | 2018-09-14 | 2019-02-15 | 北京京东金融科技控股有限公司 | 业务数据处理方法和装置 |
CN111385370A (zh) * | 2018-12-28 | 2020-07-07 | 广州市百果园信息技术有限公司 | Id分配方法、装置、存储介质及id分配系统 |
CN111385370B (zh) * | 2018-12-28 | 2022-07-08 | 广州市百果园信息技术有限公司 | Id分配方法、装置、存储介质及id分配系统 |
WO2020177336A1 (zh) * | 2019-03-07 | 2020-09-10 | 上海商汤智能科技有限公司 | 资源调度方法、设备、系统及中心服务器 |
CN111666147A (zh) * | 2019-03-07 | 2020-09-15 | 上海商汤智能科技有限公司 | 资源调度方法、设备、系统及中心服务器 |
TWI747092B (zh) * | 2019-03-07 | 2021-11-21 | 大陸商上海商湯智能科技有限公司 | 資源調度方法、設備、系統及中心伺服器 |
CN111666147B (zh) * | 2019-03-07 | 2022-06-07 | 上海商汤智能科技有限公司 | 资源调度方法、设备、系统及中心服务器 |
CN111831639A (zh) * | 2019-04-19 | 2020-10-27 | 北京车和家信息技术有限公司 | 一种全局唯一id生成方法及装置、车辆管理系统 |
CN111831639B (zh) * | 2019-04-19 | 2024-01-30 | 北京车和家信息技术有限公司 | 一种全局唯一id生成方法及装置、车辆管理系统 |
CN110046192A (zh) * | 2019-04-22 | 2019-07-23 | 广州荔支网络技术有限公司 | 请求信息的序号生成系统和方法 |
CN110933196A (zh) * | 2019-11-26 | 2020-03-27 | 上海莉莉丝科技股份有限公司 | 用于全球同服架构的id分配方法、系统及存储介质 |
CN110933196B (zh) * | 2019-11-26 | 2022-12-06 | 上海莉莉丝科技股份有限公司 | 用于全球同服架构的id分配方法、系统及存储介质 |
CN114124862A (zh) * | 2020-08-31 | 2022-03-01 | 上海云鱼智能科技有限公司 | 依据超短id获取用户信息的方法、装置、服务器、客户端、终端及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105812248A (zh) | 标识取值的分配方法和装置 | |
CN110896355B (zh) | 一种网络切片的选择方法及装置 | |
CN109560952B (zh) | 一种网络切片管理方法及设备 | |
CN109829308A (zh) | 控制策略的管理方法及装置、存储介质、电子装置 | |
CN110326345B (zh) | 一种配置网络切片的方法、装置和系统 | |
CN103069755B (zh) | 使用多个客户端实例的即时消息传送的方法和系统 | |
CN103797463A (zh) | 用于在云环境中指派虚拟资源的方法和设备 | |
CN114244717B (zh) | 虚拟网卡资源的配置方法、装置、计算机设备及介质 | |
CN104133776B (zh) | 存储阵列自动化配置方法、装置及存储系统 | |
CN105763385A (zh) | 流量调度方法及装置 | |
CN108898368B (zh) | 资源的转移方法和装置、存储介质、电子装置 | |
CN107333095A (zh) | 媒体资源的处理系统 | |
CN201332404Y (zh) | 一种网卡设备升级的系统及设备 | |
CN112312061B (zh) | 一种视频会议方法、装置、电子设备及存储介质 | |
CN107181695A (zh) | 分布式缓存方法及装置 | |
CN105827694A (zh) | 网络资源的获取方法和装置 | |
CN108022126A (zh) | 抽奖资格的确定方法、装置、服务器及存储介质 | |
CN104426794B (zh) | 一种报文转发方法及装置 | |
CN101159611A (zh) | 一种批量系统部署方法和部署装置 | |
CN105071965B (zh) | 一种网络设备的管理系统 | |
CN106034040B (zh) | 扫描节点的控制方法、装置及系统 | |
CN101159587A (zh) | 一种远程开局的方法和系统 | |
CN106534204A (zh) | 客户端与服务器的连接方法、系统及服务器 | |
CN111130820A (zh) | 集群管理方法、装置及计算机系统 | |
CN111510382B (zh) | 一种适于EXata仿真器的实时动态分簇方法和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160727 |
|
RJ01 | Rejection of invention patent application after publication |