CN114997108A - 订单号的生成方法、装置、设备及存储介质 - Google Patents
订单号的生成方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN114997108A CN114997108A CN202210577378.2A CN202210577378A CN114997108A CN 114997108 A CN114997108 A CN 114997108A CN 202210577378 A CN202210577378 A CN 202210577378A CN 114997108 A CN114997108 A CN 114997108A
- Authority
- CN
- China
- Prior art keywords
- original
- sequences
- order number
- generating
- combination
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/126—Character encoding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q30/00—Commerce
- G06Q30/06—Buying, selling or leasing transactions
- G06Q30/0601—Electronic shopping [e-shopping]
- G06Q30/0633—Lists, e.g. purchase orders, compilation or processing
- G06Q30/0635—Processing of requisition or of purchase orders
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Accounting & Taxation (AREA)
- Databases & Information Systems (AREA)
- Computational Linguistics (AREA)
- Finance (AREA)
- Development Economics (AREA)
- Economics (AREA)
- General Business, Economics & Management (AREA)
- Marketing (AREA)
- Data Mining & Analysis (AREA)
- Strategic Management (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- General Health & Medical Sciences (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及大数据领域,公开了一种订单号的生成方法、装置、设备及存储介质。所述方法包括:接收终端发送的订单号生成请求,其中,所述订单号生成请求中包括业务渠道信息和请求时刻信息;根据所述业务渠道信息,查询对应业务渠道包含的业务数量,并获取与所述业务数量对应的原始组合序列;计算所述请求时刻信息对应的请求时刻与预设的固定时刻之间的差值,并基于所述差值生成所述请求时刻信息对应的时间戳;基于预设的优化雪花算法,对所述原始组合序列和所述时间戳进行计算,得到多个全局唯一的订单号。本发明通过优化的雪花算法,减少订单号生成过程对机器时间的依赖,从而降低生成重复订单号的风险。
Description
技术领域
本发明涉及大数据,尤其涉及一种订单号的生成方法、装置、设备及存储介质。
背景技术
随着互联网的发展,网络平台可以为用户提供各类交易。作为网络平台,为方便管理需要为每次交易生成一个订单号。现有的分布式系统,一般根据雪花算法(snowflake)生成订单号。
现有订单号的生成方法,由于雪花算法强依赖机器时间,存在生成重复订单号的风险,即当机器时间回拨时,导致生成重复的订单号。
发明内容
本发明的主要目的在于解决现有订单号的生成方法依赖机器时间从而易生成重复的订单号的问题。
本发明第一方面提供了一种订单号的生成方法,包括:
接收终端发送的订单号生成请求,其中,所述订单号生成请求中包括业务渠道信息和请求时刻信息;
根据所述业务渠道信息,查询对应业务渠道包含的业务数量,并获取与所述业务数量对应的原始组合序列;
计算所述请求时刻信息对应的请求时刻与预设的固定时刻之间的差值,并基于所述差值生成所述请求时刻信息对应的时间戳;
基于预设的优化雪花算法,对所述原始组合序列和所述时间戳进行计算,得到多个全局唯一的订单号。
可选的,在本发明第一方面的第一种实现方式中,所述方法还包括:
若所述时间戳所能生成的订单号耗尽,则等待预设时长以更新所述时间戳;
基于预设的优化雪花算法,对更新后的时间戳和所述原始组合序列进行计算,得到多个新的订单号。
可选的,在本发明第一方面的第二种实现方式中,所述根据所述业务渠道信息,查询对应业务渠道包含的业务数量,并获取与所述业务数量对应的原始组合序列包括:
根据所述业务渠道信息,查询对应业务渠道包含的业务数量,并从多个预设的数据队列中随机选择一个数据队列作为目标队列,以及将所述目标队列中原始组合序列的数量与所述业务数量进行比较;
若所述目标队列中原始组合序列的数量不小于所述业务数量,则根据所述业务数量,从所述目标队列中获取多个原始组合序列;
若所述目标队列中原始组合序列的数量小于所述业务数量,则根据所述业务数量,从预设的数据池中获取多个拓展组合序列作为用于生成订单号的原始组合序列。
可选的,在本发明第一方面的第三种实现方式中,所述若所述目标队列中原始组合序列的数量小于所述业务数量,则根据所述业务数量,从预设的数据池中获取多个拓展组合序列作为用于生成订单号的原始组合序列包括:
若所述目标队列中原始组合序列的数量小于所述业务数量,则从所述数据池中随机获取一个原始组合序列作为元组合序列;
对所述元组合序列中每个原始序列进行数据拓展,得到多个拓展组合序列,并存储于所述数据池中;
从所述数据池中获取与所述业务数量对应的拓展组合序列作为用于生成订单号的原始组合序列。
可选的,在本发明第一方面的第四种实现方式中,在所述从所述数据池中获取与所述业务数量对应的拓展组合序列作为用于生成订单号的原始组合序列之后,还包括:
将从所述数据池中获取到的所述多个拓展组合序列从所述数据池中删除;
若所述业务数量小于所述拓展组合序列的数量,则将所述数据池中剩余的拓展组合序列向所述数据队列进行推送。
可选的,在本发明第一方面的第五种实现方式中,所述若所述业务数量小于所述拓展组合序列的数量,则将所述数据池中剩余的拓展组合序列向所述预设的数据队列进行推送包括:
若所述业务数量小于所述拓展组合序列的数量,则检查每个所述数据队列中原始组合序列的数量,并确定待更新队列,其中,所述待更新队列中所述原始组合序列的数量小于预设阈值;
调用所述数据池,将所述数据池中剩余的拓展组合序列添加至所述待更新队列中。
可选的,在本发明第一方面的第六种实现方式中,所述方法还包括:
基于预设的业务需求,建立所述原始组合序列与服务器集群节点之间的存储映射关系,并根据所述存储映射关系,对生成的订单号进行分布式存储。
本发明第二方面提供了一种订单号的生成装置,包括:
请求接收模块,用于接收终端发送的订单号生成请求,其中,所述订单号生成请求中包括业务渠道信息和请求时刻信息;
组合序列获取模块,用于根据所述业务渠道信息,查询对应业务渠道包含的业务数量,并获取与所述业务数量对应的原始组合序列;
时间戳生成模块,用于计算所述请求时刻信息对应的请求时刻与预设的固定时刻之间的差值,并基于所述差值生成所述请求时刻信息对应的时间戳;
订单号生成模块,用于基于预设的优化雪花算法,对所述原始组合序列和所述时间戳进行计算,得到多个全局唯一的订单号。
可选的,在本发明第二方面的第一种实现方式中,所述组合序列获取模块具体包括:
比较单元,用于根据所述业务渠道信息,查询对应业务渠道包含的业务数量,并从多个预设的数据队列中随机选择一个数据队列作为目标队列,以及将所述目标队列中原始组合序列的数量与所述业务数量进行比较;
第一获取单元,用于若所述目标队列中原始组合序列的数量不小于所述业务数量,则根据所述业务数量,从所述目标队列中获取多个原始组合序列;
第二获取单元,用于若所述目标队列中原始组合序列的数量小于所述业务数量,则根据所述业务数量,从预设的数据池中获取多个拓展组合序列作为用于生成订单号的原始组合序列。
可选的,在本发明第二方面的第二种实现方式中,所述第二获取单元具体用于:
若所述目标队列中原始组合序列的数量小于所述业务数量,则从所述数据池中随机获取一个原始组合序列作为元组合序列;
对所述元组合序列中每个原始序列进行数据拓展,得到多个拓展组合序列,并存储于所述数据池中;
从所述数据池中获取与所述业务数量对应的拓展组合序列作为用于生成订单号的原始组合序列。
可选的,在本发明第二方面的第三种实现方式中,所述第二获取单元具体用于:
若所述目标队列中原始组合序列的数量小于所述业务数量,则从所述数据池中随机获取一个原始组合序列作为元组合序列;
对所述元组合序列中每个原始序列进行数据拓展,得到多个拓展组合序列,并存储于所述数据池中;
从所述数据池中获取与所述业务数量对应的拓展组合序列作为用于生成订单号的原始组合序列;
将从所述数据池中获取到的所述多个拓展组合序列从所述数据池中删除;
若所述业务数量小于所述拓展组合序列的数量,则将所述数据池中剩余的拓展组合序列向所述数据队列进行推送。
可选的,在本发明第二方面的第四种实现方式中,所述第二获取单元具体用于:
若所述目标队列中原始组合序列的数量小于所述业务数量,则从所述数据池中随机获取一个原始组合序列作为元组合序列;
对所述元组合序列中每个原始序列进行数据拓展,得到多个拓展组合序列,并存储于所述数据池中;
从所述数据池中获取与所述业务数量对应的拓展组合序列作为用于生成订单号的原始组合序列;
将从所述数据池中获取到的所述多个拓展组合序列从所述数据池中删除;
若所述业务数量小于所述拓展组合序列的数量,则检查每个所述数据队列中原始组合序列的数量,并确定待更新队列,其中,所述待更新队列中所述原始组合序列的数量小于预设阈值;
调用所述数据池,将所述数据池中剩余的拓展组合序列添加至所述待更新队列中。
本发明第三方面提供了一种订单号的生成设备,包括:存储器和至少一个处理器,所述存储器中存储有指令;所述至少一个处理器调用所述存储器中的所述指令,以使得所述订单号的生成设备执行上述的订单号的生成方法。
本发明的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述的订单号的生成方法。
本发明提供的技术方案中,通过接受终端的订单号生成请求,并根据请求中携带业务渠道信息查询对应渠道所包含的业务数量,从而确定待生成订单号的数量;进一步的,根据该业务数量获取对应数量的服务器随机生成的原始组合序列,然后根据请求中携带请求时刻信息计算出相应的时间戳,最后调用优化的雪花算法,对时间戳和原始组合序列进行处理,从而生成多个全局唯一的订单号。本发明通过优化的雪花算法,减少订单号生成过程对机器时间的依赖,从而降低生成重复订单号的风险。
附图说明
图1为本发明实施例中订单号的生成方法的第一个实施例示意图;
图2为本发明实施例中订单号的生成方法的第二个实施例示意图;
图3为本发明实施例中订单号的生成方法的第三个实施例示意图;
图4为本发明实施例中订单号的生成方法的第四个实施例示意图;
图5为本发明实施例中订单号的生成装置的一个实施例示意图;
图6为本发明实施例中订单号的生成装置的另一个实施例示意图;
图7为本发明实施例中订单号的生成设备的一个实施例示意图。
图8为本发明实施例中改进的雪花算法的结构示意图。
具体实施方式
本发明实施例提供了一种订单号的生成方法、装置、设备及存储介质,减少订单号生成过程对机器时间的依赖,从而降低生成重复订单号的风险。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”或“具有”及其任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本发明中的服务器可以是独立的服务器,也可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content Delivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。
为便于理解,下面对本发明实施例的具体流程进行描述,请参阅图1,本发明实施例中订单号的生成方法的一个实施例包括:
101、接收终端发送的订单号生成请求,其中,订单号生成请求中包括业务渠道信息和请求时刻信息;
可以理解的是,该订单号生成请求可以为基于超文本传输协议(HTTP)的请求、TCP请求或基于其他传输协议的请求,本实施例对其不做限定。业务渠道用于区分不同的业务来源,例如某产品收到1万个订单,其中有3000个订单来源于A社交平台的推广链接,有2000来自B网购平台,其余来自C直播平台。该业务渠道信息可采用数字、字母等字符和字符串进行表示。请求时刻信息即终端向服务器发送订单号生成请求时的时刻,该请求时刻采用ISO8601标准时间格式,例如2021-08-24 10:00:00,精确到年月日和时分秒。
102、根据业务渠道信息,查询对应业务渠道包含的业务数量,并获取与业务数量对应的原始组合序列;
可以理解的是,每个业务渠道中均包括多种业务,鉴于业务之间的差异,不同类型的业务被投放至对应的业务渠道中,例如A产品和B产品的受众多为18-25岁人群,两者被投放于甲平台,其中,甲平台的活跃用户多为18-25岁。进而服务器根据该业务渠道中包含的业务数量以获取用于表示每种业务的原始组合序列,原始组合序列(id1,id2)由服务器随机生成,且id1和id2的取值范围均为0-999。
103、计算请求时刻信息对应的请求时刻与预设的固定时刻之间的差值,并基于差值生成请求时刻信息对应的时间戳;
可以理解的是,该时间截(timestamp)是指当前时刻与预设的固定时刻的差值,本实施例中该差值采用的单位为秒。首先服务器将预设的固定时刻由ISO计时形式以秒为单位进行格式化,例如固定时间为2019-01-01 00:00:00,格式化为1546272000;然后对请求时刻进行格式化,例如请求时刻为2021-08-24 10:00:00,格式化为1629770400,计算两者的差值为83498400。
104、基于预设的优化雪花算法,对原始组合序列和时间戳进行计算,得到多个全局唯一的订单号。
可以理解的是,本实施例中服务器基于改进的雪花算法以生成订单号,改进的雪花算法结构具体请参考图8。其中,订单号由1位符号位、31位的时间戳、14位的原始组合序列以及18位的序列号组成,预设的符号位(sign)为1比特,值为0,表示该订单号为正数;时间戳(timestamp)以秒作为计时单位,该时间戳是用于存储请求时刻与预设固定时刻的差值,从而对订单号生成的时间进行标识,对于不足31位的时间戳,在头部以“0”进行补位,例如原时间戳位为83498400,补位后为0000000 00000000 00000000 83498400;本实施例中对于不足14位的原始序列组合(即图8中的workid),同样采用在头部以“0”进行补位,保证其为14位以满足超大规模的订单系统的需求,支持业务渠道下更多的业务表示,例如A渠道下有1025个业务,每个业务用一个原始组合序列表示,而原雪花算法中10比特的节点标识位仅能最大支持1024个原始组合序列;本实施例将原雪花算法中的12比特的自增序列号(sequence)调整位18比特,从而将单位时间内产生的最大序列由4096增加到262143个。具体的,服务器依次将符号位、时间戳、原始组合序列以及自增序列号进行拼接,从而生成对应的订单号。正常情况下,自增序列号每秒生成3万个序列左右,当发生时钟回拨时,服务器可通过该自增序列号每秒生成262143个序列(即单位时间内产生更多的序列),来追平回拨的时间误差,从而避免生成相同的订单号。
本实施例中,通过优化的雪花算法,减少订单号生成过程对机器时间的依赖,从而降低生成重复订单号的风险。
参阅图2,本发明实施例中订单号的生成方法的第二个实施例包括:
201、接收终端发送的订单号生成请求,其中,订单号生成请求中包括业务渠道信息和请求时刻信息;
202、根据业务渠道信息,查询对应业务渠道包含的业务数量,并获取与业务数量对应的原始组合序列;
203、计算请求时刻信息对应的请求时刻与预设的固定时刻之间的差值,并基于差值生成请求时刻信息对应的时间戳;
204、基于预设的优化雪花算法,对原始组合序列和时间戳进行计算,得到多个全局唯一的订单号;
其中,步骤201-204与上述步骤101-104的执行步骤类似,具体此处不再赘述。
205、若时间戳所能生成的订单号耗尽,则等待预设时长以更新时间戳,并基于预设的优化雪花算法,对更新后的时间戳和原始组合序列进行计算,得到多个新的订单号。
可以理解的是,由于每个节点序列位每秒只能产生262143个节点序列,以请求时刻来生成的订单号有可能发生耗尽情况。比如,在用请求时刻N作为时间戳进行生成订单号时,系统根据请求中的业务渠道信息确定对应的业务数量为270000,即需要生成270000个不重复的订单号,那么这270000个订单号生成需求会瞬间消耗完请求时刻N所能生成的262143个订单号。在服务器时钟处于回拔状态下,当前时间戳所能生成的订单号耗尽时,系统等待预设时长后使当前时间戳增加特定时长所对应的数值,从而形成新的时间戳来继续生成订单号。可选的,该预设时长可根据业务场景对订单号消耗的速率进行调节。优选地,将预设时长设置为单个服务器时钟,即1秒,如此可实现资源最大化利用。
本实施例中,详细描述了时间戳生成订单号耗尽的情况下,如何生成满足业务数量的订单号的过程。通过对时间戳进行更新,从而继续支持订单号生成。
参阅图3,本发明实施例中订单号的生成方法的第三个实施例包括:
301、接收终端发送的订单号生成请求,其中,订单号生成请求中包括业务渠道信息和请求时刻信息;
其中,步骤306与上述步骤104的执行步骤类似,具体此处不再赘述。
302、根据业务渠道信息,查询对应业务渠道包含的业务数量,并从多个预设的数据队列中随机选择一个数据队列作为目标队列,以及将目标队列中原始组合序列的数量与业务数量进行比较;
可以理解的是,分布式服务器中设有多个预设的数据队列,所述目标队列可以为先进先出队列,亦可以是其他类型的队列,本实施例对其不做限定。分布式服务器随机生成大量的原始组合序列,然后将并将其打乱后存入数据库中,从而生成该数据池。具体的,若业务渠道A对应的业务数量为100,该分布式服务器会随机挑选一个队列,如队列Y,并查询队列Y中当前是否存有100个以的原始组合序列。
303、若目标队列中原始组合序列的数量不小于业务数量,则根据业务数量,从目标队列中获取多个原始组合序列;
可以理解的是,如果队列Y存有100个以上的原始组合序列,则从队列Y取出100个原始组合序列;如果队列Y中存有100个以下的原始组合序列,则从数据池中获取100个原始组合序列。
304、若目标队列中原始组合序列的数量小于业务数量,则根据业务数量,从预设的数据池中获取多个拓展组合序列作为用于生成订单号的原始组合序列;
应当理解的是,当收到订单号生成请求时,分布式服务器不会遍历每个队列的原始组合序列的数量,以选择满足要求的数据队列,而是从多个数据队列中随机挑选一个队列(如队列Y)。在队列Y不满足条件的情况下,亦不会再寻找其他队列是否满足,而是直接通过数据池中获取原始组合序列,从而降低时间复杂度和节省计算机资源。
305、计算请求时刻信息对应的请求时刻与预设的固定时刻之间的差值,并基于差值生成请求时刻信息对应的时间戳;
306、基于预设的优化雪花算法,对原始组合序列和时间戳进行计算,得到多个全局唯一的订单号。
其中,步骤305-306与上述步骤103-104的执行步骤类似,具体此处不再赘述。
本实施例中,详细描述原始组合序列获取的过程,通过存储原始组合序列的数据队列和数据池结构,对数据资源以低空间占比的方式进行存储和高效率地数据获取。
参阅图4,本发明实施例中订单号的生成方法的第四个实施例包括:
401、接收终端发送的订单号生成请求,其中,订单号生成请求中包括业务渠道信息和请求时刻信息;
402、根据业务渠道信息,查询对应业务渠道包含的业务数量,并从多个预设的数据队列中随机选择一个数据队列作为目标队列,以及将目标队列中原始组合序列的数量与业务数量进行比较;
403、若目标队列中原始组合序列的数量不小于业务数量,则根据业务数量,从目标队列中获取多个原始组合序列;
其中,步骤401-403与上述步骤301-303的执行步骤类似,具体此处不再赘述。
404、若目标队列中原始组合序列的数量小于业务数量,则从数据池中随机获取一个原始组合序列作为元组合序列;
可以理解的是,例如服务器从该数据池中随机取出一个原始组合序列,例如(184,491)作为元组合序列,以该元组合序列为基础样本进行数据拓展,从而生成更多拓展数据。
405、对元组合序列中每个原始序列进行数据拓展,得到多个拓展组合序列,并存储于数据池中;
可以理解的是,数据拓展即在原数据的基础上进行变换,例如在数据的头部或尾部直接添加数据位,如在元组合序列(184,491)中每段的头部加上0到99,即拓展数据的长度为100,将(184,491)扩展为(xx184,xx491),从而可以通过(184,491)这一个原始组合序列扩展出1万个不重复拓展组合序列(xx184,xx491)。该拓展组合序列(xx184,xx491)中的每段数据由3位扩展为5位,不足5位的在头部补0。
406、从数据池中获取与业务数量对应的拓展组合序列作为用于生成订单号的原始组合序列;
可以理解的是,服务器从这1万个拓展组合序列中获取对应业务数量的拓展组合序列作为原始组合序列,以用于生成订单号。在本实施例中,可以从数据池中取出较少的原始组合序列,并以该较少的原始组合序列为基础,产生大量的用于订单号生成的组合序列,从而减少数据池中的原始组合序列的消耗,从而可以以较小的数据池得出海量的组合序列,保障数据存储和维护效率。
可选的,服务器在获取到拓展组合序列后,还将从数据池中获取到的所述多个拓展组合序列从数据池中删除,当业务数量小于拓展组合序列的数量,则将数据池中剩余的拓展组合序列向数据队列进行推送。
可以理解的是,业务数量用于表示生成请求订单号所需要的原始组合序列,在满足订单号生成请求的前提下,为减少数据资源的浪费,服务器将剩余的原始组合序列用于补充队列。具体的,服务器基于后台常驻检测进程以预设频率对每个数据队列中的原始组合序列进行数量检测,如果检测到某个队列的原始组合序列的剩余数量低于预设阈值,则确定该队列为待更新队列,并将数据池中剩余的拓展组合序列添加至待更新队列中。在本实施例中,服务器将生成的拓展组合序列补充到各个队列中,使得各个队列直接有效地提供用于生成订单号的原始组合序列,从而提高订单的生成效率。
407、计算请求时刻信息对应的请求时刻与预设的固定时刻之间的差值,并基于差值生成请求时刻信息对应的时间戳;
408、基于预设的优化雪花算法,对原始组合序列和时间戳进行计算,得到多个全局唯一的订单号。
其中,步骤305-306与上述步骤103-104的执行步骤类似,具体此处不再赘述。
本实施例中,详细描述了从数据池中获取原始组合序列的过程,通过少量数据进行数据拓展从而生成大量拓展组合序列,进而将其作为用于生成订单号的原始组合序列,以提高数据存储和维护的效率。
上面对本发明实施例中订单号的生成方法进行了描述,下面对本发明实施例中订单号的生成装置进行描述,请参阅图5,本发明实施例中订单号的生成装置的一个实施例包括:
请求接收模块501,用于接收终端发送的订单号生成请求,其中,所述订单号生成请求中包括业务渠道信息和请求时刻信息;
组合序列获取模块502,用于根据所述业务渠道信息,查询对应业务渠道包含的业务数量,并获取与所述业务数量对应的原始组合序列;
时间戳生成模块503,用于计算所述请求时刻信息对应的请求时刻与预设的固定时刻之间的差值,并基于所述差值生成所述请求时刻信息对应的时间戳;
订单号生成模块504,用于基于预设的优化雪花算法,对所述原始组合序列和所述时间戳进行计算,得到多个全局唯一的订单号。
本实施例中,通过优化的雪花算法,减少订单号生成过程对机器时间的依赖,从而降低生成重复订单号的风险。
参阅图6,本发明实施例中订单号的生成装置的另一个实施例包括:
请求接收模块501,用于接收终端发送的订单号生成请求,其中,所述订单号生成请求中包括业务渠道信息和请求时刻信息;
组合序列获取模块502,用于根据所述业务渠道信息,查询对应业务渠道包含的业务数量,并获取与所述业务数量对应的原始组合序列;
时间戳生成模块503,用于计算所述请求时刻信息对应的请求时刻与预设的固定时刻之间的差值,并基于所述差值生成所述请求时刻信息对应的时间戳;
订单号生成模块504,用于基于预设的优化雪花算法,对所述原始组合序列和所述时间戳进行计算,得到多个全局唯一的订单号。
其中,所述组合序列获取模块502具体包括:
比较单元5021,用于根据所述业务渠道信息,查询对应业务渠道包含的业务数量,并从多个预设的数据队列中随机选择一个数据队列作为目标队列,以及将所述目标队列中原始组合序列的数量与所述业务数量进行比较;
第一获取单元5022,用于若所述目标队列中原始组合序列的数量不小于所述业务数量,则根据所述业务数量,从所述目标队列中获取多个原始组合序列;
第二获取单元5023,用于若所述目标队列中原始组合序列的数量小于所述业务数量,则根据所述业务数量,从预设的数据池中获取多个拓展组合序列作为用于生成订单号的原始组合序列。
本发明实施例中,模块化的设计让订单号的生成装置各部位的硬件专注于某一功能的实现,最大化实现了硬件的性能,同时模块化的设计也降低了装置的模块之间的耦合性,更加方便维护。
上面图5和图6从模块化功能实体的角度对本发明实施例中的订单号的生成装置进行详细描述,下面从硬件处理的角度对本发明实施例中订单号的生成设备进行详细描述。
图7是本发明实施例提供的一种订单号的生成设备的结构示意图,该订单号的生成设备700可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(central processing units,CPU)710(例如,一个或一个以上处理器)和存储器720,一个或一个以上存储应用程序733或数据732的存储介质730(例如一个或一个以上海量存储设备)。其中,存储器720和存储介质730可以是短暂存储或持久存储。存储在存储介质730的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对订单号的生成设备700中的一系列指令操作。更进一步地,处理器710可以设置为与存储介质730通信,在订单号的生成设备700上执行存储介质730中的一系列指令操作。
订单号的生成设备700还可以包括一个或一个以上电源740,一个或一个以上有线或无线网络接口750,一个或一个以上输入输出接口760,和/或,一个或一个以上操作系统731,例如Windows Serve,Mac OS X,Unix,Linux,FreeBSD等等。本领域技术人员可以理解,图7示出的订单号的生成设备结构并不构成对订单号的生成设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
本发明还提供一种订单号的生成设备,所述订单号的生成设备包括存储器和处理器,存储器中存储有计算机可读指令,计算机可读指令被处理器执行时,使得处理器执行上述各实施例中的所述订单号的生成方法的步骤。本发明还提供一种计算机可读存储介质,该计算机可读存储介质可以为非易失性计算机可读存储介质,该计算机可读存储介质也可以为易失性计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在计算机上运行时,使得计算机执行所述订单号的生成方法的步骤。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种订单号的生成方法,其特征在于,所述订单号的生成方法包括:
接收终端发送的订单号生成请求,其中,所述订单号生成请求中包括业务渠道信息和请求时刻信息;
根据所述业务渠道信息,查询对应业务渠道包含的业务数量,并获取与所述业务数量对应的原始组合序列;
计算所述请求时刻信息对应的请求时刻与预设的固定时刻之间的差值,并基于所述差值生成所述请求时刻信息对应的时间戳;
基于预设的优化雪花算法,对所述原始组合序列和所述时间戳进行计算,得到多个全局唯一的订单号。
2.根据权利要求1所述的订单号的生成方法,其特征在于,所述方法还包括:
若所述时间戳所能生成的订单号耗尽,则等待预设时长以更新所述时间戳;
基于预设的优化雪花算法,对更新后的时间戳和所述原始组合序列进行计算,得到多个新的订单号。
3.根据权利要求1所述的订单号的生成方法,其特征在于,所述根据所述业务渠道信息,查询对应业务渠道包含的业务数量,并获取与所述业务数量对应的原始组合序列包括:
根据所述业务渠道信息,查询对应业务渠道包含的业务数量,并从多个预设的数据队列中随机选择一个数据队列作为目标队列,以及将所述目标队列中原始组合序列的数量与所述业务数量进行比较;
若所述目标队列中原始组合序列的数量不小于所述业务数量,则根据所述业务数量,从所述目标队列中获取多个原始组合序列;
若所述目标队列中原始组合序列的数量小于所述业务数量,则根据所述业务数量,从预设的数据池中获取多个拓展组合序列作为用于生成订单号的原始组合序列。
4.根据权利要求3所述的订单号的生成方法,其特征在于,所述若所述目标队列中原始组合序列的数量小于所述业务数量,则根据所述业务数量,从预设的数据池中获取多个拓展组合序列作为用于生成订单号的原始组合序列包括:
若所述目标队列中原始组合序列的数量小于所述业务数量,则从所述数据池中随机获取一个原始组合序列作为元组合序列;
对所述元组合序列中每个原始序列进行数据拓展,得到多个拓展组合序列,并存储于所述数据池中;
从所述数据池中获取与所述业务数量对应的拓展组合序列作为用于生成订单号的原始组合序列。
5.根据权利要求4所述的订单号的生成方法,其特征在于,在所述从所述数据池中获取与所述业务数量对应的拓展组合序列作为用于生成订单号的原始组合序列之后,还包括:
将从所述数据池中获取到的所述多个拓展组合序列从所述数据池中删除;
若所述业务数量小于所述拓展组合序列的数量,则将所述数据池中剩余的拓展组合序列向所述数据队列进行推送。
6.根据权利要求5所述的订单号的生成方法,其特征在于,所述若所述业务数量小于所述拓展组合序列的数量,则将所述数据池中剩余的拓展组合序列向所述预设的数据队列进行推送包括:
若所述业务数量小于所述拓展组合序列的数量,则检查每个所述数据队列中原始组合序列的数量,并确定待更新队列,其中,所述待更新队列中所述原始组合序列的数量小于预设阈值;
调用所述数据池,将所述数据池中剩余的拓展组合序列添加至所述待更新队列中。
7.根据权利要求1-6中任意一项所述的订单号的生成方法,其特征在于,所述方法还包括:
基于预设的业务需求,建立所述原始组合序列与服务器集群节点之间的存储映射关系,并根据所述存储映射关系,对生成的订单号进行分布式存储。
8.一种订单号的生成装置,其特征在于,所述订单号的生成装置包括:
请求接收模块,用于接收终端发送的订单号生成请求,其中,所述订单号生成请求中包括业务渠道信息和请求时刻信息;
组合序列获取模块,用于根据所述业务渠道信息,查询对应业务渠道包含的业务数量,并获取与所述业务数量对应的原始组合序列;
时间戳生成模块,用于计算所述请求时刻信息对应的请求时刻与预设的固定时刻之间的差值,并基于所述差值生成所述请求时刻信息对应的时间戳;
订单号生成模块,用于基于预设的优化雪花算法,对所述原始组合序列和所述时间戳进行计算,得到多个全局唯一的订单号。
9.一种订单号的生成设备,其特征在于,所述订单号的生成设备包括:存储器和至少一个处理器,所述存储器中存储有指令;
所述至少一个处理器调用所述存储器中的所述指令,以使得所述订单号的生成设备执行如权利要求1-7中任意一项所述的订单号的生成方法。
10.一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,其特征在于,所述指令被处理器执行时实现如权利要求1-7中任一项所述的订单号的生成方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210577378.2A CN114997108A (zh) | 2022-05-25 | 2022-05-25 | 订单号的生成方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210577378.2A CN114997108A (zh) | 2022-05-25 | 2022-05-25 | 订单号的生成方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114997108A true CN114997108A (zh) | 2022-09-02 |
Family
ID=83028777
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210577378.2A Pending CN114997108A (zh) | 2022-05-25 | 2022-05-25 | 订单号的生成方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114997108A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115510815A (zh) * | 2022-11-17 | 2022-12-23 | 山东未来网络研究院(紫金山实验室工业互联网创新应用基地) | 一种基于规则的标识生成方法及装置 |
-
2022
- 2022-05-25 CN CN202210577378.2A patent/CN114997108A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115510815A (zh) * | 2022-11-17 | 2022-12-23 | 山东未来网络研究院(紫金山实验室工业互联网创新应用基地) | 一种基于规则的标识生成方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109756417B (zh) | 离线消息分发方法、服务器及存储介质 | |
US20150256504A1 (en) | Distributed synchronization data in a message management service | |
CN108874946B (zh) | 一种id管理方法及装置 | |
CN111858760B (zh) | 一种异构数据库的数据处理方法及装置 | |
WO2019242359A1 (zh) | 文件处理的方法及装置 | |
CN112948498A (zh) | 一种分布式系统全局标识的生成方法和装置 | |
CN110858197A (zh) | 一种同步数据的方法和装置 | |
CN113468226A (zh) | 一种业务处理方法、装置、电子设备和存储介质 | |
CN112702228A (zh) | 服务限流响应方法、装置、电子设备及可读存储介质 | |
CN114997108A (zh) | 订单号的生成方法、装置、设备及存储介质 | |
CN103248636A (zh) | 离线下载的系统及方法 | |
CN114398520A (zh) | 数据检索方法、系统、装置、电子设备及存储介质 | |
CN113641706B (zh) | 数据查询的方法和装置 | |
CN111241189A (zh) | 一种同步数据的方法和装置 | |
CN107786661B (zh) | 信息同步方法 | |
CN113761565A (zh) | 数据脱敏方法和装置 | |
CN110929126A (zh) | 一种基于远程过程调用实现的分布式爬虫调度方法 | |
CN111694801A (zh) | 一种应用于故障恢复的数据去重方法和装置 | |
CN107102901B (zh) | 一种任务处理方法和装置 | |
CN114063931A (zh) | 一种基于大数据的数据存储方法 | |
CN114328587A (zh) | 一种ndc报文分布式解析系统架构集成方法及装置 | |
CN113360558A (zh) | 数据处理方法、数据处理装置、电子设备及存储介质 | |
CN111625866A (zh) | 一种权限管理方法、系统、设备及存储介质 | |
CN113434523B (zh) | 基于大数据的业务数据更新方法、装置、设备及存储介质 | |
CN112835724A (zh) | 一种解决消息版本冲突的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |