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

文档序号:30979683发布日期:2022-08-03 00:18阅读:99来源:国知局
数据存储方法及装置与流程

1.本说明书实施例涉及计算机技术领域,特别涉及一种数据存储方法。


背景技术:

2.目前,业务模型实例化后的数据都保存在宽表中,而同一键值位置的字段,针对不同的业务对象,其存储内容的实际数据类型不同,没办法利用底层数据库索引能力对其进行排序。
3.现有技术中,为对应的字段增加对应的索引表,从而实现常规数据表上的索引效果,然而在数据表中新增记录时,需要对该对应的索引表进行类似的修改,并且,在多个字段需要同时检索时,需要对应的索引表进行自关联查询,不仅实现复杂而且随着查询条件的增多,处理效率也会降低。
4.因此,如何减少数据库操作的复杂度,同时增加数据查询的执行效率具有十分重要的意义。


技术实现要素:

5.有鉴于此,本说明书实施例提供了一种数据存储方法。本说明书一个或者多个实施例同时涉及一种数据存储装置,一种数据查询方法,一种数据查询装置,一种计算设备,一种计算机可读存储介质以及一种计算机程序,以解决现有技术中存在的技术缺陷。
6.根据本说明书实施例的第一方面,提供了一种数据存储方法,包括:
7.根据新增字段的字段信息,确定所述新增字段对应的业务模型;
8.获取所述业务模型对应的目标数据表中历史字段的字段信息,其中,所述目标数据表包括索引字段区域以及非索引字段区域;
9.在确定所述新增字段为索引字段的情况下,根据所述目标数据表中历史字段的字段信息,在所述索引字段区域确定所述新增字段的存储位置。
10.根据本说明书实施例的第二方面,提供了一种数据存储装置,包括:
11.模型确定模块,被配置为根据新增字段的字段信息,确定所述新增字段对应的业务模型;
12.信息获取模块,被配置为获取所述业务模型对应的目标数据表中历史字段的字段信息,其中,所述目标数据表包括索引字段区域以及非索引字段区域;
13.位置确定模块,被配置为在确定所述新增字段为索引字段的情况下,根据所述目标数据表中历史字段的字段信息在所述索引字段区域确定所述新增字段的存储位置。
14.根据本说明书实施例的第三方面,提供了一种数据查询方法,包括:
15.根据接收的数据查询请求,获取目标数据表中历史字段的字段信息,其中,所述数据查询请求中携带有待查询数据的数据信息;
16.根据预设的处理规则对该数据查询请求进行处理,获得初始数据查询语句;
17.在确定存在查询引擎,且所述初始数据查询语句满足预设检索条件的情况下,根
据所述初始数据查询请求生成查询引擎对应的目标数据查询语句;
18.调用所述查询引擎根据所述目标数据查询语句以及所述字段信息,在所述目标数据表中进行数据查询,获得所述待查询数据的目标查询结果。
19.根据本说明书实施例的第四方面,提供了一种数据查询装置,包括:
20.字段信息获取模块,被配置为根据接收的数据查询请求,获取目标数据表中历史字段的字段信息,其中,所述数据查询请求中携带有待查询数据的数据信息;
21.查询语句获取模块,被配置为根据预设的处理规则对该数据查询请求进行处理,获得初始数据查询语句;
22.查询语句生成模块,被配置为在确定存在查询引擎,且所述初始数据查询语句满足预设检索条件的情况下,根据所述初始数据查询请求生成查询引擎对应的目标数据查询语句;
23.查询结果获取模块,被配置为调用所述查询引擎根据所述目标数据查询语句以及所述字段信息,在所述目标数据表中进行数据查询,获得所述待查询数据的目标查询结果。
24.根据本说明书实施例的第五方面,提供了一种计算设备,包括:
25.存储器和处理器;
26.所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该计算机可执行指令被处理器执行时实现上述数据存储方法的步骤或实现上述数据查询方法的步骤。
27.根据本说明书实施例的第六方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该指令被处理器执行时实现上述数据存储方法的步骤或实现上述数据查询方法的步骤。
28.根据本说明书实施例的第七方面,提供了一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行实现上述数据存储方法的步骤或实现上述数据查询方法的步骤。
29.本说明书实施例,通过根据新增字段的字段信息,确定所述新增字段对应的业务模型;获取所述业务模型对应的目标数据表中历史字段的字段信息,其中,所述目标数据表包括索引字段区域以及非索引字段区域;在确定所述新增字段为索引字段的情况下,根据所述目标数据表中历史字段的字段信息,在所述索引字段区域确定所述新增字段的存储位置。
30.具体的,本说明书通过将索引字段与非索引字段存储在同一数据表对应的索引字段区域以及非索引字段区域中,避免了在进行非索引字段数据的修改时,还需要同步修改对应的索引表的问题,减少了数据库操作的复杂度;并且通过本说明书提供的数据存储方法,可以在后续进行数据查询时提高数据查询的执行效率。
附图说明
31.图1是本说明书实施例提供的一种元数据驱动架构模型图;
32.图2是本说明书实施例提供的另一种元数据驱动架构模型图;
33.图3是本说明书实施例提供的一种数据存储方法的流程图;
34.图4是本说明书实施例提供的一种数据存储方法中的一种模型结构图;
35.图5是本说明书实施例提供的一种数据存储方法中的宽表字段分布图;
36.图6是本说明书实施例提供的一种数据存储方法中的新增字段流程图;
37.图7是本说明书实施例提供的一种数据存储方法中的字段变更流程图;
38.图8是本说明书实施例提供的一种数据查询方法的流程图;
39.图9是本说明书实施例提供的一种数据查询方法的处理流程图;
40.图10是本说明书实施例提供的一种数据查询方法的具体处理流程图;
41.图11是本说明书实施例提供的一种数据表中数据存储方法的流程图;
42.图12是本说明书实施例提供的一种数据存储装置的结构示意图;
43.图13是本说明书实施例提供的一种数据查询装置的结构示意图;
44.图14是本说明书实施例提供的一种计算设备的结构框图。
具体实施方式
45.在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。
46.在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出业务的任何或所有可能组合。
47.应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
48.首先,对本说明书一个或多个实施例涉及的名词术语进行解释。
49.元数据驱动结构:一种软件设计架构,通过合理的抽象存储层模型,来解决底层存储模型不变的情况下,支持业务模型动态扩展的问题。
50.业务模型:也称企业模型,为企业提供一个框架结构,以确保企业的应用系统与企业经常改进的业务流程紧密匹配。其包括组织视图、数据视图、功能视图、控制视图。
51.宽表存储模型:一种元数据驱动架构底层存储模型的实现方案。
52.objects:业务模型的定义描述信息,每个业务模型一条记录。
53.fields(字段信息表):模型字段定义。包括:字段类型、所在宽表位置、是否需要索引等。
54.data:存储每个模型的数据,具体业务字段存在哪个键值由fields表中的位置得到。
55.clob:data表中大字段存在clob中,data中存clob表中记录id。
56.relationship:模型关联关系。
57.uniquefields:存储业务模型的唯一索引字段内容。
58.indexs:索引表每个字段都建了索引。fields中标记需要索引的字段内容会存入indexs中。
59.元数据模型通过一层独立的抽象,把业务对象中具备业务含义的信息存储为对象元信息。这些元信息中描述了业务实体对象(objects)都有哪些字段,字段元信息(fields)中又定义和描述了字段的属性,包括类型,名称,编码名称等。通过模型抽象把具备业务含义的元数据,和业务对象的存储模型分离了,应用层通过封装的元数据服务访问业务对象数据,而不用关心一个业务对象的某字段存储在那一个数据表的那一个字段里,实现不影响底层的存储模型的情况下业务模型的字段可以按需动态扩展。
60.目前,业务模型(object,也即对象表)实例化之后的数据保存在宽表data中,因为data宽表设置多个字段都为可变字符类型,对于不同类型的数据存储非常灵活,但同一个键值位置字段,针对不同的业务对象,存储内容对应的数据类型不同,不能利用底层数据库索引的能力对其进行排序,并且字符串按照ascii进行排序,可能出现例如“12”《“2”的错误结果。
61.基于这种数据宽表+索引表的设计,当业务模型中有多个字段(比如:n个)时,data表每新增一条记录,需要在索引表增加n条记录(修改类似)。当多个字段需要同时检索时,需要indexes进行自关联查询,不仅实现复杂而且随着查询条件增多时会变慢。如果想提升需要专门的优化投入,辅助模型、高性能数据库、专家等各方面,成本巨大,实际落地方面劝退绝大部分企业开发;因此,现有技术中通过增加索引表(indexes)、唯一索引表(unique-fields),实现常规数据表上的索引效果。
62.参见图1,图1是本说明书实施例提供的一种元数据驱动架构模型图,其具体包括以下内容。
63.其中,该模型包括对象表(objects)、字段信息表(fields)、数据表(data)、字符大对象表(clobs)、索引表(indexes)、唯一索引字段表(uniquefields)、关联关系表(relationships)。其中,该对象表与字段信息表都是由对应于数据表的元数据组成。其中,该对象id、组织id、对象名称、字段id、字段名称、数据类型、字段号、索引标识、数据id、名称、键值0可变字符类型、键值1可变字符类型、键值2可变字符类型、键值29可变字符类型、键值30数字类型、键值31数字类型、键值59数字类型、键值499可变字符类型、键值、可变字符类型键值、数字类型键值、关系id、目标对象id均表示对象表(objects)、字段信息表(fields)、数据表(data)、字符大对象表(clobs)、索引表(indexes)、唯一索引字段表(uniquefields)、关联关系表(relationships)中不同的字段。其表中对应的字段以及结构关系如图1所示。
64.在一种实现方式中,采用图1中的模型构建方法进行数据查询,也即是,在数据表中,索引表/唯一索引表数据量=1:n,即索引表中每条记录,对应data一条记录中需要索引的某一列的值信息。其优点在于新增模型字段分配算法比较简单,按顺序即可,并且原则上对象的所有字段都可以支持建索引,然而这种实现方式在检索多个索引字段情况下,需要索引表自关联查询,并且因为索引表数据量n倍于data表,需要专门的优化以及高性能数据库。
65.参见图2,图2是本说明书实施例提供的另一种元数据驱动架构模型图,其具体包括以下内容。
66.其中,该模型包括对象表(objects)、字段信息表(fields)、数据表(data)、字符大对象表(clobs)、索引表(indexes)、唯一索引字段表(uniquefields)、关联关系表(relationships),其中,该对象表与字段信息表都是由对应于数据表的元数据组成。其表中对应的字段以及结构关系如图2所示,参见图1中对字段的描述,在此不对图2各表所包含的字段进行赘述。
67.在一种实现方式中,可以采用对索引表的列进行横向扩充的方式,data表:索引表/唯一索引表数据量=1:1,即索引表的字段结构通data类似,索引表也提供x列(x不超过数据库索引的最大数量,例如:取60列),每一列都提前建好索引,一个业务模型的记录数据在data中保存,同时模型中所有索引字段的内容在索引表存在一份。其优点在于当检索涉及多个索引字段时,一次性在索引表完成检索,不需要自关联查询嵌套,同时索引表数据量逻辑上只有第一种方案的1/n(n是具体业务模型需要索引字段的数量)。并且涉及多索引字段的检索可以利用数据库的indexmerge技术,该方案效率有一定提升。然而通过这种实现方式,业务需要索引字段数量设置在合理的范围内(关系型数据库索引书都有上限,如mysql《=64个),同时针对字段类型变更,还需要配套开发索引重建的服务,依赖专门的中间件等,并且非索引字段或文本的模糊搜索,检索效率较差。
68.为解决上述技术问题,在本说明书中提供了一种数据存储方法,本说明书同时涉及一种数据存储装置,一种数据查询方法,一种数据查询装置,一种计算设备,以及一种计算机可读存储介质,在下面的实施例中逐一进行详细说明。
69.参见图3,图3示出了根据本说明书一个实施例提供的一种数据存储方法的流程图,具体包括以下步骤。
70.步骤302:根据新增字段的字段信息,确定所述新增字段对应的业务模型。
71.其中,字段信息包括但不限于该新增字段的字段类型、字段来源、业务模型信息等。
72.该新增字段可以理解为在表中新增的列;例如,在本说明书提供的数据存储方法应用于新增订单号场景的情况下,该新增字段可以为“订单id”;对应的,字段信息可以为该列能够存储的数据的类型,例如,数字类型,对应的该业务模型可以为订单模型。
73.具体的,根据新增字段的字段信息,确定所述新增字段对应的业务模型可以理解为:根据该新增字段的字段信息中的业务模型信息,确定该新增字段对应的业务模型。
74.参见图4,图4示出了根据本说明书一个实施例提供的一种数据存储方法中的一种模型结构图。
75.其中,该模型包括对象表(objects)、字段信息表(fields)、数据表(data)、字符大对象表(clobs)、索引表(indexes)、唯一索引字段表(uniquefields)、关联关系表(relationships),其中,该对象表与字段信息表由元数据构成,并且该元数据是对应于数据表的数据。其表中对应的字段以及结构关系如图所示。参见图1中对字段的描述,在此不对图4中各表所包含的字段进行赘述。
76.具体的,非单个字段键值0-键值59建立索引字段,所有的索引都会结合对象id,例如对象id和键值0组成唯一索引字段,对象id和键值59组成普通索引字段。
77.此外,本说明书在基于构建单独的索引表、唯一索引表会增加操作的复杂度、增加优化成本等问题的情况下,为了优化上述出现的问题,将索引表、唯一索引表设置为废弃模
型。
78.步骤304:获取所述业务模型对应的目标数据表中历史字段的字段信息,其中,所述目标数据表包括索引字段区域以及非索引字段区域。
79.沿用上例,该获取所述业务模型对应的目标数据表中历史字段的字段信息,可以理解为图4中的加载字段所属业务模型其他字段field信息。
80.其中,历史字段的字段信息可以理解为在进行新增字段操作之前,目标数据表中已有字段的字段信息,且历史字段的字段信息可以为空。
81.索引字段区域可以理解为该区域字段的字段类型为索引字段的区域,其包括唯一索引字段区域(第一类型索引字段区域)、普通索引字段区域(第二类型索引字段区域)等。
82.具体的,获取所述业务模型对应的目标数据表中历史字段的字段信息可以理解为:根据该新增字段对应的业务模型确定该新增字段对应的目标数据表,再从该业务模型对应的字段信息表中获取该目标数据表中已有字段的字段信息。
83.参见图5,图5示出了根据本说明书一个实施例提供的一种数据存储方法中的宽表字段分布图。
84.在一种实现方式中,该目标数据表可以为预先构建的宽表数据表,并且可以在构建时预先划分出该目标数据表中索引区域与非索引区域分别对应的键值(value),例如划分该目标数据表中的键值为500(即图5中500个宽字段value0-value499),其对应的索引区域为键值的0-59(即图5中索引区域的60个字段),且其键值的0-29使用数字类型,并提供10个唯一索引字段(第一类型索引字段),40个普通索引字段(第二类型索引字段),其键值的30-59使用可变字符类型,提供10个唯一索引(第一类型索引字段),20个普通索引(第二类型索引字段),而键值的60-499则作为普通字段(非索引字段),该目标数据表中字段的划分可以根据实际应用进行设置,并且在后续的使用时,在字段不足的情况下仍可以进行添加,本说明书在此不作任何限定。
85.基于上述图4和图5,本说明书废弃独立索引表,对宽表(即目标数据表)列进行分类,对于索引提前建立索引、唯一索引,且数量之和不超过使用数据库本身的限制。
86.此外,在进行字段信息获取的情况下,需要从该目标数据表对应的字段信息表中获取该目标数据表中已有字段的字段信息,并在将新增字段添加至目标数据表之后,还需要将新增字段的字段信息记录到该字段信息表中,从而便于后续的信息查询。其具体实现方式如下所示:
87.所述获取所述业务模型对应的目标数据表中历史字段的字段信息,包括:
88.确定所述业务模型对应的字段信息表;
89.从所述字段信息表中获取所述业务模型对应的目标数据表中历史字段的字段信息;
90.相应地,所述根据所述目标数据表中历史字段的字段信息在所述索引字段区域确定所述新增字段的存储位置之后,还包括:
91.将所述新增字段的字段信息以及所述新增字段的存储位置,记录至所述字段信息表中。
92.其中,该存储位置可以理解为该新增字段可添加至目标数据表中的键值位置。
93.具体的,根据该业务模型确定其对应的字段信息表,再从字段信息表中获取该业
务模型对应的目标数据表中各字段的字段信息、各字段对应的位置信息等,而在完成新增字段的存储位置的确定后,将确定的存储位置记录至字段信息表中,使得后续在进行字段信息的获取时更加的方便快捷。
94.步骤306:在确定所述新增字段为索引字段的情况下,根据所述目标数据表中历史字段的字段信息,在所述索引字段区域确定所述新增字段的存储位置。
95.沿用上例,该在确定所述新增字段为索引字段的情况下,根据所述目标数据表中历史字段的字段信息,在所述索引字段区域确定所述新增字段的存储位置,可以理解为图4中的在该新增字段需要检索的时,从data表的索引字段空闲位置按序分配。
96.其中,该索引字段可以理解为构建了索引约束的字段。
97.具体的,在确定所述新增字段为索引字段的情况下,根据所述目标数据表中历史字段的字段信息,在所述索引字段区域确定所述新增字段的存储位置可以理解为:根据该新增字段的字段信息,确定该新增字段是否需要作为索引字段,在确定该新增字段为索引字段的情况下,根据该目标数据表中历史字段的字段信息,确定该新增字段可分配的位置,根据该可分配位置,在该可分配位置的索引字段区域确定该新增字段的存储位置。
98.此外,在可分配位置的索引字段区域确定该新增字段的存储位置之前,需要确定该索引字段区域是否存在空闲索引字段区域,在存在空闲索引字段区域的情况下,在该空闲索引字段区域按序分配,而在不存在空闲索引字段区域的情况下,则需要为该新增字段增加对应的索引字段区域,从而确保该新增字段可以存入该目标数据表的对应位置。其具体实现方式如下所示。
99.所述根据所述目标数据表中历史字段的字段信息,在所述索引字段区域确定所述新增字段的存储位置,包括:
100.在根据所述目标数据表中历史字段的字段信息,确定所述索引字段区域存在空闲存储位置的情况下,在所述空闲存储位置确定所述新增字段的存储位置;或者
101.在根据所述目标数据表中历史字段的字段信息,确定所述索引字段区域不存在空闲存储位置的情况下,在所述索引字段区域为所述新增字段增加对应的存储位置。
102.其中,该空闲存储位置可以理解为目标数据表中除历史字段所在键值位置之外的区域。
103.在一种实现方式中,在根据该目标数据表中历史字段的字段信息,确定该目标数据表的索引字段区域存在空闲存储位置的情况下,可以根据将该空闲存储位置键值的第一个空闲存储位置确定为该新增字段的存储位置,或者可以将该空闲存储位置的任一空闲存储位置确定为该新增字段的存储位置,存储位置的确定可以根据实际应用进行设定,在此不作任何限定。
104.在另一种实现方式中,在根据该目标数据表中历史字段的字段信息,确定该目标数据表的索引字段区域不存在空闲存储位置的情况下,可以在非索引区域的空闲存储位置创建空闲索引字段存储区域,将该空闲索引字段存储区域确定为该新增字段对应的存储位置,或者在该目标数据表的索引字段区域的与非索引区域之间新增空闲索引字段存储区域,作为该新增字段对应的存储位置,存储位置的新增可以根据实际应用进行设定,在此不作任何限定。
105.此外,在进行新增字段的类型判断时,还需要判断该新增字段是否需要唯一性约
束,从而保证该字段不会有重复的数据。其具体实现方式如下所示:
106.所述在确定所述新增字段为索引字段的情况下,根据所述目标数据表中历史字段的字段信息在所述索引字段区域确定所述新增字段的存储位置,包括:
107.在确定所述新增字段为索引字段,且所述新增字段为第一类型索引字段的情况下,根据所述目标数据表中的字段信息,在所述索引字段区域的第一类型索引字段区域,确定所述新增字段的存储位置;或者
108.在确定所述新增字段为索引字段,且所述新增字段为第二类型索引字段的情况下,根据所述目标数据表中的字段信息,在所述索引字段区域的第二类型索引字段区域,确定所述新增字段的存储位置。
109.其中,第一类型索引字段可以理解为唯一索引字段,对应的,第一类型索引字段区域可以理解为第一类型索引字段所在的字段位置组成的区域;第二类型索引字段可以理解为除唯一索引字段之外的其他索引字段(即普通索引字段),对应的,第二类型索引字段区域可以理解为第二类型索引字段所在的字段位置组成的区域。
110.具体的,在确定该新增字段为索引字段的情况下,判断该新增字段是否需要唯一性约束,若确定该新增字段需要唯一性约束,则确定该新增字段为唯一索引字段(第一类型索引字段),其可分配索引区域为唯一索引字段区域,再根据该目标数据表中历史字段的字段信息,在该唯一索引字段区域的空闲字段区域,确定该新增字段的存储位置;而在确定该新增字段不需要唯一性约束的情况下,则确定该新增字段为普通索引字段(第二类型索引字段),其可分配索引区域为普通索引字段区域,再根据该目标数据表中历史字段的字段信息,在该普通索引字段区域的空闲字段区域,确定该新增字段的存储位置。
111.需要说明的是,该新增字段的存储位置的确定方法与新增方法,与上述实施例中的新增字段的确定方法与新增方法相同,在此不再过多赘述。
112.此外,在确定该新增字段为非索引字段的情况下,则在非索引字段区域确定该新增字段的存储位置,从而可以确保数据都可以快速存储在目标数据表中。其具体实现方式如下所示:
113.所述获取所述业务模型对应的目标数据表中历史字段的字段信息之后,还包括:
114.在确定所述新增字段为非索引字段的情况下,根据所述目标数据表中的字段信息,在所述非索引字段区域确定所述新增字段的存储位置。
115.具体的,在确定所述新增字段为非索引字段的情况下,根据所述目标数据表中历史字段的字段信息,在所述非索引字段区域确定所述新增字段的存储位置可以理解为:对该新增字段是否需要索引约束进行判断,在确定该新增字段无需索引约束的情况下,则确定该新增字段为非索引字段,其对应的存储位置为非索引区域,再根据该目标数据中历史字段的字段信息,在该目标数据表的非索引字段区域确定该新增字段存储位置。
116.此外,在可分配位置的非索引字段区域确定该新增字段的存储位置之前,需要确定该非索引字段区域是否存在空闲非索引字段区域,在存在空闲非索引字段区域的情况下,在该空闲非索引字段区域按序分配,而在不存在空闲非索引字段区域的情况下,则需要为该新增字段增加对应的非索引字段区域,从而确保该新增字段可以存入该目标数据表的对应位置。其具体实现方式如下所示:
117.所述根据所述目标数据表中的字段信息,在所述非索引字段区域确定所述新增字
段的存储位置,包括:
118.在根据所述目标数据表中的字段信息,确定所述非索引字段区域存在空闲存储位置的情况下,在所述空闲存储位置确定所述新增字段的存储位置;或者
119.在根据所述目标数据表中历史字段的字段信息,确定所述非索引字段区域不存在空闲存储位置的情况下,在所述非索引字段区域为所述新增字段增加对应的存储位置。
120.在一种实现方式中,在根据该目标数据表中历史字段的字段信息,确定该目标数据表的非索引字段区域存在空闲存储位置的情况下,可以根据将该空闲存储位置键值的第一个空闲存储位置确定为该新增字段的存储位置,或者可以将该空闲存储位置的任一空闲存储位置确定为该新增字段的存储位置,存储位置的确定可以根据实际应用进行设定,在此不作任何限定。
121.在另一种实现方式中,在根据该目标数据表中历史字段的字段信息,确定该目标数据表的非索引字段区域不存在空闲存储位置的情况下,可以在目标数据表中创建空闲非索引字段存储区域,将该空闲非索引字段存储区域确定为该新增字段对应的存储位置,或者在该目标数据表的索引字段区域的与非索引区域之间新增空闲非索引字段存储区域,作为该新增字段对应的存储位置,存储位置的新增可以根据实际应用进行设定,在此不作任何限定。
122.下面以本说明书提供的数据存储方法在基于元数据区域架构宽表模式的场景下的应用为例,对根据新增字段的字段信息新增字段对应的业务模型做进一步说明。
123.参见图6,图6示出了根据本说明书一个实施例提供的一种数据存储方法中的新增字段流程图。具体步骤如下所示:
124.步骤602:新增字段,即响应于字段新增请求。
125.其中,新增字段即为服务器确定表中新增加的列所能够存储的数据的类型。
126.步骤604:复制一份业务模型对象信息对象表,版本号加1,状态为草稿。
127.具体的,复制一份业务模型对象信息对象表(即object表),并将复制后的对象表的版本号加1,并将该复制后的对象表的状态设置为草稿,后续的操作都在该复制后的对象表中进行。
128.步骤606:加载字段所属项目模型对应的数据表中已有字段的字段信息。
129.具体的,获取该业务模型对应的数据表(即data表)中历史字段的字段信息。
130.步骤608:字段是否需要检索,即判断该新增字段是否为索引字段。
131.若否,则执行步骤612;若是,则执行步骤610。
132.步骤610:是否需要唯一性,即判断该新增字段是否需要唯一性约束。
133.若是,则执行步骤614;若否,则执行步骤616。
134.步骤612:从数据表的普通字段空闲位置按序分配。
135.步骤614:从数据表唯一索引字段空闲位置按序分配。
136.步骤616:从数据表的索引字段空闲位置按序分配。
137.步骤618:记录字段以及位置信息到字段信息表。
138.步骤620:对象状态从草稿改为生效,当前生效版本状态改为下线。
139.具体的,将复制后的对象表的状态从草稿状态设置为生效状态,并将当前生效状态的对象表的状态设置为下线。
140.步骤622:结束,即完成字段的新增。
141.上述步骤602-622的具体细节均可参见上述数据存储方法的实施例,在此不再赘述。
142.而在确定新增字段的存储位置之后,可能有字段的类型变更的情况出现,因此,需要针对字段的变更进行字段存储位置以及字段类型的变更,以减少数据库操作的复杂度。其具体实现方式如下所示:
143.所述根据所述目标数据表中的字段信息,在所述索引字段区域确定所述新增字段的存储位置之后,还包括:
144.接收字段变更请求,在确定所述字段变更请求为将待变更字段变更为索引字段的情况下,确定待变更字段在所述索引字段区域的目标存储位置,其中,所述待变更字段为非索引字段;
145.在确定所述待变更字段已有存量数据的情况下,将所述存量数据从所述待变更字段的当前存储位置复制到所述目标存储位置;
146.在确定所述当前存储位置的存量数据与所述目标存储位置的存量数据一致的情况下,删除所述当前存储位置的存量数据,并在所述字段信息表中更新所述待变更字段的字段信息。
147.其中,字段变更请求中包括但不限于:待变更字段的字段类型、待变更字段对应的目标数据库等。
148.存量数据可以理解为:待变更字段在某一时间节点前所保有的数据。
149.下面以本说明书提供的数据存储方法在基于元数据区域架构宽表模式的场景下的应用为例,对模型字段变更对应的过程做进一步说明。
150.参见图7,图7示出了根据本说明书一个实施例提供的一种数据存储方法中的字段变更流程图。具体步骤如下所示:
151.步骤702:字段变更,即响应于字段变更请求。
152.步骤704:复制一份业务模型对象信息表,版本号加1,状态为草稿。
153.具体的,复制一份业务模型对象信息对象表(即object表),并将复制后的对象表的版本号加1,并将该复制后的对象表的状态设置为草稿,后续的操作都在该复制后的对象表中进行。
154.步骤706:是否变为索引,即判断该待变更字段是否需要变更为索引字段。
155.若是,则执行步骤708,;若否,则执行步骤710。
156.步骤708:加载字段所属业务模型对应的数据表中已有字段的字段信息。
157.步骤710:更新字段信息到字段信息表。
158.步骤712:是否变为唯一性,也即判断该待变更字段是否需要唯一性索引。
159.若否,则执行步骤716;若是,则执行步骤714。
160.步骤714:检查该字段的数据是否满足唯一性。
161.若是,则执行步骤716;若否,则执行步骤728。
162.步骤716:从数据表唯一索引字段空闲位置按序分配。
163.步骤718:字段是否已有存量数据,即判断该待变更字段的位置是否已有存量数据。
164.若是,则执行步骤720,;若否,则执行步骤722。
165.步骤720:复制对象该字段旧位置不为空的数据到新位置,复制次数加1。
166.步骤722:字段新旧位置数据是否一致,即判断该待变更字段新旧位置数据是否一致,也即待变更字段旧位置的数据是否已复制到新位置。
167.若是,则执行步骤724;若否,则执行步骤726。
168.步骤724:复制次数是否小于2,即将判断该待变更字段的复制次数是否小于2。
169.若是,则执行步骤720;若否,则执行步骤728。
170.步骤726:清理对象该字段旧位置的数据。
171.步骤728:提示用户变更失败。
172.具体的,向用户发送字段变更失败通知,并可以通过人工介入的方式,手动变更。
173.步骤730:更新字段信息到字段信息表。
174.步骤732:对象状态从草稿状态改为生效,当前生效版本状态改为下线。
175.具体的,将复制后的对象表的状态从草稿状态设置为生效状态,并将当前生效状态的对象表的状态设置为下线。
176.步骤734:结束,即完成待变更字段的变更。
177.在一种实现方式中,在接收到字段变更的指令时,复制一份业务模型对象信息object表,并将复制出来的对象表的版本号加1,同时将该对象表的状态设置为草稿,判断该待变更字段是否变更为需要索引约束,也即是否变更为索引字段,若否则在该待变更字段对应的业务模型对应的field表(字段信息表)中更新该待变更字段的字段信息,再将该复制出来的对象表从草稿状态变更为生效,同时将原对象表的状态设置为下线,完成字段的变更;若需要将待变更字段变更为索引字段,则加载该待变更字段所属业务模型中已有的所有字段的字段信息,再判断该待变更字段是否需要唯一性约束,若不需要唯一性约束则从data表(目标数据表)的索引字段空闲位置按序分配;若需要唯一性约束则检查该待变更字段的数据是否满足唯一性约束,若不满足唯一性约束,则提示用户变更失败,并由技术人员介入进行字段的变更,若满足唯一性约束则从data表唯一索引字段空闲位置按序分配;再判断该字段是否已有存量数据,若不存在存量数据的情况下,则清理该待变更字段旧位置的数据,若存在存量数据的情况下,则复制该待变更字段旧位置不为空的数据到新位置(目标存储位置),同时将该待变更字段的复制次数加1;再判断该待变更字段新位置与旧位置的数据是否一致,若一致则清理该待变更字段旧位置的数据,再将该复制出来的对象表从草稿状态变更为生效,同时将原对象表的状态设置为下线,完成字段的变更;若不一致则判断该该待变更字段的复制次数是否小于2,若小于2则继续执行复制该待变更字段旧位置不为空的数据到新位置(目标存储位置),同时将该待变更字段的复制次数加1;若该复制次数大于等于2则提示用户变更失败,并由技术人员介入进行字段的变更;在清理该待变更字段旧位置的数据后,在该待变更字段对应的业务模型对应的field表(字段信息表)中更新该待变更字段的字段信息,再将该复制出来的对象表从草稿状态变更为生效,同时将原对象表的状态设置为下线,完成字段的变更。
178.具体的,在接收到字段变更请求之后,需要复制一份对象表(object表)作为草稿,从而便于后续可以在该复制的对象表中进行字段的变更操作,从而在不影响原对象表使用的情况下,完成字段的变更操作。其具体实现方式如下所示:
179.所述接收字段变更请求之后,还包括:
180.复制所述待变更字段对应的业务模型的第一对象表作为初始对象表,并将所述初始对象表的状态设置为草稿状态;
181.相应地,所述在所述字段信息表中更新所述待变更字段的字段信息之后,还包括:
182.将所述变更后的初始对象表作为目标对象表,并将所述目标对象表的状态确定为生效,同时下线所述第一对象表。
183.具体的,复制该待变更字段对应的业务模型的第一对象表,将复制后的对象表作为初始对象表,并将该初始对象表的版本号加1,同时将该初始对象表的状态设置为草稿状态,从而在进行后续的字段变更的操作时,都可以在该初始对象表中进行,而不影响第一对象表的使用;再待变更字段变更完成后则将变更后的初始对象表作为目标对象表,再下线第一对象表,同时将该目标对象表的状态设置为生效,替换第一对象表使用。
184.此外,在待变更字段为索引字段或非索引字段,并请求变更为非索引字段时,则可以直接确定该待变更字段的目标存储位置并存储即可。其具体实现方式如下所示:
185.所述接收字段变更请求之后,还包括:
186.在确定所述字段变更请求为将所述待变更字段变更为非索引字段的情况下,确定所述待变更字段在所述非索引字段区域的目标存储位置,其中,所述待变更字段包括索引字段或非索引字段。
187.具体的,在确定该字段变更请求为将该待变更字段(索引字段或非索引字段)变更为非索引字段的情况下,则确定该目标数据库中确定该待变更字段的可分配区域为非索引区域,则在该非索引区域中确定该待变更字段的空闲可分配区域,在该空闲可分配区域中确定该待变更字段的目标存储位置。
188.在进行待变更字段在索引字段区域的目标存储位置的确定时,需要根据该待变更字段的字段信息等,确定该待变更字段的变更方式。其具体实现方式如下所示:
189.所述确定待变更字段在所述索引字段区域的目标存储位置,包括:
190.从所述待变更字段的业务模型对应的字段信息表中,获取所述待变更字段的业务模型对应的目标数据表中历史字段的字段信息;
191.在确定所述字段变更请求为将所述待变更字段变更为第一类型索引字段,并且所述待变更字段确定为第一类型索引字段的情况下,根据所述目标数据表中历史字段的字段信息,在所述索引字段区域的第一类型索引字段区域确定所述待变更字段的目标存储位置;或者
192.在确定所述字段变更请求为将所述待变更字段变更为第二类型索引字段的情况下,根据所述目标数据表中历史字段的字段信息,在所述索引字段区域的第二类型索引字段区域确定所述待变更字段的目标存储位置。
193.在一种实现方式中,从该待变更字段的业务模型对应的字段信息表中,获取该待变更字段的业务模型对应的目标数据表中历史字段的字段信息,对该字段变更请求进行解析,在确定该待变更字段需要变更为唯一索引字段(第一类型索引字段)并且满足唯一性约束的情况下,根据该目标数据表中历史字段的字段信息,在该索引字段区域的唯一索引字段区域确定该待变更字段的可分配空闲区域,将该可分配空闲区域的第一个键值确定为该待变更字段的目标存储位置,或者将该可分配空闲区域的任一键值确定为该待变更字段的
目标存储位置,目标存储位置的确定可以根据实际应用进行设置,在此不作具体限定。
194.在另一种实现方式中,从该待变更字段的业务模型对应的字段信息表中,获取该待变更字段的业务模型对应的目标数据表中历史字段的字段信息,对该字段变更请求进行解析,在确定该待变更字段仅需变更为普通索引字段(第二类型索引字段)的情况下,根据该目标数据表中历史字段的字段信息,在该索引字段区域的普通索引字段区域确定该待变更字段的可分配空闲区域,将该可分配空闲区域的第一个键值确定为该待变更字段的目标存储位置,或者将该可分配空闲区域的任一键值确定为该待变更字段的目标存储位置,目标存储位置的确定可以根据实际应用进行设置,在此不作具体限定。
195.需要说明的是,在该待变更字段不满足唯一性约束的情况下,会发送字段变更失败的消息,再由技术人员对该变更失败的问题进行处理。
196.而在对该待变更字段的目标存储位置进行确定后,还需要判断该待变更字段在进行变更时是否有存量数据,也即在进行该待变更字段的字段变更操作时,是否有新的数据存入,如果有则需要将该存量数据一起变更到目标存储位置,从而保证数据不会丢失。其具体实现方式如下所示:
197.所述将所述存量数据从所述待变更字段的当前存储位置复制到所述目标存储位置之后,还包括:
198.在确定所述当前存储位置的存量数据与所述目标存储位置的存量数据不一致、并且当前复制次数小于预设次数阈值的情况下,继续执行将所述存量数据从所述待变更字段的当前存储位置复制到所述目标存储位置的步骤。
199.在一种实现方式中,在确定该待变更字段存在存量数据的情况下,复制该待变更字段旧位置(当前所在位置)不为空的数据到新位置(目标存储位置),并将该待变更字段的复制次数加1,判断该待变更字段的旧位置与新位置的数据是否一致,在确定该待变更字段的旧位置与新位置的数据不一致的情况下,判断该待变更字段的复制次数是否小于预设次数阈值,若否则重复执行,复制该待变更字段旧位置(当前所在位置)不为空的数据到新位置(目标存储位置),并将待变更字段的复制次数加1,直到在确定该待变更字段的旧位置与新位置的数据一致的情况下,清理该待变更字段旧位置的数据,并将变更后的待变更字段的字段信息记录至字段信息表中,再将变更后的初始对象表作为目标对象表,下线第一对象表,同时将该目标对象表的状态设置为生效,替换第一对象表使用,其中所述预设。
200.在另一种实现方式中,在确定该待变更字段存在存量数据的情况下,复制该待变更字段旧位置(当前所在位置)不为空的数据到新位置(目标存储位置),并将该待变更字段的复制次数加1,判断该待变更字段的旧位置与新位置的数据是否一致,在确定该待变更字段的旧位置与新位置的数据一致的情况下,清理该待变更字段旧位置的数据,并将变更后的待变更字段的字段信息记录至字段信息表中,再将变更后的初始对象表作为目标对象表,下线第一对象表,同时将该目标对象表的状态设置为生效,替换第一对象表使用。
201.需要说明的是,在复制次数大于等于预设次数阈值的情况下,会发送字段变更失败的消息,然后由技术人员对该变更失败的问题进行处理。
202.本说明书实施例,通过根据新增字段的字段信息,确定所述新增字段对应的业务模型;获取所述业务模型对应的目标数据表中历史字段的字段信息,其中,所述目标数据表包括索引字段区域以及非索引字段区域;在确定所述新增字段为索引字段的情况下,根据
所述目标数据表中历史字段的字段信息,在所述索引字段区域确定所述新增字段的存储位置。
203.具体的,本说明书通过将索引字段与非索引字段存储在同一数据表中,避免了在进行非索引字段数据的修改时,还需要同步修改对应的索引表的问题,减少了数据库操作的复杂度;并且通过本说明书提供的数据存储方法,可以在后续进行数据查询时提高数据查询的执行效率。
204.在业务模型新增、变更字段的过程中,根据业务对该字段的要求(需要构建索引、唯一性约束等)自动从目标数据表中计算合理的存储位置并保存。
205.此外,针对业务字段变更涉及不同类型列之间变动时,提供自动进行数据迁移和结果比对的能力(可以根据业务情况设置一定的条件触发非自动迁移),利用数据库自身机制完成索引建立,相比独立的索引表架构减少了工程化方式进行索引重建工作。并引入模型版本机制,针对变更中的模型不影响线上版本正常使用。
206.参见图8,图8示出了根据本说明书一个实施例提供的一种数据查询方法的流程图,具体包括以下步骤。
207.步骤802:根据接收的数据查询请求,获取目标数据表中历史字段的字段信息,其中,所述数据查询请求中携带有待查询数据的数据信息。
208.其中,所述数据查询请求包括但不限于待查询数据的数据信息、数据查询请求发送时间等。
209.具体的,根据接收的数据查询请求,获取目标数据表中历史字段的字段信息可以理解为:根据接收到的数据查询请求中的待查询数据的数据信息中,待查询数据所在数据库信息,确定该待查询数据对应的目标数据表,再获取该目标数据表中历史字段的字段信息。
210.步骤804:根据预设的处理规则对该数据查询请求进行处理,获得初始数据查询语句。
211.其中,预设的处理规则为将数据查询请求处理成为数据库的存储键值对应的查询语句的规则。
212.初始数据查询语句可以理解为经预设处理规则处理后生成的数据库存储键值对应的查询语句。
213.具体的,根据预设的处理规则对该数据查询请求进行处理,获得初始数据查询语句可以理解为:根据预先设置的处理规则将数据查询请求中对应的数据字段转换为数据库存储对应的键值字段,并获得初始数据查询语句,其中,该预设的处理规则可以根据实际应用进行设置,在此不作任何限定;例如在数据查询请求为查询目标数据表为“订单表”中的“订单id”列的情况下,根据预设的处理规则获取“订单id”对应的键值为键值10,则将数据查询请求处理为查询“订单表”中键值10的数据。
214.此外,在获得初始数据查询语句之后,需要确定是否配置查询引擎模式,从而确定对应的数据查询方式,避免因不同查询方式导致查询效率过低,使得用户体验不佳。其具体实现方式如下所示:
215.所述获得初始数据查询语句之后,还包括:
216.在确定不存在所述查询引擎的情况下,根据所述初始数据查询条件生成目标查询
语句;
217.根据所述目标查询语句在数据库中执行所述目标查询语句,获得所述目标查询结果。
218.其中,所述查询引擎为预先设置,在存在复杂查询语句、模糊查询等情况下,提升数据查询的检索效率,降低时效性。
219.具体的,在确定不存在查询引擎的情况下,基于初始数据查询请求,生成数据库对应的数据查询语句,也即目标查询语句,再根据该目标查询语句在数据库中执行该目标查询语句,从而获取目标查询语句。
220.步骤806:在确定存在查询引擎,且所述初始数据查询语句满足预设检索条件的情况下,根据所述初始数据查询请求生成查询引擎对应的目标数据查询语句。
221.其中,预设检索条件包括但不限于:复杂的查询条件、对检索内容的时效性要求不高等条件。
222.具体的,在确定存在查询引擎并且该初始数据查询语句满足预设检索条件的情况下,根据预设的语句处理规则对该初始数据查询请求进行处理,生成查询引擎对应的目标数据查询语句,其中,该预设的语句处理规则可以根据实际应用进行设置,本说明书在此不作任何限定。
223.此外,在存在查询引擎,但不满足预设检索条件的情况下,需要针对不同的情况该初始数据查询语句进行处理,从而快速的完成后续的数据查询操作,其具体实现方式如下所示:
224.所述根据所述初始数据查询请求生成查询引擎对应的目标数据查询语句之前,还包括:
225.在确定存在查询引擎、所述初始数据查询语句不满足预设检索条件以及存在引擎查询指令的情况下,根据所述初始数据查询请求生成查询引擎对应的目标数据查询语句。
226.其中,该引擎查询指令可以理解为通过查询引擎进行数据查询的指令。并且,该查询引擎可以在特定场景下提高数据查询的效率,其中该特定场景包括对检索内容时效性要求不高的复杂条件查询场景。例如复杂查询判定,如:模糊查找like、大文本字段关键字查询等;检索内容的时效性,说明:搜索引擎索引数据建立有一定耗时,在此期间可能返回旧数据。或者满足其他自定义条件场景,例如:业务模型特殊配置要求通过查询引擎查询。
227.具体的,在确定存在查询引擎,但该初始数据查询请求不满足预设检索条件且存在引擎查询指令的情况下,则通过该预设的语句处理规则对该初始数据查询请求进行处理,生成查询引擎对应的目标数据查询请求。
228.步骤808:调用所述查询引擎根据所述目标数据查询语句以及所述字段信息进行数据查询,获得所述待查询数据的目标查询结果。
229.具体的,调用该查询引擎根据该目标数据查询语句以及待查询字段的字段信息,对待查询数据进行数据查询,获得待查询数据的初始查询结果,再根据预设的结果转换规则,对该初始查询结果进行处理,将该初始查询结果转换为业务模型对应的目标查询结果。
230.在实际应用中,该查询引擎可以理解为搜索引擎,在本说明书提供的一种数据查询方法应用于通过搜索引擎机制进行查询的场景的情况下,将data表中所有索引类型的字段内容同步到搜索引擎,对于满足一定条件的检索请求通过搜索引擎完成。并默认针对复
杂查询条件检索请求启动,也可以根据实际业务需求自行定义启动条件(支持脚本扩展)通过搜索引擎查询在架构中属于可选设计,当出问题或没有接入时候依然可以通过数据库查询。其中,该搜索引擎机制可以理解为应用查询引擎在目标数据库中进行数据查询的方式。
231.下面以本说明书提供的数据存储方法在基于元数据区域架构宽表模式的场景下的应用为例,对根据新增字段的字段信息新增字段对应的业务模型做进一步说明。
232.参见图9,图9示出了根据本说明书一个实施例提供的一种数据查询方法的处理流程图。具体步骤如下所示:
233.步骤902:发起数据查询请求。
234.步骤904:从字段信息表中加载需要检索的业务模型中所有字段的字段信息以及对象表中所有字段的字段描述信息。
235.步骤906:在该字段信息满足有效性的条件下,转义查询条件字段为宽表实际value字段,同时解析条件成sql符号。
236.步骤908:系统是否配置查询引擎,即判断当前系统是否配置搜索引擎。
237.若否,则执行步骤922;若是,则执行步骤910。
238.步骤910:是否满足预设查询条件,即判断该查询语句是否满足预设查询条件。
239.若是,则执行步骤912;若否,则执行步骤920。
240.步骤912:根据查询字段生成搜索引擎的查询语句。
241.步骤914:请求搜索引擎完成检索。
242.步骤916:将查询结果封装成业务模型结构。
243.步骤918:返回结果,即返回查询的数据。
244.步骤920:是否存在引擎查询指令,即判断该查询语句是否要求使用搜索引擎进行数据查询。
245.若是,则执行步骤912;若否,则执行步骤922。
246.步骤922:根据查询字段、sql符号以及业务模型id生成sql语句。
247.步骤924:通过数据库在数据表中执行检索。
248.在一种实现方式中,根据该数据查询请求中对应的业务模型信息,从字段信息表(field表)中获取数据查询请求对应的业务模型中的字段信息,将数据查询请求中的字段信息转换为宽表中对应的字段对应的键值(value),同时解析为数据库(sql)符号,再判断系统是否配置查询引擎(搜索引擎),若未配置查询引擎则根据查询字段、sql符号以及业务模型id生成sql语句,再通过数据库在目标数据表(data表)中进行数据查询,将查询结果转换为字段名称对应的字段名(即将查询结果封装成业务模型结构),返回结果完成数据查询;而在配置查询引擎的情况下,判断该查询语句是否满足预设查询条件,其中,该预设查询条件可以为复杂查询条件、对检索内容的时效性要求不高等,在确定该查询语句满足预设查询条件的情况下,根据该查询字段生成查询引擎对应的查询语句,请求查询引擎完成数据查询操作,将查询结果转换为字段名称对应的字段名(即将查询结果封装成业务模型结构),返回结果完成数据查询;而在不满足预设查询条件的情况下,判断该数据查询请求是否存在引擎查询条件,也即,是否要求使用查询引擎进行数据查询;在存在引擎查询条件的情况下,则根据该查询字段生成查询引擎对应的查询语句,请求查询引擎完成数据查询操作,将查询结果转换为字段名称对应的字段名(即将查询结果封装成业务模型结构),返
回结果完成数据查询;而在不存在引擎查询条件的情况下,根据数据查询请求生成数据库查询语言,同时对数据类型的字段增加转换语句,再通过数据库在目标数据表(data表)中进行数据查询,将查询结果转换为字段名称对应的字段名(即将查询结果封装成业务模型结构),返回结果完成数据查询。
249.本说明书实施例,通过根据接收的数据查询请求,获取目标数据表中历史字段的字段信息,其中,所述数据查询请求中携带有待查询数据的数据信息;根据预设的处理规则对该数据查询请求进行处理,获得初始数据查询语句;在确定存在查询引擎,且所述初始数据查询语句满足预设检索条件的情况下,根据所述初始数据查询请求生成查询引擎对应的目标数据查询语句;调用所述查询引擎根据所述目标数据查询语句以及所述字段信息,在所述目标数据表中进行数据查询,获得所述待查询数据的目标查询结果,通过本说明书实施例中的数据查询方法可以提升复杂查询条件下的数据查询的搜索效率。
250.参见图10,图10示出了根据本说明书一个实施例提供的一种数据查询方法的具体处理流程图,具体包括以下步骤。
251.步骤1002:接收数据查询请求,根据该数据查询请求获取待查询数据对应的字段信息表中历史字段的字段信息,以及对象表中历史字段的字段描述信息。
252.步骤1004:在该数据查询请求满足有效性的情况下,根据预设的处理规则对该数据查询请求进行处理,获得初始数据查询请求。
253.其中,该数据查询请求满足有效性可以理解为:该数据查询请求为满足进行数据查询要求的数据查询请求,其中,该数据查询要求可以根据实时应用进行设置,本说明书在此不作任何限定。
254.步骤1006:在确定存在查询引擎的情况下,判断该初始数据查询请求是否满足预设检索条件。
255.步骤1008:在确定该初始数据查询请求满足预设检索条件的情况下,根据预设的语句处理规则对该初始数据查询请求进行处理,生成查询引擎对应的目标数据查询语句。
256.步骤1010:调用该查询引擎根据该目标数据查询语句以及该字段信息,进行数据查询,获得初始查询结果。
257.步骤1012:根据预设的结果处理规则对该初始查询结果进行处理,获得目标查询语句。
258.上述步骤1002-1012的具体实现方式与上述实施例的数据查询方法中的具体实现方式一致,在此不再详细论述,细节均可参见上述实施例的数据查询方法。
259.在一种实现方式中,还可以将全部索引字段(普通索引字段、唯一索引字段)同步到查询引擎,将data表的字段分为普通字段、唯一索引字段,取消普通索引字段。也即将查询引擎作为架构实现的必须部分。
260.本说明书实施例提供的数据查询方法,通过根据接收的数据查询请求,获取目标数据表中历史字段的字段信息,其中,所述数据查询请求中携带有待查询数据的数据信息;根据预设的处理规则对该数据查询请求进行处理,获得初始数据查询语句;在确定存在查询引擎,且所述初始数据查询语句满足预设检索条件的情况下,根据所述初始数据查询请求生成查询引擎对应的目标数据查询语句;调用所述查询引擎根据所述目标数据查询语句以及所述字段信息,在所述目标数据表中进行数据查询,获得所述待查询数据的目标查询
结果,通过本说明书实施例中的数据查询方法可以提升复杂查询条件下的数据查询的搜索效率。
261.此外,本说明书通过模型架构调整,避免了多条件一起检索导致索引表需要自关联查询的实现的复杂且低效问题;并引入轻量级索引重建服务,避免了工程化的方式进行索引重建(也即依赖中间件监听binlog,用代码方式实现数据库的索引重建功能);并引入搜索引擎机制,企业可以根据实际需求对接(可选),用来提升复杂查询条件下的检索效率。
262.并且,本说明书精简了架构中独立索引表的设计,避免了原架构中多条件同时检索时索引表需要自关联查询,实现的复杂与低效问题;开发了宽表位置管理服务(宽字段分为三类),在不影响宽表原使用方式的前提下,充分利用数据库的原生索引能力、索引合并能力,省去额外的索引表维护与工程化索引重建开销;架构中引入了的搜索引擎模式,针对业务需要可选通过搜索引擎提升查询效率,提升了架构的适用性。
263.需要说明的是,上述数据存储方法以及数据查询方法,可以是针对于元数据的数据存储以及数据查询。
264.在通过本说明书实施例提供的数据存储方法对数据表(data表)对应的元数据表(即对象表和字段信息表)中的元数据进行存储后,还可以通过该构建好的数据宽表架构模型对数据表中的数据进行存储。
265.参见图11,图11示出了根据本说明书一个实施例提供的一种数据表数据存储方法的流程图,具体包括以下内容。
266.步骤1102:发起数据查询请求。
267.步骤1104:从字段信息表中加载需要检索的业务模型中所有字段的字段信息以及对象表所有字段的字段描述信息。
268.步骤1106:检查提交数据是否有效。
269.若否,则执行步骤1116;若是,则执行步骤1108。
270.步骤1108:根据字段信息将提交的数据转义为宽表字段value及格式。
271.步骤1110:通过数据执行保存sql。
272.步骤1112:是否配置搜索引擎,即判断系统是否配置搜索引擎。
273.若是,则执行步骤1114;若否,则执行步骤1116。
274.步骤1114:同步新增数据到搜索引擎。
275.步骤1116:返回结果,即返回通过搜索引擎查询到的数据。
276.在一种实现方式中,在接收到数据存储请求的情况下,加载该业务模型对应的字段信息表中所有字段的字段信息以及对象表中所有字段的字段描述信息,检测该数据存储请求中对应的数据内容的有效性,(也即该数据内容的字段类型、数据长度、必填项等,例如该数据内容的字段类型为日期类型,而该业务模型仅支持数字类型和可变字符类型,则不符合有效性,直接退回该数据存储请求;该数据内容的数据长度为500,而该业务模型中最大支持数据长度为200,则确定该数据内容不符合有效性,直接退回该数据存储请求;在该业务模型为用户模型的情况下,设置该用户模型对应的数据表中名字字段为必填项,而该数据存储请求中并未填写名字字段,则确定该数据存储请求不符合有效性,直接退回该数据存储请求),在确定该数据存储请求中的数据内容符合有效性的情况下,根据加载的字段信息对该数据存储请求进行数据转义,转义为宽表字段对应的键值格式,通过数据库执行
sql语句保存该数据的存储操作;再对是否配置查询引擎(搜索引擎)进行判断,在确定配置了查询引擎的情况下,同步该新增数据到查询引擎中,完成数据表中数据的存储;在确定未配置查询引擎的情况下,完成数据表中数据的存储。
277.为了便于理解,以新增张三的一张订单记录为例进行说明。
278.在一种实施例中,接收到数据存储请求,该数据存储请求中的数据内容包括:orderid:100(即订单id:100),goodsid:111(即货物id:111),username:“张三”(即用户姓名:“张三”),amount:1.00(即金额:1.00),memo:“麻烦包装好点”(即备注:“麻烦包装好点”),加载该数据内容对应的object表(即对象表)的中的字段描述信息为code:order(即代号:订单),name:订单模型(即名称:订单模型),objid:1000001(即对象id:1000001),对应的field表(即字段信息表)中的字段信息为orderid(即订单id)对应的data表(即数据表)的位置为键值0、唯一索引数字类型、必填字段,goodsid(即货物id)对应的data表的位置为键值20、普通索引数字类型、必填字段,username(即用户名称)对应的data表的位置为键值40、普通索引可变字符串类型、必填字段,amount(即金额)对应data表的位置为键值60、普通字符串位置(即普通索引字段)、必填字段,memo(即备注)对应data表的位置为键值61、普通字段串位置、可选字段;在确定上述数据内容满足有效性的情况下,根据该订单表的字段信息将该数据存储请求转义为“insert into data{objid,value0,value20,value40,value60,value61}values(1000001,100,111,’1.00’,’麻烦包装好点。’);”,在数据库中执行该数据存储语句,再对是否配置查询引擎记性判断,在确定配置了查询引擎的情况下,同步新增数据到搜索引擎,完成数据表中数据的存储;在确定未配置查询引擎的情况下,完成数据表中数据的存储。
279.相应的,在完成该数据表中数据的存储之后,还可以在该数据表中进行数据的查询,该数据表中的数据查询与上述数据查询方法类似,具体数据表中的数据查询方法可以参见上述数据查询方法。
280.为了便于理解,下面以查询张三购买过a,b商品的订单记录进行说明。
281.在一种实施例中,根据接收到的数据查询请求,该数据查询请求包括{goodsid in{a,b},username=“张三”},加载该数据查询请求对应的业务模型为订单表,该订单表对应的object表(即对象表)的中的字段描述信息为code:order(即代号:订单),name:订单模型(即名称:订单模型),objid:1000001(即对象id:1000001),对应的field表(即字段信息表)中的字段信息为orderid(即订单id)对应的data表(即数据表)的位置为键值0、唯一索引数字类型、必填字段,goodsid(即货物id)对应的data表的位置为键值20、普通索引数字类型、必填字段,username(即用户名称)对应的data表的位置为键值40、普通索引可变字符串类型、必填字段,amount(即金额)对应data表的位置为键值60、普通字符串位置(即普通索引字段)、必填字段,memo(即备注)对应data表的位置为键值61、普通字段串位置、可选字段;将该数据存储请求转义为“select id,value0,value20,value40,value60,value61 from data where objid=’1000001’and value20 in{a,b}and value40=’张三’;”,其中,根据sql语法进行转义包括但不限于:select(结果集字段)、where(过滤条件)、group by(分组条件)、order by(排序条件)、limit/top(分页条件)等;在确定配置了查询引擎且该数据查询请求满足预设查询条件的情况下,根据该数据查询请求生成查询引擎对应的查询语句,并调用该查询引擎完成数据的检索,并将查询结果转换为订单模型对应的业务模型结构,
完成数据表中数据的查询。
282.与上述方法实施例相对应,本说明书还提供了数据存储装置实施例,图12示出了本说明书一个实施例提供的一种数据存储装置的结构示意图。如图12所示,该装置包括:
283.模型确定模块1202,被配置为根据新增字段的字段信息,确定所述新增字段对应的业务模型;
284.信息获取模块1204,被配置为获取所述业务模型对应的目标数据表中历史字段的字段信息,其中,所述目标数据表包括索引字段区域以及非索引字段区域;
285.位置确定模块1206,被配置为在确定所述新增字段为索引字段的情况下,根据所述目标数据表中历史字段的字段信息,在所述索引字段区域确定所述新增字段的存储位置。
286.可选地,所述信息获取模块1204,进一步被配置为:
287.确定所述业务模型对应的字段信息表;
288.从所述字段信息表中获取所述业务模型对应的目标数据表中历史字段的字段信息;
289.相应地,所述根据所述目标数据表中历史字段的字段信息在所述索引字段区域确定所述新增字段的存储位置之后,还包括:
290.将所述新增字段的字段信息以及所述新增字段的存储位置,记录至所述字段信息表中。
291.可选地,所述位置确定模块1206,进一步被配置为:
292.在确定所述新增字段为索引字段,且所述新增字段为第一类型索引字段的情况下,根据所述目标数据表中历史字段的字段信息,在所述索引字段区域的第一类型索引字段区域,确定所述新增字段的存储位置;或者
293.在确定所述新增字段为索引字段,且所述新增字段为第二类型索引字段的情况下,根据所述目标数据表中历史字段的字段信息,在所述索引字段区域的第二类型索引字段区域,确定所述新增字段的存储位置。
294.可选地,所述装置,还包括:
295.非索引字段存储位置确定模块,被配置为:
296.在确定所述新增字段为非索引字段的情况下,根据所述目标数据表中历史字段的字段信息,在所述非索引字段区域确定所述新增字段的存储位置。
297.可选地,所述位置确定模块1206,进一步被配置为:
298.在根据所述目标数据表中历史字段的字段信息,确定所述索引字段区域存在空闲存储位置的情况下,在所述空闲存储位置确定所述新增字段的存储位置;或者
299.在根据所述目标数据表中历史字段的字段信息,确定所述索引字段区域不存在空闲存储位置的情况下,在所述索引字段区域为所述新增字段增加对应的存储位置。
300.可选地,所述位置确定模块1206,进一步被配置为:
301.在根据所述目标数据表中的字段信息,确定所述非索引字段区域存在空闲存储位置的情况下,在所述空闲存储位置确定所述新增字段的存储位置;或者
302.在根据所述目标数据表中历史字段的字段信息,确定所述非索引字段区域不存在空闲存储位置的情况下,在所述非索引字段区域为所述新增字段增加对应的存储位置。
303.可选地,所述装置,还包括:
304.字段变更模块,被配置为:
305.接收字段变更请求,在确定所述字段变更请求为将待变更字段变更为索引字段的情况下,确定所述待变更字段在所述索引字段区域的目标存储位置,其中,所述待变更字段为非索引字段;
306.在确定所述待变更字段已有存量数据的情况下,将所述存量数据从所述待变更字段的当前存储位置复制到所述目标存储位置;
307.在确定所述当前存储位置的存量数据与所述目标存储位置的存量数据一致的情况下,删除所述当前存储位置的存量数据,并在所述字段信息表中更新所述待变更字段的字段信息。
308.可选地,所述装置,还包括:
309.对象表处理模块,被配置为:
310.复制所述待变更字段对应的业务模型的第一对象表作为初始对象表,并将所述初始对象表的状态设置为草稿状态;
311.相应地,所述在所述字段信息表中更新所述待变更字段的字段信息之后,还包括:
312.将所述变更后的初始对象表作为目标对象表,并将所述目标对象表的状态确定为生效,同时下线所述第一对象表。
313.可选地,所述装置,还包括:
314.目标存储位置确定模块,被配置为:
315.在确定所述字段变更请求为将所述待变更字段变更为非索引字段的情况下,确定所述待变更字段在所述非索引字段区域的目标存储位置,其中,所述待变更字段包括索引字段或非索引字段。
316.可选地,所述字段变更模块,进一步被配置为:
317.从所述待变更字段的业务模型对应的字段信息表中,获取所述待变更字段的业务模型对应的目标数据表中历史字段的字段信息;
318.在确定所述字段变更请求为将所述待变更字段变更为第一类型索引字段,并且所述待变更字段确定为第一类型索引字段的情况下,根据所述目标数据表中历史字段的字段信息,在所述索引字段区域的第一类型索引字段区域确定所述待变更字段的目标存储位置;或者
319.在确定所述字段变更请求为将所述待变更字段变更为第二类型索引字段的情况下,根据所述目标数据表中历史字段的字段信息,在所述索引字段区域的第二类型索引字段区域确定所述待变更字段的目标存储位置。
320.可选地,所述装置,还包括:
321.判断模块,被配置为:
322.在确定所述当前存储位置的存量数据与所述目标存储位置的存量数据不一致、并且当前复制次数小于预设次数阈值的情况下,继续执行将所述存量数据从所述待变更字段的当前存储位置复制到所述目标存储位置的步骤。
323.本说明书实施例提供的数据存储装置,通过根据新增字段的字段信息,确定所述新增字段对应的业务模型;获取所述业务模型对应的目标数据表中历史字段的字段信息,
其中,所述目标数据表包括索引字段区域以及非索引字段区域;在确定所述新增字段为索引字段的情况下,根据所述目标数据表中历史字段的字段信息,在所述索引字段区域确定所述新增字段的存储位置。
324.具体的,本说明书实施例提供的数据存储装置通过将索引字段与非索引字段存储在同一数据表对应的索引字段区域以及非索引字段区域中,避免了在进行非索引字段数据的修改时,还需要同步修改对应的索引表的问题,减少了数据库操作的复杂度;并且通过本说明书提供的数据存储装置,可以在后续进行数据查询时提高数据查询的执行效率。
325.上述为本实施例的一种数据存储装置的示意性方案。需要说明的是,该数据存储装置的技术方案与上述的数据存储方法的技术方案属于同一构思,数据存储装置的技术方案未详细描述的细节内容,均可以参见上述数据存储方法的技术方案的描述。
326.与上述方法实施例相对应,本说明书还提供了数据查询装置实施例,图13示出了本说明书一个实施例提供的一种数据查询装置的结构示意图。如图13所示,该装置包括:
327.第一信息获取模块1302,被配置为根据接收的数据查询请求,获取目标数据表中历史字段的字段信息;
328.查询语句获取模块1304,被配置为根据预设的处理规则对该数据查询请求进行处理,获得初始数据查询语句;
329.目标查询语句生成模块1306,被配置为在确定存在查询引擎,且所述初始数据查询语句满足预设检索条件的情况下,根据所述初始数据查询请求生成查询引擎对应的目标数据查询语句;
330.目标查询结果生成模块1308,被配置为调用所述查询引擎根据所述目标数据查询语句以及所述字段信息进行数据查询,获得所述待查询数据的目标查询结果。
331.可选地,所述装置,还包括:
332.数据库查询模块,被配置为:
333.在确定不存在所述查询引擎的情况下,根据所述初始数据查询条件生成目标查询语句;
334.根据所述目标查询语句在数据库中执行所述目标查询语句,获得所述目标查询结果。
335.可选地,所述装置,还包括:
336.指令确定模块,被配置为:
337.在确定存在查询引擎、所述初始数据查询语句不满足预设检索条件以及存在引擎查询指令的情况下,根据所述初始数据查询请求生成查询引擎对应的目标数据查询语句。
338.本说明书实施例提供的数据查询装置,通过根据接收的数据查询请求,获取目标数据表中历史字段的字段信息,其中,所述数据查询请求中携带有待查询数据的数据信息;根据预设的处理规则对该数据查询请求进行处理,获得初始数据查询语句;在确定存在查询引擎,且所述初始数据查询语句满足预设检索条件的情况下,根据所述初始数据查询请求生成查询引擎对应的目标数据查询语句;调用所述查询引擎根据所述目标数据查询语句以及所述字段信息,在所述目标数据表中进行数据查询,获得所述待查询数据的目标查询结果,通过本说明书实施例中的数据查询装置可以提升复杂查询条件下的数据查询的搜索效率。
339.上述为本实施例的一种数据查询装置的示意性方案。需要说明的是,该数据查询装置的技术方案与上述的数据存储方法的技术方案属于同一构思,数据查询装置的技术方案未详细描述的细节内容,均可以参见上述数据查询方法的技术方案的描述。
340.计算设备1400还包括接入设备1440,接入设备1440使得计算设备1400能够经由一个或多个网络1460通信。这些网络的示例包括公用交换电话网(pstn)、局域网(lan)、广域网(wan)、个域网(pan)或诸如因特网的通信网络的组合。接入设备1440可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(nic))中的一个或多个,诸如ieee802.11无线局域网(wlan)无线接口、全球微波互联接入(wi-max)接口、以太网接口、通用串行总线(usb)接口、蜂窝网络接口、蓝牙接口、近场通信(nfc)接口,等等。
341.在本说明书的一个实施例中,计算设备1400的上述部件以及图14中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图14所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
342.计算设备1400可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或pc的静止计算设备。计算设备1400还可以是移动式或静止式的服务器。
343.其中,处理器1420用于执行如下计算机可执行指令,该计算机可执行指令被处理器执行时实现上述数据存储方法的步骤。
344.上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的数据存储方法以及数据查询方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述数据存储方法以及数据查询方法的技术方案的描述。
345.本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现上述数据存储方法以及数据查询方法的步骤。
346.上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的数据存储方法以及数据查询方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述数据存储方法以及数据查询方法的技术方案的描述。
347.本说明书一实施例还提供一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述数据存储方法以及数据查询方法的步骤。
348.上述为本实施例的一种计算机程序的示意性方案。需要说明的是,该计算机程序的技术方案与上述的数据存储方法以及数据查询方法的技术方案属于同一构思,计算机程序的技术方案未详细描述的细节内容,均可以参见上述数据存储方法以及数据查询方法的技术方案的描述。
349.上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来
执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
350.所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
351.需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书实施例并不受所描述的动作顺序的限制,因为依据本说明书实施例,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书实施例所必须的。
352.在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
353.以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书实施例的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书实施例的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1