掌桥专利:专业的专利平台
掌桥专利
首页

一种实现网约车司乘订单分库分表的方法及装置

文献发布时间:2023-06-19 19:28:50


一种实现网约车司乘订单分库分表的方法及装置

技术领域

本发明涉及网约车司乘订单数据库的技术领域,具体涉及一种实现网约车司乘订单分库分表的方法及装置。

背景技术

网约车,即网络预约出租汽车经营服务,随着网络的覆盖率增长和网络技术的发展,加上移动终端的普及,网约车逐渐成为人们出行的一种重要方式,与公共交通工具和出租车等成为了,且网约车的市场占有率正在持续上升。相较于传统的出行方式,网约车出行时人、车、路之间的相互作用关系以新的方式呈现,较传统的交通系统能够体现更为实时、准确、高效、安全和节能的优点。

但是,现有的网约车平台一般采用单个数据库统一存储司机订单和乘客订单,当出现拼车或订单改派等业务时,需要对司机订单和乘客订单分别进行实时修改,而现有技术一般需要新建订单,使得数据库臃肿切难以追溯,否则业务需求上的耦合难以得到满足。

现有技术中,网约车订单在建立后,无法实现拼车、订单改派等业务需求,进而影响了业务需求中的可扩展性,难以满足日益增长的订单需求。

发明内容

为了克服上述现有网约车数据库无法满足订单业务需求的技术缺陷,本发明提供一种实现网约车司乘订单分库分表的方法及装置。

为了解决上述问题,本发明按以下技术方案予以实现的:

第一方面,本发明公开一种实现网约车司乘订单分库分表的方法,具体包括以下步骤:

步骤S1:创建司机订单库表,基于司机ID实现分库分表,形成司机订单数据库表;

步骤S2:获取历史订单,同步历史订单中有运力接单的有效乘客订单,将有效乘客订单基于对应的司机ID分别写入到司机订单数据库表中;

步骤S3:将运力侧所读取的乘客订单数据库的数据进行切换,以切换到读取分库分表后的司机订单数据库表;

步骤S4:获取旧的单表乘客订单数据库的数据,创建新的乘客订单数据库表,并基于乘客ID实现分库分表,形成热乘客订单库和冷乘客订单库;

步骤S5:采用数据库双写策略,在乘客下单时,往旧的单表乘客订单数据库中的订单表插入数据,同时往新的乘客订单数据库写入数据;

步骤S6:将乘客侧所读取的乘客订单数据库的数据进行切换,获取冷热乘客订单业务需求,基于冷热乘客订单业务需求相应地切换至热乘客订单库或冷乘客订单库。

作为第一方面的一种优选实施方式,所述司机订单数据库表采用数据库双写策略,在乘客订单指派到司机后,基于司机ID生成司机订单,并实时往司机分库分表的司机订单库中写入一条司机订单记录;

所述司机订单数据库表通过MongoDB做数据动态拓展、数据同步兜底可追溯异常丢失数据,通过Redis做热点乘客订单的关系映射缓存。

作为第一方面的一种优选实施方式,所述创建新的乘客订单数据库表,具体包括如下子步骤:

创建新的乘客订单数据库表;

获取分库分表规则;

将历史的乘客订单基于乘客ID分类;

将分类后的乘客订单分别写入到分库分表后新的乘客订单数据库表中。

作为第一方面的一种优选实施方式,所述新的乘客订单数据库表通过采用Binlog+MQ的方式处理数据同步,以现全量数据异地构建存储。

作为第一方面的一种优选实施方式,还包括废弃旧数据库的步骤,具体包括:

获取乘客订单的业务反馈数据;

获知当前乘客订单切换至热乘客订单库或冷乘客订单库;

废弃旧的单表乘客订单数据库;

将新的乘客订单写入到新的乘客订单数据库表中。

第二方面,本方面还公开一种实现网约车司乘订单分库分表的装置,包括:

司机分库分表模块M1,其用于创建司机订单库表,基于司机ID实现分库分表,形成司机订单数据库表;

司机数据写入模块M2,其用于获取历史订单,同步历史订单中有运力接单的有效乘客订单,将有效乘客订单基于对应的司机ID分别写入到司机订单数据库表中;

司机数据切换模块M3,其用于将运力侧所读取的乘客订单数据库的数据进行切换,以切换到读取分库分表后的司机订单数据库表;

乘客分库分表模块M4,其用于获取旧的单表乘客订单数据库的数据,创建新的乘客订单数据库表,并基于乘客ID实现分库分表,形成热乘客订单库和冷乘客订单库;

乘客数据写入模块M5,其用于采用数据库双写策略,在乘客下单时,往旧的单表乘客订单数据库中的订单表插入数据,同时往新的乘客订单数据库写入数据;

乘客数据切换模块M6,其用于将乘客侧所读取的乘客订单数据库的数据进行切换,获取冷热乘客订单业务需求,基于冷热乘客订单业务需求相应地切换至热乘客订单库或冷乘客订单库。

作为第二方面的一种优选实施方式,所述司机订单数据库表采用数据库双写策略,在乘客订单指派到司机后,基于司机ID生成司机订单,并实时往司机分库分表的司机订单库中写入一条司机订单记录;

所述司机订单数据库表通过MongoDB做数据动态拓展、数据同步兜底可追溯异常丢失数据,通过Redis做热点乘客订单的关系映射缓存。

作为第二方面的一种优选实施方式,所述乘客分库分表模块在运行时,具体执行:

创建新的乘客订单数据库表;

获取分库分表规则;

将历史的乘客订单基于乘客ID分类;

将分类后的乘客订单分别写入到分库分表后新的乘客订单数据库表中。

作为第二方面的一种优选实施方式,所述新的乘客订单数据库表通过采用Binlog+MQ的方式处理数据同步,以现全量数据异地构建存储。

作为第二方面的一种优选实施方式,还包括数据库废弃模块,所述数据库废弃模块在运行时具体执行:

获取乘客订单的业务反馈数据;

获知当前乘客订单切换至热乘客订单库或冷乘客订单库;

废弃旧的单表乘客订单数据库;

将新的乘客订单写入到新的乘客订单数据库表中。

与现有技术相比,本发明的有益效果是:

关键点是通过双写后再切读的方式实现了司乘订单分离及分库分表。

本发明创造性地通过司乘订单分离,最终实现司乘订单分库分表,司乘订单分离解决了业务需求上的耦合,未分离前无法实现拼车、订单改派等业务需求,司乘订单分离解决了业务需求的可扩展性。司乘订单分库分表提高了司乘订单的插入、更新、查询数据效率,突破单个数据库的瓶颈,以满足日益增长的订单需求。进一步地,本方面中创造性地,司机订单维度通过MongoDB做数据动态拓展、数据同步兜底可追溯,Redis做热点订单关系映射缓存。乘客订单维度采用Binlog+MQ方式处理数据同步,实现全量数据异地构建存储;对订单安全数据加密分存处理。

附图说明

下面结合附图对本发明的具体实施方式作进一步详细的说明,其中:

图1是本发明的实现网约车司乘订单分库分表的方法的流程示意图;

图2是本发明的实现网约车司乘订单分库分表的装置的结构示意图。

具体实施方式

以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。

以下在实施方式中详细叙述本发明的详细特征以及优点,其内容足以使任何熟悉相关技术者,了解本发明的技术内容并据以实施,且根据本说明书所揭露的内容、权利要求及附图,任何熟悉相关技术者可轻易地理解本发明相关的目的及优点。以下的实施例是进一步详细说明本发明的观点,但非以任何观点限制本发明的范畴。

并且,以下将以附图揭露本发明的实施例,为达图面整洁的目的,一些现有惯用的结构与元件在附图可能会以简单示意的方式绘示之,且本案附图中部分的特征可能会略为放大或改变其比例或尺寸,以达到便于理解与观看本发明的技术特征的目的,但这并非用于限定本发明。此外,附图中提供有坐标轴,以利于理解元件的相对位置关系和作动方向。

下面将参照附图更详细地描述本公开的优选实施例。虽然附图中显示了本公开的优选实施例,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。

在本文中使用的术语“包括”及其变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个示例实施例”和“一个实施例”表示“至少一个示例实施例”。术语“另一实施例”表示“至少一个另外的实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。

访问设备和服务器可以通过有线或无线通信方式进行直接或间接地连接。访问设备可以是终端,也可以是服务器。访问设备上运行了目标应用。目标应用是能够向服务器发起数据请求的应用程序,如社交应用、支付应用、游戏应用等。服务器可以是目标应用提供服务的应用服务器,也可以是区别与目标应用所对应应用服务器的代理服务器。服务器用于识别每个访问设备是否属于恶意设备,对来自恶意设备的数据报文进行拦截。当服务器为代理服务器时,代理服务器将不属于来自恶意设备的数据报文转发至应用服务器。终端具体可以是台式终端或移动终端,移动终端具体可以智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。服务器与服务器分别可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。

再者,除非另有定义,本文所使用的所有词汇或术语,包括技术和科学上的词汇与术语等包含其通常的意涵,其意涵能够被熟悉此技术领域者所理解。更进一步的说,上述的词汇或术语的定义,在本说明书中应被解读为与本发明相关技术领域包含一致的意涵。除非有特别明确的定义,这些词汇或术语将不被解释为过于理想化的或正式的意涵。

实施例1

如图1所示,第一方面,本发明公开一种实现网约车司乘订单分库分表的方法,具体包括以下步骤:

步骤S1:创建司机订单库表,基于司机ID实现分库分表,形成司机订单数据库表;

步骤S2:获取历史订单,同步历史订单中有运力接单的有效乘客订单,将有效乘客订单基于对应的司机ID分别写入到司机订单数据库表中;

步骤S3:将运力侧所读取的乘客订单数据库的数据进行切换,以切换到读取分库分表后的司机订单数据库表;

步骤S4:获取旧的单表乘客订单数据库的数据,创建新的乘客订单数据库表,并基于乘客ID实现分库分表,形成热乘客订单库和冷乘客订单库;

步骤S5:采用数据库双写策略,在乘客下单时,往旧的单表乘客订单数据库中的订单表插入数据,同时往新的乘客订单数据库写入数据;

步骤S6:将乘客侧所读取的乘客订单数据库的数据进行切换,获取冷热乘客订单业务需求,基于冷热乘客订单业务需求相应地切换至热乘客订单库或冷乘客订单库。

其中,热乘客订单和冷乘客订单基于乘客的访问频率、下单频率等进行判别,以区分为热乘客数据乘客和冷乘客数据,并基于乘客数据的类型,分别切分到对应的热乘客订单库或冷乘客订单库。

作为第一方面的一种优选实施方式,所述司机订单数据库表采用数据库双写策略,在乘客订单指派到司机后,基于司机ID生成司机订单,并实时往司机分库分表的司机订单库中写入一条司机订单记录;

所述司机订单数据库表通过MongoDB做数据动态拓展、数据同步兜底可追溯异常丢失数据,通过Redis做热点乘客订单的关系映射缓存。

作为第一方面的一种优选实施方式,所述创建新的乘客订单数据库表,具体包括如下子步骤:

创建新的乘客订单数据库表;

获取分库分表规则;

将历史的乘客订单基于乘客ID分类;

将分类后的乘客订单分别写入到分库分表后新的乘客订单数据库表中。

作为第一方面的一种优选实施方式,所述新的乘客订单数据库表通过采用Binlog+MQ的方式处理数据同步,以现全量数据异地构建存储。

作为第一方面的一种优选实施方式,还包括废弃旧数据库的步骤,具体包括:

获取乘客订单的业务反馈数据;

获知当前乘客订单切换至热乘客订单库或冷乘客订单库;

废弃旧的单表乘客订单数据库;

将新的乘客订单写入到新的乘客订单数据库表中。

综上所述,本发明创造性地通过司乘订单分离,最终实现司乘订单分库分表,司乘订单分离解决了业务需求上的耦合,未分离前无法实现拼车、订单改派等业务需求,司乘订单分离解决了业务需求的可扩展性。司乘订单分库分表提高了司乘订单的插入、更新、查询数据效率,突破单个数据库的瓶颈,以满足日益增长的订单需求。

进一步地,本方面中创造性地,司机订单维度通过MongoDB做数据动态拓展、数据同步兜底可追溯,Redis做热点订单关系映射缓存。乘客订单维度采用Binlog+MQ方式处理数据同步,实现全量数据异地构建存储;对订单安全数据加密分存处理。

本实施例所述的通过换绑发方式提高匿名电话打通率的方法的其它步骤参见现有技术。

实施例2

如图2所示,第二方面,本方面还公开一种实现网约车司乘订单分库分表的装置,包括:

司机分库分表模块M1,其用于创建司机订单库表,基于司机ID实现分库分表,形成司机订单数据库表;

司机数据写入模块M2,其用于获取历史订单,同步历史订单中有运力接单的有效乘客订单,将有效乘客订单基于对应的司机ID分别写入到司机订单数据库表中;

司机数据切换模块M3,其用于将运力侧所读取的乘客订单数据库的数据进行切换,以切换到读取分库分表后的司机订单数据库表;

乘客分库分表模块M4,其用于获取旧的单表乘客订单数据库的数据,创建新的乘客订单数据库表,并基于乘客ID实现分库分表,形成热乘客订单库和冷乘客订单库;

乘客数据写入模块M5,其用于采用数据库双写策略,在乘客下单时,往旧的单表乘客订单数据库中的订单表插入数据,同时往新的乘客订单数据库写入数据;

乘客数据切换模块M6,其用于将乘客侧所读取的乘客订单数据库的数据进行切换,获取冷热乘客订单业务需求,基于冷热乘客订单业务需求相应地切换至热乘客订单库或冷乘客订单库。

作为第二方面的一种优选实施方式,所述司机订单数据库表采用数据库双写策略,在乘客订单指派到司机后,基于司机ID生成司机订单,并实时往司机分库分表的司机订单库中写入一条司机订单记录;

所述司机订单数据库表通过MongoDB做数据动态拓展、数据同步兜底可追溯异常丢失数据,通过Redis做热点乘客订单的关系映射缓存。

作为第二方面的一种优选实施方式,所述乘客分库分表模块M4在运行时,具体执行:

创建新的乘客订单数据库表;

获取分库分表规则;

将历史的乘客订单基于乘客ID分类;

将分类后的乘客订单分别写入到分库分表后新的乘客订单数据库表中。

作为第二方面的一种优选实施方式,所述新的乘客订单数据库表通过采用Binlog+MQ的方式处理数据同步,以现全量数据异地构建存储。

作为第二方面的一种优选实施方式,还包括数据库废弃模块M7,所述数据库废弃模块M7在运行时具体执行:

获取乘客订单的业务反馈数据;

获知当前乘客订单切换至热乘客订单库或冷乘客订单库;

废弃旧的单表乘客订单数据库;

将新的乘客订单写入到新的乘客订单数据库表中。

本实施例所述的实现网约车司乘订单分库分表的装置的其它结构参见现有技术。

实施例3

本发明还公开一种电子设备,至少一个处理器,以及与所述至少一个处理器通信连接的存储器,其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,所述至少一个处理器执行指令时,具体实现以下的步骤:创建司机订单库表,基于司机ID实现分库分表,形成司机订单数据库表;获取历史订单,同步历史订单中有运力接单的有效乘客订单,将有效乘客订单基于对应的司机ID分别写入到司机订单数据库表中;将运力侧所读取的乘客订单数据库的数据进行切换,以切换到读取分库分表后的司机订单数据库表;获取旧的单表乘客订单数据库的数据,创建新的乘客订单数据库表,并基于乘客ID实现分库分表,形成热乘客订单库和冷乘客订单库;采用数据库双写策略,在乘客下单时,往旧的单表乘客订单数据库中的订单表插入数据,同时往新的乘客订单数据库写入数据;将乘客侧所读取的乘客订单数据库的数据进行切换,获取冷热乘客订单业务需求,基于冷热乘客订单业务需求相应地切换至热乘客订单库或冷乘客订单库。

实施例4

本发明还公开一种存储介质,存储有计算机程序,所述计算机程序被处理器执行时,具体实现以下步骤:创建司机订单库表,基于司机ID实现分库分表,形成司机订单数据库表;获取历史订单,同步历史订单中有运力接单的有效乘客订单,将有效乘客订单基于对应的司机ID分别写入到司机订单数据库表中;将运力侧所读取的乘客订单数据库的数据进行切换,以切换到读取分库分表后的司机订单数据库表;获取旧的单表乘客订单数据库的数据,创建新的乘客订单数据库表,并基于乘客ID实现分库分表,形成热乘客订单库和冷乘客订单库;采用数据库双写策略,在乘客下单时,往旧的单表乘客订单数据库中的订单表插入数据,同时往新的乘客订单数据库写入数据;将乘客侧所读取的乘客订单数据库的数据进行切换,获取冷热乘客订单业务需求,基于冷热乘客订单业务需求相应地切换至热乘客订单库或冷乘客订单库。

本公开可以是方法、装置、系统和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于执行本公开的各个方面的计算机可读程序指令。

计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。

这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。

用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,上述编程语言包括面向对象的编程语言—诸如Smalltalk、C++、Java等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。

这里参照根据本公开实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。

这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理单元,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理单元执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。

也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。

附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,上述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

以上已经描述了本公开的各实施方式,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施方式。在不偏离所说明的各实施方式的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施方式的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其他普通技术人员能理解本文披露的各实施方式。

技术分类

06120115927332