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

文档序号:17989778发布日期:2019-06-22 00:41阅读:165来源:国知局
本发明涉及通信领域,具体而言,涉及一种数据存储方法及装置。
背景技术
::在相关技术中,对于复杂且数据量庞大的业务信息,在分布式数据库的使用中,传统方法都是通过构建多张数据表来存储业务的不同类别的数据;这样会导致分布式数据库中的表非常多,从而导致业务逻辑变得复杂不宜维护,在使用上也较为麻烦。针对相关技术中存储数据信息可能使用多张表而导致使用麻烦的问题,目前还没有有效的解决方案。技术实现要素:本发明实施例提供了一种数据存储方法及装置,以至少解决相关技术中存储数据信息可能使用多张表而导致使用麻烦的问题。根据本发明的一个实施例,提供了一种数据存储方法,包括:确定用于存储待存储数据的多级表的多个预设字段或字段组合;分别将与所述多个预设字段或字段组合各自对应的部分待存储数据,存储至与预设字段或字段组合对应的数据存储节点。根据本发明的另一个实施例,还提供了一种数据存储装置,包括:确定用于存储待存储数据的多级表的多个预设字段或字段组合;分别将与所述多个预设字段或字段组合各自对应的部分待存储数据,存储至与预设字段或字段组合对应的数据存储节点。根据本发明的另一个实施例,还提供了一种存储介质,所述存储介质包括存储的程序,其中,所述程序运行时执行上述可选实施例任一项中所述的方法。根据本发明的另一个实施例,还提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行上述实施例任一项中所述的方法。通过本发明,确定用于存储数据的多级表的多个预设字段或字段组合,按照多个预设字段或字段组合的预定顺序,获取待存储数据中与各个预设字段或字段组合相关的数据部分,将该数据部分存储至与该预设字段或字段组合对应的数据存储节点。采用上述方案,在一个多级表中存储了待存储数据,即使待存储数据负载庞大,后续查找时可以在该多级表中获取到需要的数据,不必去多个表中查询数据,解决了相关技术中存储数据信息可能使用多张表而导致使用麻烦的问题,大幅降低了存储数据时以及查找数据时的繁琐流程。附图说明此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:图1是根据本发明实施例的数据存储方法的流程图;图2是根据本发明优选实施例的分布式数据库多级表的数据分布示意图;图3是根据本发明优选实施例的多级表的层次结构图;图4是根据本发明优选实施例的table_list_ex的结构示意图;图5是根据本发明优选实施例的对于多级分片功能模块间的关系示意图;图6是根据本发明优选实施例的多级分片方案的系统交互时序图;图7是根据本发明具体实施例的多级表的银行业务实例结构图。具体实施方式本申请文件记载了一种数据存储方法,可以应用于各种终端或者网络服务器等设备或者网络环境。本申请文件针对的技术问题是:相关技术中的分布式数据库查询技术中,创建单表时,遇到业务量大的局部热点数据,容易出现热点查询拥堵的问题,本申请文件为了解决这一难点,提出了一种多级分片优化方法。多级分片功能使用同一张表既可以管理同一个业务问题,简化业务逻辑,也可以在一张表中实现不同业务数据的物理隔离,增加安全性。实施例一在本实施例中提供了一种运行于上述设备或网络架构的数据存储方法,图1是根据本发明实施例的数据存储方法的流程图,如图1所示,该流程包括如下步骤:步骤s102,确定用于存储待存储数据的多级表的多个预设字段或字段组合;步骤s104,分别将与该多个预设字段或字段组合各自对应的部分待存储数据,存储至与预设字段或字段组合对应的数据存储节点。通过上述步骤,确定用于存储数据的多级表的多个预设字段或字段组合,按照多个预设字段或字段组合的预定顺序,获取待存储数据中与各个预设字段或字段组合相关的数据部分,将该数据部分存储至与该预设字段或字段组合对应的数据存储节点。采用上述方案,在一个多级表中存储了待存储数据,即使待存储数据负载庞大,后续查找时可以在该多级表中获取到需要的数据,不必去多个表中查询数据,解决了相关技术中存储数据信息可能使用多张表而导致使用麻烦的问题,大幅降低了存储数据时以及查找数据时的繁琐流程。可选地,分别将与该多个预设字段或字段组合各自对应的部分待存储数据,存储至与预设字段或字段组合对应的数据存储节点,包括:确定该多级表中的多个预设字段或字段组合的优先级;依据该多个预设字段或字段组合的优先级,依次存储与预设字段或字段组合对应的部分待存储数据至数据存储节点。可选地,依据该多个预设字段或字段组合的优先级,依次存储与预设字段或字段组合对应的部分待存储数据至数据存储节点,包括:存储与第一优先级的预设字段或字段组合对应的第一部分待存储数据;在除该第一部分待存储数据之外的其他该待存储数据中,确定与第二优先级的预设字段或字段组合对应的第二部分待存储数据,其中,该第一优先级的级别高于该第二优先级。可选地,分别将与该多个预设字段或字段组合各自对应的部分待存储数据,存储至与预设字段或字段组合对应的数据存储节点之后,在存储与第一预设字段或字段组合对应的部分待存储数据至数据存储节点之后,依据该第一预设字段或字段组合和该部分待存储数据,确定该多级表中与该第一预设字段或字段组合对应的第一子表。需要说明的是,本实施例中形成的多个子表均为多级表的一部分,构成了多级表。可选地,通过以下方式进行存储该多级表,和/或,该多级表的多个子表:通过表的元数据结构table_list_ex内存结构进行存储。可选地,确定用于存储待存储数据的多级表的多个预设字段或字段组合之前,该方法还包括:通过条件casewhen语句搭建该多级表。可选地,分别将与该多个预设字段或字段组合各自对应的部分待存储数据,存储至与预设字段或字段组合对应的数据存储节点之前,该方法还包括:获取该多个预设字段或字段组合与数据存储节点的对应关系。下面结合本发明优选实施例进行详细说明。多级分片表具有分发属性和分布节点两个概念,根据不同的分发属性可以将表分为:哈希hash表、复制表、list表和范围range表,分布节点则是指明数据表都分布在哪些数据存储节点上。多级分片表可以在一张表中根据不同的业务需要构造多个分发键,对不同的业务数据支持多种分发类型,根据分发键和分发类型将业务数据分发到不同的节点上,实现多个字段多级分片的功能。多级分片表可以有效的减少局部热点问题,尤其对于业务场景复杂的情形,通过创建多级分片表可以有效解决热点查询拥堵的问题,让数据查询速度更快,时间更短,使用变得更加简单。本发明采用以下技术方案:本发明所述的分布式数据库多级分片功能主要技术为:本发明中根据表的分发属性把多级表可以分为复制表、hash表、range表和list表。该多级分片表(即上述实施例的多级表)基于casewhen语句进行实现。在下面实施例中有具体记载。多级分片算法的核心内容:多级分片语法基于casewhen进行实现,根据不同的分片字段(字段组合)和分发策略创建出多级表。多级表根据不同的字段(字段组合)和分发策略将同一业务的数据分发到同一数据存储节点上,将不同业务的数据分发到不同的数据存储节点上,实现数据的物理隔离,简化了查询语句。对于多级分片功能:1.分片依据可以是单独字段、字段组合或者字段的部分、组合;2.分片是单独字段时,支持通过子链substring取出需要的分片字段信息;通过多级分片算法创建的表称为多级表,多级表可以根据不同的业务需要选取不同的分发字段,根据不同分发策略(复制、hash、list、range)将表中数据分布到不同节点,建表规则:创建多级分片表时,需要先选择一个字段(字段组合),根据这个字段(字段组合)结合casewhen语句将数据分发到数据库存储节点上,这是第一级子表;根据业务需要再选择新的字段(字段组合)结合casewhen语句、分发策略构建制表、hash表、range表和list表,将数据分发到新的数据库存储节点上,称为第二级子表;以此类推,最多可以构建五级子表,最后一级称为末级子表,其他级称为中间级子表,中间级子表只能是list表或者range表,末级可以是复制表、hash表、list表和range表,这些子表构成一个多级表,在业务层面显示为一个表。多级表可以解决单级表不能解决的多热点查询拥堵问题,提高执行速度。分布式多级分片语法有两种,如下:语法一:语法二:其中,case_value、when_value、statement_list三个参数的意义如下:case_value的意义包括以下至少之一:1)字段名;2)简单表达式(+、-、*、/);3)time、date、hour、minute、day、month、year和substr(substring)函数;when_value的意义包括以下至少之一:1)value值;statement_list的意义包括以下至少之一:1)case分支;2)group值;3)多组分发策略;图2是根据本发明优选实施例的分布式数据库多级表的数据分布示意图,如图2所示,如果要创建一个多级表t1,创建流程如下:步骤一,根据t1的分发字段(字段组合)1将多级表的部分业务指定分发到数据库存储节点1上,称为一级子表;步骤二,不满足一级子表条件的业务根据t1的分发字段(字段组合)2按照分发策略指定分发到数据存储节点2上,称为二级子表;步骤三,不满足以上条件的业务根据t1的分发字段(字段组合)3指定分发到存储节点3上,称为三级子表,以此类推。需要补充的是,分发字段组合也可以看做是一个新的分发字段。图3是根据本发明优选实施例的多级表的层次结构图,如图3所示,第一层,按照字段或字段组合进行list/range分发;第二层,按照字段或字段组合2进行list/range分发;第三层,按照字段或字段组合3进行复制/hash/list/range分发。相对于多级表而言,传统的分布式数据库表被称为单级表,在多级分片功能中多级表、单级表以及子表都使用统一内存结构table_list_ex。图4是根据本发明优选实施例的table_list_ex的结构示意图,如图4所示:1、表的元数据结构table_list_ex需要对其管辖的末级子表的table_list_ex进行生命周期管理(创建、计数和销毁);2、通过table_list_ex的成员变量m_tablelevel的枚举值可以判断当前表是多级表、单级表还是经过过滤后的子表(multi_level_tab,single_level_tab,sub_level_tab)。图5是根据本发明优选实施例的对于多级分片功能模块间的关系示意图,如图5所示,sql层和元数据层之间执行以下步骤:步骤1、原有的获取表结构的接口不用变化,用于获取簇id,库,表等,但是返回的表可能是单级表或多级表;步骤2、返回分级表,业务层需要调用接口判断是否为多级表,如果是多级表则执行步骤3,否则按照原来业务流程执行;步骤3、将多级表的非末级字段值列表都传递给表的元数据接口;步骤4、元数据模块调用数据定位模块(图中的数据定位层),找到对应的末级表信息并创建对应子表的元数据结构返回给结构化查询语言(structuredquerylanguage,简称为sql)层。图6是根据本发明优选实施例的多级分片方案的系统交互时序图,如图6所示,包括以下步骤:步骤1、sql层调用现有的获取表元数据接口函数,包括簇id,库和表等;步骤2、返回的元数据结构table_list_ex可能是两种类型的表:多级表或单级表;步骤3、判断如果是多级表则跳到步骤4,否则执行步骤9;步骤4、将表的非末级值传递给元数据接口函数进行定位计算;需要补充的是,末级值即末级列表的相关值,非末级值即不包括末级列表的多级表的存储的相关数值。步骤5、通过定位计算接口计算出sql层请求的子表信息;步骤6、返回子表信息,包括定位信息步骤7、依据信息创建子表结构table_list_ex;步骤8、返回子表table_list_ex指针;步骤9、sql层业务使用该子表指针或者单级表指针执行原有单级表流程。下面结合具体实施例进一步说明:以银行的某业务作为语法例,建一个银行业务信息的多级表,其具体结构如图7所示,图7是根据本发明具体实施例的多级表的银行业务实例结构图:首先说明的是数据库的以下信息,数据库名bank,多级表名info,表中字段有法人属性:corporate_property、公私类型:private_type、集团信息:corporate_information、客户号:customer_number。多级表info的建表语句为:由上述内容可知,上例中指定一个末端等级为4层的多级分片表的含义可以如下,即图7包括以下内容:第一层:按照corporate_property进行list分发,具体的,根据字段corporate_property将法人属性为“中信银行伦敦”的记录分发到数据存储节点g9上,将corporate_property为“中信银行纽约”的记录分发到数据存储节点g10上,其他记录分发情况参考第二层;第二层:按照private_type进行list分发,具体的,根据字段private_type将公私类型为“对私”的数据再根据第三层的customer_number字段进行hash分发,根据hash规则分发到数据存储节点g1,g2,g3,g4,g5上,其他数据分发情况参考第三层;第三层:如果确定公私类型是对私以外的,则根据corporate_information进行list分发,具体为根据字段corporate_information将集团信息为“五矿集团”或者”光大集团”的数据分发到数据存储节点g6上,其他数据分发情况参考第四层;如果确定公私类型是“对私”,根据字段customer_number进行hash分发,将数据分布到数据存储节点g1,g2,g3,g4,g5上。第四层:根据字段customer_number进行hash分发,将数据分布到数据存储节点g7,g8上。有益效果:采用本发明所述方法,与传统的分布式数据库单表相比,可以只通过一张表实现业务数据管理,同时能实现物理级的数据隔离,多级分片功能将复杂业务场景简化为只需要一张表就可以实现的场景,因此在提升分布式查询系统的性能上取得了进步,达到了提高分布式查询速度的目的。本发明在分布式数据库中创建多级分片表,将一个业务中不同类别的数据分别分布到一个逻辑表的不同区间中去,从而简化业务逻辑,业务只需要给出一条sql语句,多级分片表自身逻辑就可以判断并精确定位到具体的数据区间。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。实施例二在本实施例中还提供了一种数据存储装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。根据本发明的实施例,提供了一种数据存储装置,包括:确定模块,用于确定用于存储待存储数据的多级表的多个预设字段或字段组合;存储模块,用于分别将与所述多个预设字段或字段组合各自对应的部分待存储数据,存储至与预设字段或字段组合对应的数据存储节点。需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。实施例三根据本发明的另一个实施例,还提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行上述可选实施例任一项中所述的方法。实施例四根据本发明的另一个实施例,还提供了一种存储介质,所述存储介质包括存储的程序,其中,所述程序运行时执行上述可选实施例任一项中所述的方法。显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1