数据存储方法和数据存储装置与流程

文档序号:11950277阅读:173来源:国知局
数据存储方法和数据存储装置与流程

本申请涉及数据处理技术领域,尤其涉及一种数据存储方法和数据存储装置。



背景技术:

对于业务量非常大的系统,往往需要存储和处理的数据量也是非常大的,导致单个数据库无法满足容量及性能要求。

现有技术中,在需要将数据保存到多个数据库时,应用系统根据业务维度(如UserId)进行拆分,根据与数据库的个数有关的规则(如根据UserId尾号对数据库个数的余数)将数据路由到多个数据库中,查询或者修改数据时,再根据UserId路由到对应的数据库查找数据。

但是,现有技术的上述方案会导致数据存储性能较差,例如,由于路由规则与数据库个数相关,如果需要在改变数据库个数后,会涉及大量的数据迁移等问题,并且一个尾数只能固定对应到一个数据库,如果该数据库故障就会造成数据存储失败,以及由于与业务维度有关每次都需要解析出业务维度。



技术实现要素:

本申请旨在至少在一定程度上解决相关技术中的技术问题之一。

为此,本申请的一个目的在于提出一种数据存储方法,该方法可以提高数据存储性能。

本申请的另一个目的在于提出一种数据存储装置。

为达到上述目的,本申请第一方面实施例提出的数据存储方法,包括:接收发送方发送的要存储的数据;在多个数据库中选择一个可用数据库;根据选择的数据库的编号为所述数据生成唯一标识,并将所述数据存储到所述选择的数据库。

本申请第一方面实施例提出的数据存储方法,通过选择可用的数据库,而不是根据与数据库个数有关的路由规则确定数据库,可以在数据库个数改变时不需要数据迁移,从而可以灵活动态的改变数据库的个数;并且,不是根据业务维度的尾号确定数据库,可以避免将尾号与数据库固定对应,这样在数据库故障后,可以选择新的可用数据库,避免数据存储失败;以及根据选择的数据库的编号生成数据的唯一标识,也不需要解析数据的业务 维度,降低工作量,从而通过上述手段可以提高数据存储性能。

为达到上述目的,本申请第二方面实施例提出的数据存储装置,包括:接收模块,用于接收发送方发送的要存储的数据;选择模块,用于在多个数据库中选择一个可用数据库;存储模块,用于根据选择的数据库的编号为所述数据生成唯一标识,并将所述数据存储到所述选择的数据库。

本申请第二方面实施例提出的数据存储装置,通过选择可用的数据库,而不是根据与数据库个数有关的路由规则确定数据库,可以在数据库个数改变时不需要数据迁移,从而可以灵活动态的改变数据库的个数;并且,不是根据业务维度的尾号确定数据库,可以避免将尾号与数据库固定对应,这样在数据库故障后,可以选择新的可用数据库,避免数据存储失败;以及根据选择的数据库的编号生成数据的唯一标识,也不需要解析数据的业务维度,降低工作量,从而通过上述手段可以提高数据存储性能。

本申请附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本申请的实践了解到。

附图说明

本申请上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:

图1是本申请实施例基于的数据存储系统的结构示意图;

图2是本申请一实施例提出的数据存储方法的流程示意图;

图3是本申请另一实施例提出的数据存储方法的流程示意图;

图4是本申请另一实施例提出的数据存储装置的结构示意图;

图5是本申请另一实施例提出的数据存储装置的结构示意图。

具体实施方式

下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的模块或具有相同或类似功能的模块。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能理解为对本申请的限制。相反,本申请的实施例包括落入所附加权利要求书的精神和内涵范围内的所有变化、修改和等同物。

为了更好的理解的本申请,先对本申请涉及的数据存储系统进行说明。如图1所示,数据存储系统可以包括应用系统11和多个数据库12,多个是指至少两个。应用系统11可以接收来自发送方(图中未示出)的数据,发送方例如用户设备,应用系统11将接收的数据存储到多个数据库12中的一个中。现有技术中,通常会根据数据的业务维度(如UserId) 和与数据库个数有关的规则路由到一个数据库中。但是,现有技术中存在上述的问题。

为此,本申请不是根据业务维度,也不是根据与数据库个数有关的规则进行数据存储。

图2是本申请一实施例提出的数据存储方法的流程示意图,该方法包括:

S21:接收发送方发送的要存储的数据。

例如,要存储的数据是用户通过用户设备发送给应用系统的。

S22:在多个数据库中选择一个可用数据库。

如图1所示,本实施例基于的系统是存在多个数据库,多个是指至少两个。应用系统需要将接收的数据存储到该多个数据库中的一个。

可选的,应用系统在启动后,可以获取其连接的多个数据库的运行状态,根据运行状态确定可用数据库,其中,运行状态包括正常和非正常,可用数据库是指运行状态是正常的数据库。具体的,应用系统可以启动后可以与每个数据库进行通信来获取数据库的运行状态,例如,应用系统向一个数据库发送消息,如果可以正常接收到反馈消息,则确定该数据库的运行状态是正常,否则,如果不能收到反馈消息或者收到错误的反馈消息,则确定该数据库的运行状态是非正常。

当可用数据库是一个时,将该一个可用数据库确定为选择的一个可用数据库。或者,

当可用数据库是多个时,可以从多个可用数据库中选择一个可用数据库。例如,可以随机选择或者轮循选择等。

S23:根据选择的数据库的编号为所述数据生成唯一标识,并将所述数据存储到所述选择的数据库。

可选的,应用系统在启动后,可以为与其连接的每个数据库分配编号,例如,第一个数据库的编号是1,第二个数据库的编号是2等。

应用系统在得到选择的数据库后,由于该数据库已被编号,因此可以获取该数据库的编号。

在获取选择的数据库的编号后,可以根据该编号生成数据的唯一标识(ID)。例如,唯一标识是:数据库编号+序列号,序列号例如是按序生成的。例如,第一个数据库中的数据的唯一标识是:11,12…,第二个数据库中的数据的唯一标识是:21,22…。

在为每个数据生成唯一标识后,可以在选择的数据库中将该唯一标识与数据对应保存。

本实施例中,通过选择可用的数据库,而不是根据与数据库个数有关的路由规则确定数据库,可以在数据库个数改变时不需要数据迁移,从而可以灵活动态的改变数据库的个数;并且,不是根据业务维度的尾号确定数据库,可以避免将尾号与数据库固定对应,这样在数据库故障后,可以选择新的可用数据库,避免数据存储失败;以及根据选择的数据 库的编号生成数据的唯一标识,也不需要解析数据的业务维度,降低工作量,从而通过上述手段可以提高数据存储性能。

图3是本申请另一实施例提出的数据存储方法的流程示意图,该方法包括:

S301:应用系统接收到发送方发送的数据后,选择一个可用数据库。

具体内容可以参见上一实施例,在此不再赘述。

S302:应用系统为该数据生成唯一ID。

具体内容可以参见上一实施例,在此不再赘述。

S303:应用系统保存该唯一ID。

应用系统在生成唯一ID后,可以记录保存该唯一ID。

S304:应用系统将数据存储到选择的数据库,并判断是否成功存储,若是,执行S305,否则,执行S306。

其中,可以根据数据存储到的反馈消息,确定数据是否成功存储,例如,在成功存储时,应用系统可以接收到数据库表明存储成功的消息,而没有成功存储,应用系统会接收到数据库表明存储失败的消息。表明存储成功的消息或表明存储失败的消息的具体格式可以由应用系统和数据库之间预先约定。

S305:应用系统向发送方返回唯一ID。

例如,应用系统将唯一ID发送给用户设备。

用户设备在后续流程中可以根据该唯一ID在数据库中访问该数据。例如,用户设备需要查询,修改或者删除该数据时,可以在发送的查询请求,修改请求或者删除请求中携带该唯一ID,以查询请求为例,应用系统接收到查询请求后,可以从中解析出唯一ID,再根据预设设置的唯一ID的生成规则,确定出数据所在的数据库,之后应用系统可以向该数据库发送结构化查询语言(Structured Query Language,SQL)指令,该SQL指令中也携带唯一ID,由于数据库中数据与唯一ID对应保存,因此根据该唯一ID可以查询到相应的数据。

可以理解的是,本实施例以用户设备采用本申请生成的唯一ID访问数据为例,还可以是在应用系统中建立原有数据的标识信息与本申请中的唯一ID的映射关系,这样可以在后续用户设备需要访问一个数据时,保持用户设备发送的访问请求中的数据标识不变,而根据建立的数据标识与唯一ID的映射关系,确定出唯一ID,进而再根据唯一ID访问相应的数据。

S306:应用系统判断是否达到最大失败次数,若是,执行S307,否则,执行S308。

其中,可以预先设置最大失败次数,初始时的失败次数设置为0,之后没发生一次存储失败,将当前的失败次数增加1,因此,根据记录的当前的失败次数以及预设的最大失败次数,可以判断是否达到最大失败次数。

S307:保存失败。

例如,数据库向应用系统反馈失败消息,应用系统还可以向用户设备反馈失败消息等。

S308:异常分析判断。

当存储失败时,应用系统可以根据预设规则分析失败原因。例如,可以预设设置反馈消息与失败原因的对应关系,从而可以根据反馈消息确定失败原因。

S309:判断是否数据库异常,若是,执行S310,否则,执行S311。

如上所示,例如,可以根据反馈消息确定出对应的失败原因,从而判断是否是数据库异常,数据库异常例如为数据库故障,宕机等。

S310:重新选择一个可用数据库。

例如,应用系统在启动后,就会实时监控每个数据库的运行状态信息,从而根据运行状态信息确定可用数据库,并进行选择。

S311:保存失败。

本实施例中,通过选择可用的数据库,而不是根据与数据库个数有关的路由规则确定数据库,可以在数据库个数改变时不需要数据迁移,从而可以灵活动态的改变数据库的个数;并且,不是根据业务维度的尾号确定数据库,可以避免将尾号与数据库固定对应,这样在数据库故障后,可以选择新的可用数据库,避免数据存储失败;以及根据选择的数据库的编号生成数据的唯一标识,也不需要解析数据的业务维度,降低工作量,从而通过上述手段可以提高数据存储性能。本实施例通过上述手段,可以达到多个数据库之间无业务状态差异,完全平等独立的存储和管理数据。

图4是本申请另一实施例提出的数据存储装置的结构示意图,该装置可以位于应用系统中,该装置40包括接收模块41,选择模块42和存储模块43。

接收模块41,用于接收发送方发送的要存储的数据;

例如,要存储的数据是用户通过用户设备发送给接收模块的。

选择模块42,用于在多个数据库中选择一个可用数据库;

如图1所示,本实施例基于的系统是存在多个数据库,多个是指至少两个。应用系统需要将接收的数据存储到该多个数据库中的一个。

可选的,应用系统在启动后,可以获取其连接的多个数据库的运行状态,根据运行状态确定可用数据库,其中,运行状态包括正常和非正常,可用数据库是指运行状态是正常的数据库。具体的,应用系统可以启动后可以与每个数据库进行通信来获取数据库的运行状态,例如,应用系统向一个数据库发送消息,如果可以正常接收到反馈消息,则确定该数据库的运行状态是正常,否则,如果不能收到反馈消息或者收到错误的反馈消息,则确定该数据库的运行状态是非正常。

当可用数据库是一个时,将该一个可用数据库确定为选择的一个可用数据库。或者,

当可用数据库是多个时,可以从多个可用数据库中选择一个可用数据库。例如,可以随机选择或者轮循选择等。

存储模块43,用于根据选择的数据库的编号为所述数据生成唯一标识,并将所述数据存储到所述选择的数据库。

可选的,应用系统在启动后,可以为与其连接的每个数据库分配编号,例如,第一个数据库的编号是1,第二个数据库的编号是2等。

应用系统在得到选择的数据库后,由于该数据库已被编号,因此可以获取该数据库的编号。

在获取选择的数据库的编号后,可以根据该编号生成数据的唯一标识(ID)。例如,唯一标识是:数据库编号+序列号,序列号例如是按序生成的。例如,第一个数据库中的数据的唯一标识是:11,12…,第二个数据库中的数据的唯一标识是:21,22…。

在为每个数据生成唯一标识后,可以在选择的数据库中将该唯一标识与数据对应保存。

参见图5,另一实施例中,该装置40还包括:

发送模块44,用于如果所述数据成功存储到所述选择的数据库,将所述唯一标识发送给所述发送方,以便所述发送方后续根据所述唯一标识在数据库中访问所述数据。

例如,发送模块将唯一ID发送给用户设备。

用户设备在后续流程中可以根据该唯一ID在数据库中访问该数据。例如,用户设备需要查询,修改或者删除该数据时,可以在发送的查询请求,修改请求或者删除请求中携带该唯一ID,以查询请求为例,应用系统接收到查询请求后,可以从中解析出唯一ID,再根据预设设置的唯一ID的生成规则,确定出数据所在的数据库,之后应用系统可以向该数据库发送结构化查询语言(Structured Query Language,SQL)指令,该SQL指令中也携带唯一ID,由于数据库中数据与唯一ID对应保存,因此根据该唯一ID可以查询到相应的数据。

参见图5,另一实施例中,该装置40还包括:

更新模块45,用于如果所述数据没有成功存储到所述选择的数据库时,并在所述选择的数据库发生故障造成没有成功存储时,重新选择一个可用数据库;根据重新选择的数据库的编号重新生成唯一标识,并用重新生成的唯一标识更新已有的唯一标识,以及,将所述数据存储到所述重新选择的数据库。

例如,应用系统在启动后,就会实时监控每个数据库的运行状态信息,从而根据运行状态信息确定可用数据库,并进行选择。

参见图5,另一实施例中,该装置40还包括:

判断模块46,用于判断没有成功存储的次数是否达到最大失败次数,以便在没有达到最大失败次数时,在所述选择的数据库发生故障造成没有成功存储时,重新选择一个可用数据库。

其中,可以预先设置最大失败次数,初始时的失败次数设置为0,之后没发生一次存储失败,将当前的失败次数增加1,因此,根据记录的当前的失败次数以及预设的最大失败次数,可以判断是否达到最大失败次数。

参见图5,另一实施例中,该装置40还包括:

获取模块47,用于获取所述多个数据库中每个数据库的运行状态信息,以便根据所述运行状态信息在多个数据库中选择一个可用数据库;以及,为每个数据库分配一个编号,以便获取所述选择的数据库的编号。

本实施例中,通过选择可用的数据库,而不是根据与数据库个数有关的路由规则确定数据库,可以在数据库个数改变时不需要数据迁移,从而可以灵活动态的改变数据库的个数;并且,不是根据业务维度的尾号确定数据库,可以避免将尾号与数据库固定对应,这样在数据库故障后,可以选择新的可用数据库,避免数据存储失败;以及根据选择的数据库的编号生成数据的唯一标识,也不需要解析数据的业务维度,降低工作量,从而通过上述手段可以提高数据存储性能。本实施例通过上述手段,可以达到多个数据库之间无业务状态差异,完全平等独立的存储和管理数据。

需要说明的是,在本申请的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本申请的描述中,除非另有说明,“多个”的含义是两个或两个以上。

流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本申请的实施例所属技术领域的技术人员所理解。

应当理解,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。

本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可 以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。

此外,在本申请各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。

上述提到的存储介质可以是只读存储器,磁盘或光盘等。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。

尽管上面已经示出和描述了本申请的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施例进行变化、修改、替换和变型。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1