CN110399368B - 一种定制数据表的方法、数据操作方法及装置 - Google Patents

一种定制数据表的方法、数据操作方法及装置 Download PDF

Info

Publication number
CN110399368B
CN110399368B CN201810366345.7A CN201810366345A CN110399368B CN 110399368 B CN110399368 B CN 110399368B CN 201810366345 A CN201810366345 A CN 201810366345A CN 110399368 B CN110399368 B CN 110399368B
Authority
CN
China
Prior art keywords
data
index
field
data table
tenant
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.)
Active
Application number
CN201810366345.7A
Other languages
English (en)
Other versions
CN110399368A (zh
Inventor
吴迎波
赵清伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201810366345.7A priority Critical patent/CN110399368B/zh
Priority to PCT/CN2019/075772 priority patent/WO2019205790A1/zh
Publication of CN110399368A publication Critical patent/CN110399368A/zh
Application granted granted Critical
Publication of CN110399368B publication Critical patent/CN110399368B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请的实施例提供一种数据操作方法,应用于软件即服务SaaS系统,包括:数据库服务器接收来自租户对其定制的数据表的操作命令,该操作命令携带该租户的租户标识,数据库服务器根据存储的目标数据表中数据列的属性与该租户标识对应的租户定制字段的属性的对应关系,确定该租户标识对应的数据列所在的目标数据表,数据库服务器对确定出的目标数据表执行该操作命令。本申请实施例提供的技术方案能够提高租户个性化定制数据模式的灵活性。

Description

一种定制数据表的方法、数据操作方法及装置
技术领域
本申请涉及数据库领域,尤其涉及一种数据操作方法及装置。
背景技术
软件即服务(Software as a Service,SaaS)是一种新型的软件交付模式。在这种交付模式下,云服务器侧集中托管软件及其相关数据,用户通常使用网页浏览器来访问SaaS,无需安装软件即可使用。SaaS减少了客户购买、构建和维护基础设施和应用程序的需要。
SaaS多租户数据存储技术是SaaS领域的关键技术之一。目前业界管理多租户数据的方法主要有三种,如图1所示:独立数据库模式,在这种模式下每个租户单独使用一个数据库;共享数据库下的独立数据模式,在这种模式下多个租户共享使用同一个数据库,但不同租户的数据使用不同的数据表存储;共享数据库下的共享数据模式(又称逻辑多租模式),在这种模式下多个租户共享使用同一个数据库,不同租户的数据通过逻辑隔离共同存储在同一套数据表中。
对于逻辑多租模式,数据库中的同一套数据模式需要被具有不同业务特征的租户使用,而具有不同业务特征的租户有着不同的数据模式需求。而且,SaaS 应用租户个性化定制数据模式的需求较多并且不可预测,因此,逻辑多租模式除了对不同租户数据之间有很高的逻辑隔离的要求之外,对数据存储的灵活性也有很高要求。随着逻辑多租模式的普及,租户数量日渐增多,租户个性化定制的数据模式就越多,对灵活性要求就越高。在逻辑多租模式下,现有的数据存储技术无法有效满足多租户个性化定制数据模式的需求。
发明内容
本申请的实施例提供一种数据存储方法,在逻辑多租模式下,能够提高租户个性化定制数据模式的灵活性。
第一方面,提供了一种定制数据表的方法,应用于软件即服务SaaS系统,包括以下步骤:数据库服务器接收来自租户的定制数据表命令,该命令携带租户定制字段的属性;数据库服务器从多个数据表中确定目标数据表集,目标数据表集中每个目标数据表的至少一个数据列的属性与定制字段的属性相对应;数据库服务器存储目标数据表集中每个目标数据表的至少一个数据列的属性与租户定制字段的属性的对应关系。
结合第一方面的实现方式,在第一方面第一种可能的实现方式中,属性包括数据类型,则数据列的属性与定制字段的属性相对应包括:数据列的数据类型与定制字段的数据类型相同。
通过将数据表中支持存储某一数据类型的数据列分配给相同类型的租户定制字段来存储租户数据,使得不必对租户数据进行类型转换,保证了数据类型不失真,同时提升了性能。
结合第一方面或第一方面的第一种可能的实现方式,在第二种可能实现的方式中,定制字段包括索引字段和非索引字段,数据列包括索引数据列和非索引数据列;则数据列的数据类型与定制字段的数据类型相同包括:索引数据列的数据类型与索引字段的数据类型相同,或者,非索引数据列的数据类型与非索引字段的数据类型相同。
结合第一方面或第一方面的第一种至第二种可能的实现方式中的任意一种,在第三种可能实现的方式中,当数据库服务器确定某一数据表的索引数据列的数据类型与索引字段的数据类型相同时,数据库服务器优先在该数据表中确定与定制字段中的非索引字段具有相同数据类型的非索引数据列。
这样能够降低数据表中空(NULL)字段的数量,提升存储密度。
结合第一方面或第一方面的第一种至第三种可能的实现方式中的任意一种,在第四种可能实现的方式中,至少一个数据列的属性与定制字段的属性相对应包括:同一个目标数据表中的一个数据列的属性与一个定制字段的属性相对应。同一个目标数据表中的一个数据列的属性与一个定制字段的属性相对应包括:同一个目标数据表中的一个索引数据列的数据类型与定制字段中的一个索引字段的数据类型相同,或者,同一个目标数据表中的一个非索引数据列的数据类型与定制字段中的一个非索引字段的数据类型相同。
结合第一方面或第一方面的第一种至第四种可能的实现方式中的任意一种,在第五种可能实现的方式中,同一个目标数据表中的一个数据列的属性与多个定制字段的属性相对应。同一个目标数据表中的一个数据列的属性与多个定制字段的属性相对应包括:同一个目标数据表中的一个索引数据列的数据类型与定制字段中的多个索引字段的数据类型相同,或者,同一个目标数据表中的一个非索引数据列的数据类型与定制字段中的多个非索引字段的数据类型相同。
数据表中数据列重复使用,能够支持租户定制字段超出数据表的数据列数量的情况,提升了租户个性化定制数据表的灵活性。
结合第一方面或第一方面的第一种至第五种可能的实现方式中的任意一种,在第六种可能实现的方式中,数据库服务器为每个对应关系分配组标识;当同一个目标数据表中的一个数据列的属性与多个定制字段的属性相对应时,每个对应关系的组标识不同。
结合第一方面或第一方面的第一种至第六种可能的实现方式中的任意一种,在第七种可能实现的方式中,多个数据表的表结构不同,具体包括数据列的数据类型不同、数据列的数量不同、索引数据列不同中的至少一种。
结合第一方面或第一方面的第一种至第七种可能的实现方式中的任意一种,在第八种可能实现的方式中,对应关系存储在数据库服务器创建的字段分配表中。
第二方面,提供了一种数据操作方法,其特征在于,应用于软件即服务SaaS 系统,包括以下步骤:数据库服务器接收来自租户的对所述租户定制的数据表的操作命令,操作命令携带待租户的租户标识;数据库服务器根据存储的目标数据表中数据列的属性与该租户标识对应的租户定制字段的属性的对应关系,确定该租户标识对应的数据列所在的目标数据表;数据库服务器对确定出的目标数据表执行该操作命令。
结合第二方面的实现方式,在第二方面第一种可能的实现方式中,数据列的属性与租户定制字段的属性的对应关系包括:同一个目标数据表中的一个数据列的属性与一个定制字段的属性相对应。同一个目标数据表中的一个数据列的属性与一个定制字段的属性相对应包括:同一个目标数据表中的一个索引数据列的数据类型与定制字段中的一个索引字段的数据类型相同,或者,同一个目标数据表中的一个非索引数据列的数据类型与定制字段中的一个非索引字段的数据类型相同。
通过将数据表中支持存储某一数据类型的数据列分配给相同类型的租户定制字段来存储租户数据,使得租户在进行数据操作时数据库服务器不必对租户数据进行类型转换,保证了数据类型不失真,同时提升了性能。
结合第二方面或第二方面的第一种可能的实现方式,在第二种可能实现的方式中,同一个目标数据表中的一个数据列的属性与多个定制字段的属性相对应。同一个目标数据表中的一个数据列的属性与多个定制字段的属性相对应包括:同一个目标数据表中的一个索引数据列的数据类型与定制字段中的多个索引字段的数据类型相同,或者,同一个目标数据表中的一个非索引数据列的数据类型与定制字段中的多个非索引字段的数据类型相同。
数据表中数据列重复使用,能够支持租户定制字段超出数据表的数据列数量的情况,提升了租户个性化定制数据表的灵活性。
结合第二方面或第二方面的第一种至第二种可能的实现方式中的任意一种,在第三种可能实现的方式中,数据库服务器对确定出的目标数据表执行操作命令包括:数据库服务器生成操作命令的转换命令,该转换命令携带确定的目标数据表的标识和租户标识,数据库服务器对确定出的目标数据表执行该转换命令。
结合第二方面或第二方面的第一种至第三种可能的实现方式中的任意一种,在第四种可能实现的方式中,操作命令还携带租户的至少一个定制字段,则数据库服务器根据操作命令携带的租户标识和租户的至少一个定制字段,从存储的对应关系中确定至少一个定制字段对应的目标数据表的数据列;数据库服务器对确定出的目标数据表执行操作命令包括:数据库服务器生成操作命令的转换命令,转换命令携带确定的目标数据表的标识、确定的目标数据表的数据列的标识和租户标识,数据库服务器对确定出的目标数据表的数据列执行转换命令。
结合第二方面或第二方面的第一种至第四种可能的实现方式中的任意一种,在第五种可能实现的方式中,转换命令还携带为确定的至少一个定制字段与目标数据表的数据列的对应关系分配的组标识。
结合第二方面或第二方面的第一种至第五种可能的实现方式中的任意一种,在第六种可能实现的方式中,数据库服务器执行转换命令时,从操作的第一个目标数据表中确定操作命令对应的数据的行标识,根据行标识从其他目标数据表中确定具有行标识的数据,根据行标识组合第一个目标数据表以及其他目标数据表中的数据,向租户返回操作结果。
操作命令具体可为对数据进行增加、删除、修改以及查询操作。存储数据属于对数据进行增加操作的一种。
第三方面,提供了一种定制数据表的装置,应用于软件即服务SaaS系统,包括接收模块和处理模块:其中,接收模块,用于接收来自租户的定制数据表命令,该命令携带租户定制字段的属性;处理模块,用于从多个数据表中确定目标数据表集,目标数据表集中每个目标数据表的至少一个数据列的属性与定制字段的属性相对应;处理模块,还用于存储目标数据表集中每个目标数据表的至少一个数据列的属性与租户定制字段的属性的对应关系。
结合第三方面的实现方式,在第三方面第一种可能的实现方式中,属性包括数据类型,数据列的属性与定制字段的属性相对应包括:数据列的数据类型与定制字段的数据类型相同。
结合第三方面或第三方面的第一种可能的实现方式,在第二种可能实现的方式中,定制字段包括索引字段和非索引字段,数据列包括索引数据列和非索引数据列;数据列的数据类型与定制字段的数据类型相同包括:索引数据列的数据类型与索引字段的数据类型相同,或者,非索引数据列的数据类型与非索引字段的数据类型相同。
结合第三方面或第三方面的第一种至第二种可能的实现方式中的任意一种,在第三种可能实现的方式中,当所处理模块确定某一数据表的索引数据列的数据类型与索引字段的数据类型相同时,处理模块优先在该数据表中确定与定制字段中的非索引字段具有相同数据类型的非索引数据列。
结合第三方面或第三方面的第一种至第三种可能的实现方式中的任意一种,在第四种可能实现的方式中,至少一个数据列的属性与定制字段的属性相对应包括:同一个目标数据表中的一个数据列的属性与一个定制字段的属性相对应。同一个目标数据表中的一个数据列的属性与一个定制字段的属性相对应包括:同一个目标数据表中的一个索引数据列的数据类型与定制字段中的一个索引字段的数据类型相同,或者,同一个目标数据表中的一个非索引数据列的数据类型与定制字段中的一个非索引字段的数据类型相同。
结合第三方面或第三方面的第一种至第四种可能的实现方式中的任意一种,在第五种可能实现的方式中,同一个目标数据表中的一个数据列的属性与多个定制字段的属性相对应。同一个目标数据表中的一个数据列的属性与多个定制字段的属性相对应包括:同一个目标数据表中的一个索引数据列的数据类型与定制字段中的多个索引字段的数据类型相同,或者,同一个目标数据表中的一个非索引数据列的数据类型与定制字段中的多个非索引字段的数据类型相同。
结合第三方面或第三方面的第一种至第五种可能的实现方式中的任意一种,在第六种可能实现的方式中,处理模块还用于为每个对应关系分配组标识;当同一个目标数据表中的一个数据列的属性与多个定制字段的属性相对应时,每个对应关系的组标识不同。
结合第三方面或第三方面的第一种至第六种可能的实现方式中的任意一种,在第七种可能实现的方式中,多个数据表的表结构不同,具体包括数据列的数据类型不同、数据列的数量不同、索引数据列不同中的至少一种。
结合第三方面或第三方面的第一种至第七种可能的实现方式中的任意一种,在第八种可能实现的方式中,对应关系存储在处理模块创建的字段分配表中。
第四方面,提供了一种数据操作装置,应用于软件即服务SaaS系统,包括接收模块和处理模块:接收模块,用于接收来自租户的对租户定制的数据表的操作命令,操作命令携带待租户的租户标识;处理模块,用于根据存储的目标数据表中数据列的属性与该租户标识对应的租户定制字段的属性的对应关系,确定该租户标识对应的数据列所在的目标数据表;处理模块,还用于对确定出的目标数据表执行操作命令。
结合第四方面的实现方式,在第四方面第一种可能的实现方式中,数据列的属性与租户定制字段的属性的对应关系包括:同一个目标数据表中的一个数据列的属性与一个定制字段的属性相对应。同一个目标数据表中的一个数据列的属性与一个定制字段的属性相对应包括:同一个目标数据表中的一个索引数据列的数据类型与定制字段中的一个索引字段的数据类型相同,或者,同一个目标数据表中的一个非索引数据列的数据类型与定制字段中的一个非索引字段的数据类型相同。
结合第四方面或第四方面的第一种可能的实现方式,在第二种可能实现的方式中,同一个目标数据表中的一个数据列的属性与多个定制字段的属性相对应。同一个目标数据表中的一个数据列的属性与多个定制字段的属性相对应包括:同一个目标数据表中的一个索引数据列的数据类型与定制字段中的多个索引字段的数据类型相同,或者,同一个目标数据表中的一个非索引数据列的数据类型与定制字段中的多个非索引字段的数据类型相同。
结合第四方面或第四方面的第一种至第二种可能的实现方式中的任意一种,在第三种可能实现的方式中,处理模块对确定出的目标数据表执行操作命令包括:处理模块生成操作命令的转换命令,转换命令携带确定的目标数据表的标识和租户标识,处理模块对确定出的目标数据表执行转换命令。
结合第四方面或第四方面的第一种至第三种可能的实现方式中的任意一种,在第四种可能实现的方式中,操作命令还携带租户的至少一个定制字段,则处理模块根据操作命令携带的租户标识和租户的至少一个定制字段,从存储的对应关系中确定至少一个定制字段对应的目标数据表的数据列;处理模块对确定出的目标数据表执行操作命令包括:处理模块生成操作命令的转换命令,转换命令携带确定的目标数据表的标识、确定的目标数据表的数据列的标识和租户标识,处理模块对确定出的目标数据表的数据列执行转换命令。
结合第四方面或第四方面的第一种至第四种可能的实现方式中的任意一种,在第五种可能实现的方式中,转换命令还携带为确定的至少一个定制字段与目标数据表的数据列的对应关系分配的组标识。
结合第四方面或第四方面的第一种至第五种可能的实现方式中的任意一种,在第六种可能实现的方式中,处理模块执行转换命令时,从操作的第一个目标数据表中确定操作命令对应的数据的行标识,根据行标识从其他目标数据表中确定具有行标识的数据,根据行标识组合第一个目标数据表以及其他目标数据表中的数据,向租户返回操作结果。
第五方面,提供了一种计算设备,包括:处理器、存储器、总线和通信接口;存储器用于存储计算设备执行指令,处理器与存储器通过总线连接,当计算设备运行时,处理器执行存储器存储的计算机执行指令,以使计算设备执行第一方面及第一方面的任一可能的实现方式的方法。
第六方面,提供了一种计算设备,包括:处理器、存储器、总线和通信接口;存储器用于存储计算设备执行指令,处理器与存储器通过总线连接,当计算设备运行时,处理器执行存储器存储的计算机执行指令,以使计算设备执行第二方面及第二方面的任一可能的实现方式的方法。
第七方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行第一方面及第一方面的任一可能的实现方式的方法。
第八方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行第二方面及第二方面的任一可能的实现方式的方法。
根据本申请实施例提供的技术方案,通过从数据库服务器创建的多个数据表中确定与租户定制字段相匹配的目标数据表集,将租户的定制字段对应到每个目标数据表的数据列,在租户对定制的数据表进行操作时根据该对应关系确定目标数据表集,对确定的目标数据表集执行租户的操作命令,实现了逻辑多租模式下租户使用同一套数据模式进行个性化定制数据模式的目的,提高了个性化定制数据模式的灵活性。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1是现有的三种多租户数据的管理方式的示意图;
图2是本申请实施例应用的网络架构的示意图;
图3是依据本申请一实施例的定制数据表的方法300的示范性流程图;
图4是依据本申请一实施例的租户数据的示意图;
图5是依据本申请一实施例的数据表存储的租户数据的示意图;
图6是依据本申请一实施例的数据操作方法600的示意图;
图7是依据本申请一实施例的定制数据表的装置700的结构示意图;
图8是依据本申请一实施例的数据操作装置800的结构示意图;
图9是依据本申请一实施例的计算机设备900的硬件结构示意图。
具体实施方式
首先介绍本申请实施例应用的网络架构,如图2所示。租户客户端通过网络与数据库服务器建立连接。数据库服务器运行在一台或者多台服务器上,为应用程序提供数据服务。数据库服务器中创建了一套数据模型,用来存储不同租户的数据以及同一租户定制的不同数据对象的数据。定制数据对象包括定制多个字段的属性,字段的属性包括字段类型和是否为索引等。如数据对象为“员工”,在进行定制时包含的字段可以为“姓名”、“年龄”、“电话号码”、“地址”等,这些字段的类型分别为varchar、integer、integer、varchar,其中“姓名”为索引。租户通过客户端在数据库服务器上定制自己需要的数据对象,不同租户定制的数据对象可以相同,也可以不同。同一租户可以定制不同的数据对象。定制数据对象又可称为定制数据表。
数据库服务器中,数据模型包括多个具有不同表结构的数据表,用来存储租户数据;还包括字段分配表,用于存储租户定制的数据对象中各字段在多个数据表中的存储位置的信息;以及包括数据表的索引特征信息和字段特征信息。索引特征信息包括每个数据表的索引类型和索引数量,为租户定制的数据对象的索引字段分配提供依据;字段特征信息包括每个数据表包含的非索引数据列的类型和数量,为租户定制的数据对象的非索引字段分配提供依据。一个数据表中的同一个数据列存储相同类型的租户数据,如数据表table1的数据列F1的数据类型为varchar,则其存储varchar类型的租户数据。
数据库服务器是关系型数据库,关系型数据库自身支持的数据类型包括varchar,integer,date,timestamp,float,long,number,blob等。在本申请实施例中,不同数据表的表结构不同,具体可为数据列支持存储的数据类型不同、数据列的数量不同、索引数据列不同中的至少一种。数据库服务器在创建数据表时,可以在某些数据列上创建索引。关系型数据库中索引是对数据表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据表中的特定信息,可以提升查询租户数据的效率。直接在数据表上创建索引,避免了建立辅助索引表带来的空间浪费和数据不一致的问题。
前面介绍的数据列是用于存储租户数据的数据列,除了用于存储租户数据的数据列外,每个数据表还包含辅助字段数据列。辅助字段数据列用于存储租户标识Tenant_id,数据表名Table_name,行标识Row_id和组标识Group_id等。数据表名用于表示租户定制的数据对象,行标识用于标识租户定制的数据对象中的每行记录,行标识在该租户定制的某一数据对象中是唯一的。组标识用于表示数据对象的字段分组,数据对象的字段可以分成多组,每组字段可以存储在不同的数据表中或同一个数据表的不同行中。辅助字段用于区分数据来源,实现租户数据之间的隔离。
租户在进行数据对象的定制时,数据库服务器利用创建的数据模型将租户定制的字段分配到合适的数据表中,并在字段分配表中记录定制字段的存储位置。在后续租户进行数据存储等操作时,数据库服务器根据字段分配表中的记录,在相应的数据表中对租户数据进行操作,向租户返回操作结果。
根据图2所示的网络架构,本申请实施例提供了一种定制数据表的方法300 的示范性流程图,如图3所示。定制数据表的方法300由租户客户端和数据库服务器执行,包括以下步骤。
S301,数据库服务器在数据库中创建多个数据表,每个数据表的表结构不同。
如前文所述,数据表的表结构不同,具体可为数据表中数据列支持存储的数据类型不同、数据列的数量不同、索引数据列不同中的至少一种。在本申请实施例中,被创建了索引的数据列称为索引数据列,未被创建索引的数据列称为非索引数据列。并非所有数据表都包含索引数据列,可以部分数据表包含索引数据列,部分数据表不包含索引数据列。索引数据列不同包括索引属性不同。具体的,索引数据列不同可以是索引数据列支持存储的数据类型不同,包括类型完全不同和类型部分不同。如一个数据表有两个索引数据列,支持存储的数据类型分别是integer和varchar,另一个数据表有两个索引数据列,支持存储的数据类型分别是date和timestamp。又如一个数据表有两个索引数据列,支持存储的数据类型分别是integer和varchar,另一个数据表有两个索引数据列,支持存储的数据类型分别是integer和timestamp。索引数据列不同还可以是索引数据列的数量不同,包括支持存储的数据类型相同且数量不同,以及支持存储的数据类型不同且数量不同。如一个数据表有两个索引数据列,支持存储的数据类型分别是integer和varchar,另一个数据表有三个索引数据列,其中两个索引数据列支持存储的数据类型是integer,另一个索引数据列支持存储的数据类型是varchar。又如一个数据表有两个索引数据列,支持存储的数据类型分别是integer和varchar,另一个数据表有三个索引数据列,支持存储的数据类型分别是integer、date和time。索引数据列不同还可以是索引的其他属性不同,其他属性包括主键,是否唯一索引(Unique),是否B-tree,是否hash等。为方便说明,本申请实施例中将数据列支持存储的数据类型简称为数据列的数据类型或数据列的类型。
例如,以数据库服务器创建了table1、table2和table3三个数据表为例,如表1-1所示,数据表名分别为table1、table2、table3。
表1-1 table1为
Figure GDA0003619193800000081
table2为
Figure GDA0003619193800000082
table3为
Figure GDA0003619193800000083
Figure GDA0003619193800000091
数据库服务器创建数据表后,数据表中未存储数据,后续收到租户的请求后进行数据存储。表1-1中,table1、table2和table3都包含辅助字段Tenant_id, Table_name,Row_id和Group_id。这三个数据表的表结构不同:table1的数据列为3个,分别是integer类型,varchar类型和date类型;table2的数据列为2 个,分别是integer类型和varchar类型;table3的数据列为3个,分别是2个 date类型和1个varchar类型。F1、F2、F3是列标识。数据库服务器还可以在数据表的数据列上创建索引,如table1的F1和F2列为索引数据列,F3列为非索引数据列;table3的F1和F3列为索引数据列,F2列为非索引数据列;table2 未创建索引,没有索引数据列,F1和F2列都为非索引数据列。
在实际应用中,可以根据租户的特征或者租户定制数据实体的历史情况构建合理的数据表集,来满足租户定制数据实体的需求,尽量避免定制的数据实体在字段分配过程中产生NULL字段,同时尽量避免过多字段分组的产生。另外,不同的数据表可存放在不同的存储空间,不同存储空间可以分布在不同的物理磁盘上,这样可以并行化操作数据表,降低响应时间,提高吞吐量。
S302,对于创建的多个数据表,数据库服务器生成每个数据表的索引特征信息以及字段特征信息。
索引特征信息包括数据表的索引类型和索引数量,还可以包括索引所在列的列标识,还可以包含索引的其他属性,如主键,是否Unique,是否B-tree,是否hash等。字段特征信息包括数据表的非索引数据列的类型和每种非索引数据列的数量,还可以包括非索引数据列的其他属性,如取值范围,是否为空,最大长度等。如以表1-1中table1、table2和table3为例,数据库服务器生成的 table1、table2和table3的索引特征信息和字段特征信息如下所示。
table1索引数据列的类型integer,数量1,位置F1列
索引数据列的类型varchar,数量1,位置F2列
非索引数据列的类型date,数量1,位置F3列
非索引数据列的类型timestamp,数量1,位置F4列
table2索引数据列的数量0
非索引数据列的类型integer,数量1,位置F1列
非索引数据列的类型varchar,数量1,位置F2列
table3索引数据列的类型date,数量2,位置F1列,F3列
非索引数据列的类型varchar,数量1,位置F2列
S303,数据库服务器接收来自租户的定制数据表命令,定制数据表命令携带该租户定制字段的属性。
定制数据表命令也可以是定制数据表请求。
租户根据自己的应用需求,可以定制满足个性需求的数据表。租户可以定义任意数据库自身支持的数据类型的字段。定制字段的属性包括定制字段的字段名和相应的字段类型,还可以包括是否为索引。
定制数据表命令具体可以是数据定义语言(Data Definition Language,DDL) 命令。
以租户HW公司为例进行说明。租户HW公司的租户标识为Huawei,该租户想要定制一个存储员工信息的数据表employee,数据表中包含定制字段姓名 Name、年龄Age、电话号码PhoneNo、地址Address、创建时间CreateTime、生日Birthday、入职时间EntryDate、毕业时间GraduationDate、合同到期日 ContractDate、上一次修改时间LastModifiedTime。其中,姓名Name和电话号码PhoneNo作为索引字段。租户HW公司向数据库服务器发送的定制数据表命令可以为
Figure GDA0003619193800000101
在上述例子中,定制字段的字段类型varchar、integer、timestamp和date 均为数据库自身支持的数据类型。通过索引字段Name和PhoneNo可以快速访问相应的员工信息。
S304,数据库服务器从创建的多个数据表中确定目标数据表集,目标数据表集中每个目标数据表的至少一个数据列的属性与定制字段的属性相对应。
属性包括数据类型,数据列的属性与定制字段的属性相对应包括:数据列的数据类型与定制字段的数据类型相同。当租户的定制字段中包括非索引字段时,数据列的数据类型与定制字段的数据类型相同包括:非索引数据列的类型与租户的定制字段中的非索引字段的类型相同。当租户的定制字段中包括索引字段时,数据列的数据类型与定制字段的数据类型相同包括:索引数据列的类型与租户的定制字段中的索引字段的类型相同。
目标数据表集包含一个或多个目标数据表。当目标数据表集只包含一个目标数据表时,该租户的每个定制字段在该目标数据表中都有相应的数据列与之对应。如租户A的定制字段为姓名、年龄和出生日期,相应的字段类型为varchar、 integer和date,则以前文的表1-1为例,数据库服务器为该定制字段确定的目标数据表为table1,table1中F2、F1、F3列分别与定制字段姓名、年龄、出生日期相匹配。当目标数据表集包含多个目标数据表时,该租户的定制字段在该多个目标数据表中有相应的数据列与之对应。如租户定制的字段为姓名、年龄、出生日期、身高和职务,相应的字段类型为varchar、integer、date、integer和varchar,则以前文的表1-1为例,数据库服务器为该定制字段确定的目标数据表集为table1和table2,table1中F2、F1、F3列分别与定制字段姓名、年龄、出生日期相匹配,table2中F1、F2列分别与定制字段身高、职务相匹配。
在一种情况下,至少一个数据列的属性与定制字段的属性相对应包括:同一个目标数据表中的一个数据列的属性与一个定制字段的属性相对应。同一个目标数据表中的一个数据列的属性与一个定制字段的属性相对应包括:同一个目标数据表中的一个索引数据列的数据类型与定制字段中的一个索引字段的数据类型相同,或者,同一个目标数据表中的一个非索引数据列的数据类型与定制字段中的一个非索引字段的数据类型相同。
在另一种情况下,至少一个数据列的属性与定制字段的属性相对应包括:同一个目标数据表中的一个数据列的属性与多个定制字段的属性相对应。同一个目标数据表中的一个数据列的属性与多个定制字段的属性相对应包括:同一个目标数据表中的一个索引数据列的数据类型与定制字段中的多个索引字段的数据类型相同,或者,同一个目标数据表中的一个非索引数据列的数据类型与定制字段中的多个非索引字段的数据类型相同。
结合以下步骤说明数据库服务器确定目标数据表集的过程。
(1)数据库服务器接收到租户的定制数据表命令后,解析命令,识别命令中的字段名称、字段类型、字段数量等信息。
以S303中租户HW公司定制员工信息数据表为例进行说明。数据库服务器解析定制数据表命令,得到Name和PhoneNo为索引字段,类型分别为varchar 和integer;Age、Address、Createtime、Entrydate、GraduationDate、ContractDate、 LastModifiedTime为非索引字段,类型分别为integer、varchar、timestamp、date、 date、date、timestamp。
(2)数据库服务器遍历创建的多个数据表的索引特征信息,计算每个数据表的索引数据列类型与租户的定制字段中索引字段的匹配值Indexmatch,每匹配成功一次,索引类型匹配值Indexmatch加1。
以前文表1-1中的table1、table2、table3数据表为例。table1具有2个索引数据列,类型分别为varchar和integer,而定制字段中的Name和PhoneNo为索引字段,类型分别为varchar和integer,因此table1的Indexmatch值为Indexmatch (t1)=2。类似的,table2索引数据列的数量为0,因此table2中没有与定制字段中索引字段相匹配的索引数据列,Indexmatch(t2)=0。table3具有2个索引数据列,类型均为date,这2个索引数据列的类型与定制字段中的Name和 PhoneNo不匹配,因此,Indexmatch(t3)=0。
(3)数据库服务器遍历索引类型匹配值最高的数据表的字段特征信息,计算数据表的非索引数据列类型与租户定制字段中非索引字段的匹配值 Textmatch,每匹配成功一次,非索引类型匹配值Textmatch加1。
步骤(2)中索引类型匹配值最高的数据表为table1。前文举例中数据库服务器只创建了table1、table2、table3三个数据表,而在实际应用中,数据库服务器创建的数据表数量会较多,因此可能出现索引类型匹配值最高的数据表有多个(大于等于2个)的情况,此时数据库服务器根据这多个数据表的字段特征信息计算非索引类型匹配值。例如数据库服务器还创建了table4,table4的索引特征信息和字段特征信息如下
table4索引数据列类型integer,数量1,位置F1列
索引数据列类型varchar,数量1,位置F2列
非索引数据列类型integer,数量1,位置F3列
非索引数据列类型varchar,数量2,位置F4列,F5列
table4的索引类型匹配值Indexmatch(t4)=2,table4与table1同为索引类型匹配值最高的数据表。此时数据库服务器计算table1和table4的非索引类型匹配值。table1的非索引数据列为1个date类型和1个timestamp类型,定制字段中非索引字段Entrydate、GraduationDate、ContractDate为date类型,CreateTime 和LastModifiedTime为timestamp类型,因此table1的非索引类型匹配值 Textmatch(t1)=2,table1中的date类型与定制字段Entrydate相匹配,table1 中的timestamp类型与定制字段Createtime相匹配。类似的,table4的非索引数据列为1个integer类型和2个varchar类型,integer类型的非索引数据列与定制字段Age相匹配,varchar类型的非索引数据列中的一个与定制字段Address 相匹配,table4的非索引类型匹配值Textmatch(t4)=2。
(4)数据库服务器确定非索引类型匹配值最高的数据表的剩余未匹配数据列的数量LeftNum,将剩余未匹配数据列的数量最小的数据表作为目标数据表。
由于table1和table4的非索引类型匹配值均为2,因此table1和table4为非索引类型匹配值最高的数据表。table1的所有数据列已与租户定制字段相匹配,剩余未匹配数据列的数量LeftNum(t1)为0。table4剩余一个varchar类型的数据列未匹配,因此table4的剩余未匹配数据列的数量LeftNum(t4)为1。 table1的剩余未匹配数据列的数量小于table4,因此数据库服务器将table1作为一个目标数据表。此时租户定制字段中与目标数据表table1已匹配的字段为 Name、PhoneNo、Entrydate、CreateTime,定制字段中未匹配的字段为Age、 Address、GraduationDate、ContractDate、LastModifiedTime。
(5)数据库服务器确定租户定制字段中是否还有未匹配的索引字段。如果有,则重复执行上述步骤(2)、(3)、(4),直至租户定制字段中的所有索引字段都找到与之匹配的目标数据表。如果没有,则数据库服务器已完成对租户定制字段中的索引字段分配目标数据表,此时继续执行步骤(6)及后续步骤。
假设数据库服务器还创建了table5,table5的索引特征信息和字段特征信息如下
table5索引数据列类型date,数量1,位置F1列
非索引数据列类型integer,数量1,位置F2列
对于租户定制字段中还有未匹配的索引字段的情况,例如在执行上述步骤 (2)、(3)、(4),确定table1为与租户定制字段中的索引字段Name、PhoneNo 以及非索引字段Entrydate、Createtime相匹配的目标数据表后,假设定制字段中ContractDate也为索引字段,ContractDate为date类型,未匹配,则数据库服务器重复执行上述步骤(2),计算数据表table1、table2、table3、table4、table5 的索引类型匹配值(这里增加table4和table5是由于假设数据库服务器在最初创建了这5个数据表),得到table1、table2、table3、table4的索引类型匹配值 Indexmatch都为0(因为这4个数据表的索引数据列没有date类型),table5 的索引类型匹配值Indexmatch(t5)=1。此后数据库服务器重复执行上述步骤(3)、(4),得到table5的非索引类型匹配值Textmatch(t5)=1,即table5 的1个integer类型的非索引数据列与租户定制字段中的Age相匹配,并且得到 table5的剩余未匹配数据列的数量为0,因此table5也为一个目标数据表。此时,租户定制字段中的索引字段Name、PhoneNo、ContactDate都有目标数据表的数据列与之对应,数据库服务器已完成对租户定制字段中的索引字段分配目标数据表。此时,租户定制字段中与目标数据表table1已匹配的字段为Name、 PhoneNo、Entrydate、CreateTime,与目标数据表table5已匹配的字段为ContractDate、Age,定制字段中未匹配的字段为Address、GraduationDate、LastModifiedTime。
在进行对租户定制字段中的索引字段分配目标数据表时,优选采用这种方式:目标数据表中所有索引数据列是租户定制字段中索引字段的子集。例如,定制字段中Name、PhoneNo、ContractDate为索引字段,与之匹配的table1的索引数据列为integer、varchar类型,与之匹配的table5的索引数据列为date类型。
(6)数据库服务器计算数据表的非索引数据列类型与租户定制字段中剩余未匹配的非索引字段的匹配值Textmatch,每匹配成功一次,非索引类型匹配值 Textmatch加1。数据库服务器计算数据表中剩余未匹配数据列的数量LeftNum。数据库服务器确定非索引字段的匹配值Textmatch最高并且剩余未匹配数据列的数量LeftNum最小的数据表为目标数据表。
例如,在前述步骤中,租户定制字段中未匹配的非索引字段为Address、GraduationDate、LastModifiedTime,数据库服务器分别计算table1、table2、table3、table4、table5的非索引数据列类型与Address、GraduationDate、LastModifiedTime 的匹配值,得到table1的非索引类型匹配值Textmatch(t1)=2,table2的非索引类型匹配值Textmatch(t2)=1,table3的非索引类型匹配值Textmatch(t3) =1,table4的非索引类型匹配值Textmatch(t4)=1,table5的非索引类型匹配值Textmatch(t5)=0。数据库服务器分别计算table1、table2、table3、table4、 table5中剩余未匹配数据列的数量,得到table1中剩余未匹配数据列的数量 LeftNum(t1)=table1数据列数量-Textmatch(t1)=4-2=2(为1个integer类型的索引数据列和1个varchar类型的索引数据列),table2中剩余未匹配数据列的数量LeftNum(t2)=table2数据列的数量-Textmatch(t2)=2-1=1(为1个integer类型的非索引数据列),table3剩余未匹配数据列的数量LeftNum(t3) =table3数据列的数量-Textmatch(t3)=3-1=2(为2个date类型的索引数据列), table4剩余未匹配数据列的数量LeftNum(t4)=table4数据列的数量-Textmatch (t4)=5-1=4(为1个integer类型的索引数据列、1个varchar类型的索引数据列、1个integer类型的非索引数据列和1个varchar类型的非索引数据列),table5 剩余未匹配数据列的数量LeftNum(t5)=table5数据列的数量-Textmatch(t5) =2-0=2(为1个date类型的索引数据列和1个integer类型的非索引数据列)。由此可知,非索引字段匹配值最高并且剩余未匹配数据列的数量最小的数据表为table1,因此table1为一个目标数据表。此时,租户定制字段中在索引字段匹配过程(步骤(2)、(3)、(4)、(5))中与目标数据表table1已匹配的字段为Name、PhoneNo、Entrydate、CreateTime,与目标数据表table5已匹配的字段为ContractDate、Age,在非索引字段匹配过程(步骤(6)、(7)) 中与目标数据表table1已匹配的字段为GraduationDate、LastModifiedTime,此时定制字段中未匹配的字段为Address。
(7)数据库服务器确定租户定制字段中是否还有未匹配的非索引字段。如果有,则重复执行上述步骤(6),直至租户定制字段中的所有非索引字段都找到与之匹配的目标数据表。如果没有,则数据库服务器已完成对租户定制字段中的非索引字段分配目标数据表,此时继续执行后续步骤。例如,在步骤(6) 中确定table1为目标数据表后,租户定制字段中未匹配的非索引字段为Address。数据库服务器重复执行上述步骤(6),计算数据表table1、table2、table3、table4、 table5的非索引字段的匹配值,得到table1的非索引类型匹配值Textmatch(t1) =0(因为table1的非索引数据列没有varchar类型),table2的非索引类型匹配值Textmatch(t2)=1(因为table2的非索引数据列有1个varchar类型),table3 的非索引类型匹配值Textmatch(t3)=1(因为table3的非索引数据列有1个 varchar类型),table4的非索引类型匹配值Textmatch(t4)=1(因为table4的非索引数据列有1个varchar类型),table5的非索引类型匹配值Textmatch(t5) =0(因为table5的非索引数据列没有varchar类型)。数据库服务器分别计算table1、 table2、table3、table4、table5中剩余未匹配数据列的数量,得到table1中剩余未匹配数据列的数量LeftNum(t1)=table1数据列的数量-Textmatch(t1)=4-0=4 (为1个integer类型的索引数据列、1个varchar类型的索引数据列、1个date 类型的非索引数据列和1个timestamp类型的非索引数据列),table2中剩余未匹配数据列的数量LeftNum(t2)=table2数据列的数量-Textmatch(t2)=2-1=1(为1个integer类型的非索引数据列),table3剩余未匹配数据列的数量 LeftNum(t3)=table3数据列的数量-Textmatch(t3)=3-1=2(为2个date类型的索引数据列),table4剩余未匹配数据列的数量LeftNum(t4)=table4数据列的数量-Textmatch(t4)=5-1=4(为1个integer类型的索引数据列、1个varchar 类型的索引数据列、1个integer类型的非索引数据列和1个varchar类型的非索引数据列),table5剩余未匹配数据列的数量LeftNum(t5)=table5数据列的数量-Textmatch(t5)=2-0=2(为1个date类型的索引数据列和1个integer类型的非索引数据列)。由此可知,非索引类型匹配值最高并且剩余未匹配数据列的数量最小的数据表为table2,因此table2为一个目标数据表。此时,租户定制字段中在索引字段匹配过程(步骤(2)、(3)、(4)、(5))中与目标数据表table1已匹配的字段为Name、PhoneNo、Entrydate、CreateTime,与目标数据表table5已匹配的字段为ContractDate、Age,在非索引字段匹配过程 (步骤(6)、(7))中与目标数据表table1已匹配的字段为GraduationDate、 LastModifiedTime,与目标数据表table2已匹配的字段为Address。此时租户定制字段中的所有非索引字段都找到与之匹配的目标数据表。
因此,针对租户HW公司定制的员工信息数据表的定制字段,数据库服务器确定的目标数据表集为table1、table5、table2。
S305,数据库服务器存储目标数据表集中每个目标数据表的至少一个数据列的属性与租户的定制字段的属性的对应关系。
对应关系存储在字段分配表中。对应关系指示每个目标数据表的数据列的类型和位置。例如,根据前文的举例,table1的varchar和integer类型的索引数据列分别与租户定制字段中的索引字段Name和PhoneNo相匹配,table1的date 和timestamp类型的非索引数据列与租户定制字段中的非索引字段Entrydate和 Createtime相匹配,因此,数据库服务器存储这些相匹配的字段的对应关系,如表2-1所示
表2-1
Figure GDA0003619193800000151
类似的,由于目标数据表集包括table5、table2,数据库服务器也相应存储table5、table2的数据列的属性与租户定制字段属性的对应关系。数据库服务器还存储table1中非索引数据列与定制字段GraduationDate、LastModifiedTime的对应关系。
在前文例子中可以看到,在确定目标数据表集的过程中table1出现两次, table1中date类型的非索引数据列与定制字段中的Entrydate和Gradudationdate 对应,timestamp类型的非索引数据列与定制字段中的CreateTime和 LastModifiedTime对应。为了能够区分同一数据表中同一数据列对应租户定制字段中的不同字段,引入组标识以区分。具体说明如下。
在前文步骤(4)后步骤(5)前增加步骤(4a)。
(4a)步骤(2)、(3)中得到的索引类型匹配值最高且非索引类型匹配值最高的数据表中成功匹配的索引数据列和非索引数据列为一组字段存储组,数据库服务器为该字段存储组中的每个数据列的属性与相应的租户定制字段的属性的对应关系分配相同的组标识。
在执行步骤(5)时,如果数据库服务器确定租户定制字段中还有未匹配的索引字段,则除了前文所述的重复执行步骤(2)、(3)、(4)之外,还重复执行步骤(4a),为新产生的字段存储组中的每个数据列的属性与相应的租户定制字段的属性的对应关系分配相同的组标识。当同一个目标数据表中的一个索引数据列的属性与定制字段中的多个索引字段的属性具有对应关系时,每个对应关系的组标识不同。当同一个目标数据表中的一个非索引字段的属性与定制字段中的多个非索引字段的属性的具有对应关系时,每个对应关系的组标识不同。在一种可能的实现方式中,组标识的值从0开始依次增加。
例如,数据库服务器为table1的varchar和integer类型的索引数据列与租户定制字段中的索引字段Name和PhoneNo的对应关系,以及table1的date和 timestamp类型的非索引数据列与租户定制字段中的非索引字段Entrydate和 Createtime的对应关系分配相同的组标识,组标识的值为0。数据库服务器为 table5的date类型的索引数据列与租户定制字段中的索引字段ContractDate的对应关系,以及table5的integer类型的非索引数据列与租户定制字段中的非索引字段Age的对应关系分配相同的组标识,组标识的值为1。
类似的,在前文步骤(6)后步骤(7)前增加步骤(6a)。
(6a)步骤(6)中得到的非索引类型匹配值最高且剩余未匹配数据列的数量最小的数据表中成功匹配的非索引数据列为一组字段存储组,数据库服务器为该字段存储组中的每个数据列的属性与相应的租户定制字段的属性的对应关系分配相同的组标识。组标识的值在执行完步骤(2)、(3)、(4)、(4a)、 (5)后组标识的值的基础上依次增加。
在执行步骤(7)时,如果数据库服务器确定租户定制字段中还有未匹配的非索引字段,则除了前文所述的重复执行步骤(6)之外,还重复执行步骤(6a),为新产生的字段存储组中的每个数据列的属性与相应的租户定制字段的属性的对应关系分配相同的组标识。组标识的值在执行完步骤(6a)后组标识的值的基础上依次增加。
例如,在前文的举例中,数据库服务器已经为目标数据表集中的table1和 table5的数据列的属性与租户定制字段的属性的对应关系分配完组标识。在步骤(6a)、(7)中,数据库服务器继续进行组标识的分配。数据库服务器为table1 的date和timestamp类型的非索引数据列与租户定制字段中的非索引字段 GraduationDate和LastModifiedTime的对应关系分配相同的组标识,组标识的值为2。数据库服务器为table2的varchar类型的非索引数据列与租户定制字段中的非索引字段Address的对应关系分配相同的组标识,组标识的值为3。
数据库服务器存储目标数据表集中table1、table5、table2的数据列的属性与租户HW的定制字段的属性的对应关系如表2-2所示。
表2-2
Figure GDA0003619193800000161
通过将数据表中支持存储某一数据类型的数据列分配给相同类型的租户定制字段来存储租户数据,使得不必对租户数据进行类型转换,保证了数据类型不失真,同时提升了性能。另一方面,通过组标识分组存储租户数据,能够有效减少NULL值,提升存储密度。
在S304下的步骤(6)、(7)中,数据库服务器计算数据表中剩余未匹配数据列的数量LeftNum的方法为:数据表数据列的数量减去该数据表的非索引类型匹配值。在这种方法下,剩余未匹配数据列包含了索引数据列和非索引数据列,如步骤(6)中“table5剩余未匹配数据列的数量LeftNum(t5)=table5 数据列的数量-Textmatch(t5)=2-0=2(为1个date类型的索引数据列和1个 integer类型的非索引数据列)”。这种方法可能会存在数据表索引数据列为空的情况,有可能会降低数据查询效率。在另一种可能的实施方式中,在已经完成对租户定制字段中的索引字段分配目标数据表后,上述步骤(6)、(7)中进行对租户定制字段中的非索引字段分配目标数据表时,只在没有索引数据列的数据表中进行。对于上述的table1、table2、table3、table4、table5数据表,只有table2没有索引数据列,因此,对于租户定制字段中未匹配的非索引字段 Address、GraduationDate、LastModifiedTime,数据库服务器只计算table2的非索引类型匹配值Textmatch,Textmatch(t2)=1(为1个varchar类型的非索引数据列与Address相匹配)。假设数据库服务器还创建了table6、table7,table6、 table7的索引特征信息和字段特征信息为
table6索引数据列数量0
非索引数据列类型date,数量1,位置F1列
非索引数据列类型timestamp,数量1,位置F2列
table7索引数据列数量0
非索引数据列类型date,数量1,位置F1列
非索引数据列类型timestamp,数量2,位置F2列,F3列
则由于table6、table7也没有索引数据列,数据库服务器还计算table6、table7的非索引类型匹配值Textmatch,Textmatch(t6)=2(为1个date类型的非索引数据列与GraduationDate相匹配,1个timestamp类型的非索引数据列与 LastModifiedTime相匹配),Textmatch(t7)=2(为1个date类型的非索引数据列与GraduationDate相匹配,1个timestamp类型的非索引数据列与 LastModifiedTime相匹配)。table2中剩余未匹配数据列的数量LeftNum(t2) =table2数据列的数量-Textmatch(t2)=2-1=1(为1个integer类型的非索引数据列),table6中剩余未匹配数据列的数量LeftNum(t6)=table6数据列的数量-Textmatch(t6)=2-2=0。table7中剩余未匹配数据列的数量LeftNum(t7) =table7数据列的数量-Textmatch(t7)=3-2=1(为1个timestamp类型的非索引数据列)。则table2和table6的非索引类型匹配值Textmatch最高并且剩余未匹配数据列的数量LeftNum最小,为目标数据表。在这种实施方式下,针对租户HW公司定制的员工信息数据表的定制字段,数据库服务器确定的目标数据表集为table1、table5、table2、table6。此后,数据库服务器执行后续S305、S306、 S307步骤,此处不再赘述。
在前文所述的数据库服务器确定目标数据表的过程中,采用的是先进行租户定制字段中索引字段的匹配,再进行非索引字段的匹配。在实际应用中,也可以先进行定制字段中的非索引字段的匹配,再进行索引字段的匹配。具体方法与前述方法类似,此处不再赘述。
在前文所述的数据库服务器确定目标数据表的过程中,步骤(3)中定制字段中相同类型的字段有多个(如Entrydate、GraduationDate、ContractDate),数据库服务器可以根据预先设置的规则确定其中的某个来优先与数据表的相同类型的数据列匹配,前文是按照租户定制数据表命令中的字段顺序优先将 Entrydate与table1中的date类型匹配,这种按顺序匹配的规则是用于对确定目标数据表的过程进行说明,不作为对本申请实施例确定目标数据表的过程的限制。
根据本申请实施例提供的技术方案,通过从数据库服务器创建的多个数据表中确定与租户定制字段相匹配的目标数据表集,将租户的定制字段对应到每个目标数据表的数据列,实现了逻辑多租模式下租户使用同一套数据模式进行个性化定制数据模式的目的,提高了个性化定制数据模式的灵活性。
在定制完数据表后,租户可以在定制的数据表中存储数据。数据库服务器具体进行如下操作。
S1,数据库服务器接收来自租户的数据。
S2,数据库服务器根据对应关系在目标数据表集中存储该租户的数据。
例如,在定制完数据表后,租户HW向数据库服务器发送如图4所示的数据进行存储。数据库服务器根据前文确定的表2-2中的对应关系,在目标数据表集table1、table5、table2中存储图4所示的数据,如图5所示。从图5中可以看出,table5中存储了组标识为1的Huawei的两行数据,一行的行标识为100,另一行的行标识为101,F1列存储的是租户HW发送的数据中的ContractDate, F2列存储的是租户HW发送的数据中的Age。table2中存储了组标识为3的 Huawei的两行数据,一行的行标识为100,另一行的行标识为101,F2列存储的是租户HW发送的数据中的Address,F1列为NULL是由于在前文的字段匹配过程中,租户定制字段没有与table2的位于F1列的integer类型的数据列相匹配,因此在数据存储时这一列不存储HW发送的定制字段的相应数据。table1 中存储了组标识为0和2的Huawei的两行数据,一行的行标识为100,另一行的行标识为101,对于组标识为0的数据,F1列存储的是租户HW发送的数据中的PhoneNo,F2列存储的是租户HW发送的数据中的Name,F3列存储的是租户HW发送的数据中的Entrydate,F4列存储的是租户HW发送的数据中的 Createtime;对于组标识为2的数据,F3列存储的是租户HW发送的数据中的 GraduationDate,F4列存储的是租户HW发送的数据中的LastModifiedTime。对于组标识为2的数据,F1、F2列为NULL是由于在前文的字段匹配过程中,租户定制字段没有与table1的位于F1列的integer类型、F2列的varchar类型的数据列相匹配,因此在数据存储时这两列不存储HW发送的定制字段的相应数据。
行标识是用于标识租户定制的数据表中的每行记录,因此行标识相同的数据对应租户发送的数据中的一条记录,如行标识为100的table1、table5、table2 中的数据为租户HW发送的图4中的第一行数据,即Bill的信息,行标识为101 的table1、table5、table2中的数据为租户HW发送的图4中的第二行数据,即 Kate的信息。
table1中的F3、F4列重复使用,可以看到,采用上述数据存储方法,能够支持租户定制字段超出数据表的数据列数量的情况,采用分行分组存储的方式实现。
前文介绍了本申请实施例提供的一种定制数据表的方法,接下来结合图6 介绍在该定制数据表的方法基础上对数据进行操作的方法。
S601,数据服务器接收来自租户对该租户定制的数据表的操作命令,该操作命令携带该租户的租户标识。
操作命令也可以为操作请求。
该租户为前文实施例中在数据库服务器中定制了数据表的租户。例如前文所述的租户HW,租户标识为Huawei,定制的数据表为employee。
操作命令具体包括对数据进行增加、删除、修改以及查询,可以通过数据操纵语言(Data Manipulation Language,DML)命令来实现。以查询操作为例,如租户HW向数据库服务器发送对employee数据表的全表查询命令,命令如下 select*from employee;/***tenantid=Huawei***/
S602,数据库服务器根据存储的目标数据表中数据列的属性与该租户标识对应的租户定制字段的属性的对应关系,确定该租户标识对应的数据列所在的目标数据表。
目标数据表中数据列的属性与租户定制字段的属性的对应关系的详细描述见上文,此处不再赘述。
S603,数据库服务器对确定出的目标数据表执行该操作命令。
具体的,数据库服务器生成该操作命令的转换命令,转换命令携带确定出的目标数据表的标识和该租户标识。数据库服务器对确定出的目标数据表执行该转换命令
该操作命令还可以携带该租户的至少一个定制字段,则数据库服务器根据操作命令携带的租户标识和该租户的至少一个定制字段,从存储的对应关系中确定该至少一个定制字段对应的目标数据表的数据列。在这种情况下,数据库服务器生成的操作命令的转换命令除了携带目标数据表的标识和租户标识外,还携带确定的目标数据表的数据列的标识。另外,转换命令还可以携带为该至少一个定制字段与目标数据表的数据列的对应关系分配的组标识。转换命令可以通过结构化查询语言(Structured Query Language,SQL)命令来实现。
数据库服务器执行转换命令,从操作的第一个目标数据表中确定操作命令对应的数据的行标识,根据该行标识从其他目标数据表中确定具有该行标识的数据,根据该行标识组合第一个目标数据表以及其他目标数据表中的数据,向租户返回操作结果。
例如,租户HW向数据库服务器发送的操作命令为对employee数据表的查询命令,命令如下:
select Name,Age,PhoneNo,Address,Createtime,Entrydate,GraduationDate,ContractDate,LastModifiedTime from employee where Entrydate=‘20170101’; /***tenantid=Huawei***/
数据库服务器根据前文描述中存储的数据列的属性与租户定制字段的属性的对应关系,确定操作命令中Name,Age,PhoneNo,Address,Createtime, Entrydate,GraduationDate,ContractDate,LastModifiedTime对应的数据列,以及各对应关系的组标识。数据库服务器根据各组标识生成的转换命令如下:
SQL1:select Row_id,Group_id,F1,F2,F3,F4 from table1 where Tenant_id=‘Huawei’and Table_name=‘employee’and Group_id=0and F3=‘20170101’;
SQL2:select Row_id,Group_id,F1,F2 from table5 where Tenant_id=‘Huawei’and Table_name=‘employee’and Row_id=100and Group_id=1;
SQL3:select Row_id,Group_id,F3,F4 from table1 where Tenant_id=‘Huawei’and Table_name=‘employee’and Row_id=100and Group_id=2;
SQL4:select Row_id,Group_id,F2 from table2 where Tenant_id=‘Huawei’and Table_name=‘employee’and Row_id=100and Group_id=3;
在根据操作命令中的定制字段确定对应的数据表的数据列的过程中,可以得到相应的目标数据表的标识、组标识以及数据列的位置(数据列的位置通过数据列的标识确定)。数据库服务器根据其中一个目标数据表的标识、组标识以及相应数据列的位置在该目标数据表中确定待查找数据的行标识,根据该行标识以及其他目标数据表的标识、组标识以及相应数据列的位置在其他目标数据表中查找数据。具体先查询哪一个目标数据表来确定行标识,本申请实施例不做限制,在实际应用中可以根据需要进行配置。
在上述例子中,由于需要查询的是Entrydate=‘20170101’的员工数据,而Entrydate存储在table1中,因此先查询table1,得到table1中Entrydate=‘2017-01-01’的数据的行标识是100,再根据行标识100在其他数据表中查找数据,即执行SQL2、SQL3、SQL4。在确定了行标识后,可以并行执行转换命令,即SQL2、SQL3、SQL4可以并行执行。
在执行了SQL1后,得到如下数据
Row_id=100,Group_id=0,F1=18999999999,F2=Bill,F3=20170101, F4=20121212101010。
在执行了SQL2后,得到如下数据
Row_id=100,Group_id=1,F1=20200101,F2=20。
在执行了SQL3后,得到如下数据
Row_id=100,Group_id=2,F3=20160601,F4=20180101101010。
在执行了SQL4后,得到如下数据
Row_id=100,Group_id=3,F2=bantian。
数据库服务器根据行标识组合查找到的数据,向租户返回操作结果:
Name=Bill,Age=20,PhoneNo=18999999999,Address=bantian, Createtime=20121212101010,Entrydate=20170101,GraduationDate=20160601, ContractDate=20200101,LastModifiedTime=20180101101010。
在上述例子中,查询命令涉及到组标识为0,1,2,3的字段。如果一个操作命令不涉及某一组标识中的任何字段,则数据库服务器不需生成涉及该组标识的转换命令。例如,若上述查询命令中不携带Address字段:
select Name,Age,PhoneNo,Createtime,Entrydate,GraduationDate,ContractDate,LastModifiedTime from employee where Entrydate=‘20170101’; /***tenantid=Huawei***/
则数据库服务器只生成上述转换命令SQL1、SQL2、SQL3,不生成SQL4,也就不会查询table2。
前文介绍的租户在定制的数据表中存储数据的操作属于“增加”操作的一种。对存储命令的处理方式与举例中的查询命令类似,因此不再赘述。
根据本申请实施例提供的技术方案,通过存储目标数据表的数据列的属性与租户定制字段的属性的对应关系,能够在租户对定制的数据表进行操作时根据该对应关系确定目标数据表集,对确定的目标数据表集执行租户的操作命令,实现了逻辑多租模式下租户使用同一套数据模式进行个性化定制数据模式的目的,提高了个性化定制数据模式的灵活性。
图7是依据本申请一实施例的定制数据表的装置700的结构示意图。定制数据表的装置700包括接收模块701和处理模块702。定制数据表的装置700 为图2中的数据库服务器,接收模块701可以用来执行图3实施例中的S303。处理模块702可以用来执行图3实施例S301、S302、S304、S305。
图8是依据本申请一实施例的数据操作装置800的结构示意图。数据操作装置800包括接收模块801和处理模块802。数据操作装置为图2中的数据库服务器,接收模块801可以用来执行图6实施例中的S601。处理模块802可以用来执行图6实施例中S602、S603。
图9是依据本申请一实施例的计算机设备900的硬件结构示意图。如图9 所示,计算机设备900包括处理器902、存储器904、通信接口906和总线908。其中,处理器902、存储器904和通信接口906通过总线908实现彼此之间的通信连接。
处理器902可以采用通用的中央处理器(Central Processing Unit,CPU),微处理器,应用专用集成电路(Application Specific Integrated Circuit,ASIC),或者一个或多个集成电路,用于执行相关程序,以实现本申请实施例所提供的技术方案。
存储器904可以是只读存储器(Read Only Memory,ROM),静态存储设备,动态存储设备或者随机存取存储器(Random Access Memory,RAM)。存储器904可以存储操作系统9041和其他应用程序9042。在通过软件或者固件来实现本申请实施例提供的技术方案时,用于实现本申请实施例提供的技术方案的程序代码保存在存储器904中,并由处理器902来执行。
通信接口906使用例如但不限于收发器一类的收发装置,来实现与其他设备或通信网络之间的通信。
总线908可包括一通路,在各个部件(例如处理器902、存储器904、通信接口906)之间传送信息。
当定制数据表的装置通过计算机设备900实现时,处理器902用于执行存储器904存储的用于实现本申请实施例提供的技术方案的程序代码,以实现图 3实施例所示的方法。当数据操作装置通过计算机设备900实现时,处理器902 用于执行存储器904 存储的用于实现本申请实施例提供的技术方案的程序代码,以实现图6实施例所示的方法。
应注意,尽管图9所示的通用计算机结构900仅仅示出了处理器902、存储器904、通信接口906和总线908,但是在具体实现过程中,本领域的技术人员应当明白,上述定制数据表的装置、数据操作装置还包含实现正常运行所必须的其他器件。同时,根据具体需要,本领域的技术人员应当明白,上述定制数据表的装置、数据操作装置还可包含实现其他附加功能的硬件器件。此外,本领域的技术人员应当明白,上述定制数据表的装置、数据操作装置也可仅仅包含实现本申请实施例所必须的器件,而不必包含图9中所示的全部器件。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM, Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

Claims (32)

1.一种定制数据表的方法,其特征在于,应用于软件即服务SaaS系统,包括以下步骤:
数据库服务器接收来自租户的定制数据表命令,所述命令携带所述租户定制字段的属性;
所述数据库服务器从多个数据表中确定目标数据表集,所述目标数据表集中每个目标数据表的至少一个数据列的属性与所述定制字段的属性相对应,具体包括:所述数据库服务器遍历多个所述数据表的索引特征信息,计算每个所述数据表的索引数据列类型与租户的定制字段中索引字段的匹配值,当确定某一数据表的索引数据列的数据类型与所述索引字段的数据类型相同时,遍历索引类型匹配值最高的数据表的字段特征信息,计算所述数据表的非索引数据列类型与租户定制字段中非索引字段的匹配值,确定非索引类型匹配值最高且剩余未匹配数据列的数量最小的数据表作为目标数据表,直至获取所述租户定制字段中的所有非索引字段对应匹配的多个目标数据表以构成所述目标数据表集;
所述数据库服务器存储所述目标数据表集中每个目标数据表的所述至少一个数据列的属性与所述租户定制字段的属性的对应关系。
2.根据权利要求1所述的方法,其特征在于,所述属性包括数据类型,所述数据列的属性与所述定制字段的属性相对应包括:所述数据列的数据类型与所述定制字段的数据类型相同。
3.根据权利要求2所述的方法,其特征在于,所述定制字段包括索引字段和非索引字段,所述数据列包括索引数据列和非索引数据列;所述数据列的数据类型与所述定制字段的数据类型相同包括:所述索引数据列的数据类型与所述索引字段的数据类型相同,或者,所述非索引数据列的数据类型与所述非索引字段的数据类型相同。
4.根据权利要求1至3任意一项所述的方法,其特征在于,所述至少一个数据列的属性与所述定制字段的属性相对应包括:同一个目标数据表中的一个数据列的属性与一个定制字段的属性相对应;所述同一个目标数据表中的一个数据列的属性与一个定制字段的属性相对应包括:同一个目标数据表中的一个索引数据列的数据类型与所述定制字段中的一个索引字段的数据类型相同,或者,同一个目标数据表中的一个非索引数据列的数据类型与所述定制字段中的一个非索引字段的数据类型相同。
5.根据权利要求1至3任意一项所述的方法,其特征在于,所述至少一个数据列的属性与所述定制字段的属性相对应包括:同一个目标数据表中的一个数据列的属性与多个定制字段的属性相对应;所述同一个目标数据表中的一个数据列的属性与多个定制字段的属性相对应包括:同一个目标数据表中的一个索引数据列的数据类型与所述定制字段中的多个索引字段的数据类型相同,或者,同一个目标数据表中的一个非索引数据列的数据类型与所述定制字段中的多个非索引字段的数据类型相同。
6.根据权利要求1至3中任意一项所述的方法,其特征在于,所述数据库服务器为每个所述对应关系分配组标识;当同一个目标数据表中的一个数据列的属性与多个定制字段的属性相对应时,每个对应关系的组标识不同。
7.根据权利要求1至3中任意一项所述的方法,其特征在于,所述多个数据表的表结构不同,具体包括数据列的数据类型不同、数据列的数量不同、索引数据列不同中的至少一种。
8.根据权利要求1至3中任意一项所述的方法,其特征在于,所述对应关系存储在所述数据库服务器创建的字段分配表中。
9.一种数据操作方法,其特征在于,应用于软件即服务SaaS系统,包括以下步骤:
数据库服务器接收来自租户的对所述租户定制的数据表的操作命令,所述操作命令携带所述租户的租户标识;
所述数据库服务器根据存储的目标数据表中数据列的属性与所述租户标识对应的租户定制字段的属性的对应关系,确定所述租户标识对应的数据列所在的目标数据表;
所述数据库服务器对所述确定出的目标数据表执行所述操作命令,其中,所述目标数据表包含于目标数据表集且根据租户的定制数据表命令中的携带所述租户定制字段的属性所匹配确定,确定所述目标数据表集具体包括:所述数据库服务器遍历多个所述数据表的索引特征信息,计算每个数据表的索引数据列类型与租户的定制字段中索引字段的匹配值,当确定某一数据表的索引数据列的数据类型与所述索引字段的数据类型相同时,遍历索引类型匹配值最高的数据表的字段特征信息,计算所述数据表的非索引数据列类型与租户定制字段中非索引字段的匹配值,确定非索引类型匹配值最高且剩余未匹配数据列的数量最小的数据表作为目标数据表,直至获取所述租户定制字段中的所有非索引字段对应匹配的多个目标数据表以构成所述目标数据表集。
10.根据权利要求9所述的方法,其特征在于,所述数据列的属性与租户定制字段的属性的对应关系包括:同一个目标数据表中的一个数据列的属性与一个定制字段的属性相对应;所述同一个目标数据表中的一个数据列的属性与一个定制字段的属性相对应包括:同一个目标数据表中的一个索引数据列的数据类型与定制字段中的一个索引字段的数据类型相同,或者,同一个目标数据表中的一个非索引数据列的数据类型与定制字段中的一个非索引字段的数据类型相同。
11.根据权利要求9所述的方法,其特征在于,所述数据列的属性与租户定制字段的属性的对应关系包括:同一个目标数据表中的一个数据列的属性与多个定制字段的属性相对应;所述同一个目标数据表中的一个数据列的属性与多个定制字段的属性相对应包括:同一个目标数据表中的一个索引数据列的数据类型与定制字段中的多个索引字段的数据类型相同,或者,同一个目标数据表中的一个非索引数据列的数据类型与定制字段中的多个非索引字段的数据类型相同。
12.根据权利要求9至11任意一项所述的方法,其特征在于,所述数据库服务器对所述确定出的目标数据表执行所述操作命令包括:所述数据库服务器生成所述操作命令的转换命令,所述转换命令携带所述确定的目标数据表的标识和所述租户标识,所述数据库服务器对所述确定出的目标数据表执行所述转换命令。
13.根据权利要求12所述的方法,其特征在于,所述操作命令还携带所述租户的至少一个定制字段,则所述数据库服务器根据所述操作命令携带的租户标识和所述租户的至少一个定制字段,从所述存储的对应关系中确定所述至少一个定制字段对应的目标数据表的数据列;
所述数据库服务器对所述确定出的目标数据表执行所述操作命令包括:所述数据库服务器生成所述操作命令的转换命令,所述转换命令携带所述确定的目标数据表的标识、所述确定的目标数据表的数据列的标识和所述租户标识,所述数据库服务器对所述确定出的目标数据表的数据列执行所述转换命令。
14.根据权利要求13所述的方法,其特征在于,所述转换命令还携带为所述确定的所述至少一个定制字段与目标数据表的数据列的对应关系分配的组标识。
15.根据权利要求12所述的方法,其特征在于,所述数据库服务器执行所述转换命令时,从操作的第一个目标数据表中确定所述操作命令对应的数据的行标识,根据所述行标识从其他目标数据表中确定具有所述行标识的数据,根据所述行标识组合所述第一个目标数据表以及所述其他目标数据表中的数据,向所述租户返回操作结果。
16.一种定制数据表的装置,其特征在于,应用于软件即服务SaaS系统,包括接收模块和处理模块:
所述接收模块,用于接收来自租户的定制数据表命令,所述命令携带所述租户定制字段的属性;
所述处理模块,用于从多个数据表中确定目标数据表集,所述目标数据表集中每个目标数据表的至少一个数据列的属性与所述定制字段的属性相对应,具体包括:所述数据库服务器遍历多个所述数据表的索引特征信息,计算每个所述数据表的索引数据列类型与租户的定制字段中索引字段的匹配值,当确定某一数据表的索引数据列的数据类型与所述索引字段的数据类型相同时,遍历索引类型匹配值最高的数据表的字段特征信息,计算所述数据表的非索引数据列类型与租户定制字段中非索引字段的匹配值,确定非索引类型匹配值最高且剩余未匹配数据列的数量最小的数据表作为目标数据表,直至获取所述租户定制字段中的所有非索引字段对应匹配的多个目标数据表以构成所述目标数据表集;
所述处理模块,还用于存储所述目标数据表集中每个目标数据表的所述至少一个数据列的属性与所述租户定制字段的属性的对应关系。
17.根据权利要求16所述的装置,其特征在于,所述属性包括数据类型,所述数据列的属性与所述定制字段的属性相对应包括:所述数据列的数据类型与所述定制字段的数据类型相同。
18.根据权利要求17所述的装置,其特征在于,所述定制字段包括索引字段和非索引字段,所述数据列包括索引数据列和非索引数据列;所述数据列的数据类型与所述定制字段的数据类型相同包括:所述索引数据列的数据类型与所述索引字段的数据类型相同,或者,所述非索引数据列的数据类型与所述非索引字段的数据类型相同。
19.根据权利要求16至18任意一项所述的装置,其特征在于,所述至少一个数据列的属性与所述定制字段的属性相对应包括:同一个目标数据表中的一个数据列的属性与一个定制字段的属性相对应;所述同一个目标数据表中的一个数据列的属性与一个定制字段的属性相对应包括:同一个目标数据表中的一个索引数据列的数据类型与所述定制字段中的一个索引字段的数据类型相同,或者,同一个目标数据表中的一个非索引数据列的数据类型与所述定制字段中的一个非索引字段的数据类型相同。
20.根据权利要求16至18任意一项所述的装置,其特征在于,所述至少一个数据列的属性与所述定制字段的属性相对应包括:同一个目标数据表中的一个数据列的属性与多个定制字段的属性相对应;所述同一个目标数据表中的一个数据列的属性与多个定制字段的属性相对应包括:同一个目标数据表中的一个索引数据列的数据类型与所述定制字段中的多个索引字段的数据类型相同,或者,同一个目标数据表中的一个非索引数据列的数据类型与所述定制字段中的多个非索引字段的数据类型相同。
21.根据权利要求16至18中任意一项所述的装置,其特征在于,所述处理模块还用于为每个所述对应关系分配组标识;当同一个目标数据表中的一个数据列的属性与多个定制字段的属性相对应时,每个对应关系的组标识不同。
22.根据权利要求16至18中任意一项所述的装置,其特征在于,所述多个数据表的表结构不同,具体包括数据列的数据类型不同、数据列的数量不同、索引数据列不同中的至少一种。
23.根据权利要求16至18中任意一项所述的装置,其特征在于,所述对应关系存储在所述处理模块创建的字段分配表中。
24.一种数据操作装置,其特征在于,应用于软件即服务SaaS系统,包括接收模块和处理模块:
所述接收模块,用于接收来自租户的对所述租户定制的数据表的操作命令,所述操作命令携带待所述租户的租户标识;
所述处理模块,用于根据存储的目标数据表中数据列的属性与所述租户标识对应的租户定制字段的属性的对应关系,确定所述租户标识对应的数据列所在的目标数据表;
所述处理模块,还用于对所述确定出的目标数据集执行所述操作命令,其中,所述目标数据表包含于目标数据表集且根据租户的定制数据表命令中的携带所述租户定制字段的属性所匹配确定,确定所述目标数据表集具体包括:所述数据库服务器遍历多个所述数据表的索引特征信息,计算每个数据表的索引数据列类型与租户的定制字段中索引字段的匹配值,当确定某一数据表的索引数据列的数据类型与所述索引字段的数据类型相同时,遍历索引类型匹配值最高的数据表的字段特征信息,计算所述数据表的非索引数据列类型与租户定制字段中非索引字段的匹配值,确定非索引类型匹配值最高且剩余未匹配数据列的数量最小的数据表作为目标数据表,直至获取所述租户定制字段中的所有非索引字段对应匹配的多个目标数据表以构成所述目标数据表。
25.根据权利要求24所述的装置,其特征在于,所述数据列的属性与租户定制字段的属性的对应关系包括:同一个目标数据表中的一个数据列的属性与一个定制字段的属性相对应;所述同一个目标数据表中的一个数据列的属性与一个定制字段的属性相对应包括:同一个目标数据表中的一个索引数据列的数据类型与定制字段中的一个索引字段的数据类型相同,或者,同一个目标数据表中的一个非索引数据列的数据类型与定制字段中的一个非索引字段的数据类型相同。
26.根据权利要求24所述的装置,其特征在于,所述数据列的属性与租户定制字段的属性的对应关系包括:同一个目标数据表中的一个数据列的属性与多个定制字段的属性相对应;所述同一个目标数据表中的一个数据列的属性与多个定制字段的属性相对应包括:同一个目标数据表中的一个索引数据列的数据类型与定制字段中的多个索引字段的数据类型相同,或者,同一个目标数据表中的一个非索引数据列的数据类型与定制字段中的多个非索引字段的数据类型相同。
27.根据权利要求24至26任意一项所述的装置,其特征在于,所述处理模块对所述确定出的目标数据表执行所述操作命令包括:所述处理模块生成所述操作命令的转换命令,所述转换命令携带所述确定的目标数据表的标识和所述租户标识,所述处理模块对所述确定出的目标数据表执行所述转换命令。
28.根据权利要求27所述的装置,其特征在于,所述操作命令还携带所述租户的至少一个定制字段,则所述处理模块根据所述操作命令携带的租户标识和所述租户的至少一个定制字段,从所述存储的对应关系中确定所述至少一个定制字段对应的目标数据表的数据列;
所述处理模块对所述确定出的目标数据表执行所述操作命令包括:所述处理模块生成所述操作命令的转换命令,所述转换命令携带所述确定的目标数据表的标识、所述确定的目标数据表的数据列的标识和所述租户标识,所述处理模块对所述确定出的目标数据表的数据列执行所述转换命令。
29.根据权利要求28所述的装置,其特征在于,所述转换命令还携带为所述确定的所述至少一个定制字段与目标数据表的数据列的对应关系分配的组标识。
30.根据权利要求27所述的装置,其特征在于,所述处理模块执行所述转换命令时,从操作的第一个目标数据表中确定所述操作命令对应的数据的行标识,根据所述行标识从其他目标数据表中确定具有所述行标识的数据,根据所述行标识组合所述第一个目标数据表以及所述其他目标数据表中的数据,向所述租户返回操作结果。
31.一种计算设备,包括:处理器、存储器、总线和通信接口;所述存储器用于存储计算设备执行指令,所述处理器与所述存储器通过所述总线连接,当所述计算设备运行时,所述处理器执行所述存储器存储的所述计算设备执行指令,以使所述计算设备执行权利要求1至8任意一项所述的方法。
32.一种计算设备,包括:处理器、存储器、总线和通信接口;所述存储器用于存储计算设备执行指令,所述处理器与所述存储器通过所述总线连接,当所述计算设备运行时,所述处理器执行所述存储器存储的所述计算设备执行指令,以使所述计算设备执行权利要求9至15任意一项所述的方法。
CN201810366345.7A 2018-04-23 2018-04-23 一种定制数据表的方法、数据操作方法及装置 Active CN110399368B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201810366345.7A CN110399368B (zh) 2018-04-23 2018-04-23 一种定制数据表的方法、数据操作方法及装置
PCT/CN2019/075772 WO2019205790A1 (zh) 2018-04-23 2019-02-22 一种数据操作方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810366345.7A CN110399368B (zh) 2018-04-23 2018-04-23 一种定制数据表的方法、数据操作方法及装置

Publications (2)

Publication Number Publication Date
CN110399368A CN110399368A (zh) 2019-11-01
CN110399368B true CN110399368B (zh) 2022-08-19

Family

ID=68294850

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810366345.7A Active CN110399368B (zh) 2018-04-23 2018-04-23 一种定制数据表的方法、数据操作方法及装置

Country Status (2)

Country Link
CN (1) CN110399368B (zh)
WO (1) WO2019205790A1 (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110990445B (zh) * 2019-12-05 2024-04-30 北京蜜莱坞网络科技有限公司 一种数据处理方法、装置、设备和介质
CN111581216A (zh) * 2020-05-09 2020-08-25 北京百度网讯科技有限公司 数据处理方法、装置、设备以及存储介质
CN111880773A (zh) * 2020-07-21 2020-11-03 北京达佳互联信息技术有限公司 一种数据处理方法、装置、电子设备及存储介质
CN112596857B (zh) * 2020-12-25 2024-06-21 北京知因智慧科技有限公司 一种SaaS多租户数据隔离的方法、装置、设备及介质
CN113672618A (zh) * 2021-08-12 2021-11-19 广州有信科技有限公司 一种基于元数据表的多租户数据处理方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101120337A (zh) * 2004-04-02 2008-02-06 易享信息技术(上海)有限公司 多租户数据库系统中的自定义实体和字段
CN103455512A (zh) * 2012-05-31 2013-12-18 上海博腾信息科技有限公司 Saas平台多租户数据管理模型
CN105488117A (zh) * 2015-11-23 2016-04-13 浪潮集团有限公司 一种自定义对象的处理方法及装置
CN106469224A (zh) * 2016-09-26 2017-03-01 武汉工程大学 一种用于SaaS平台的可扩展数据模型
CN107122364A (zh) * 2016-02-25 2017-09-01 华为技术有限公司 数据操作方法和数据管理服务器

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10417611B2 (en) * 2010-05-18 2019-09-17 Salesforce.Com, Inc. Methods and systems for providing multiple column custom indexes in a multi-tenant database environment
CN103778107B (zh) * 2012-10-25 2017-05-03 上海宝信软件股份有限公司 一种基于excel快速动态生成表单的方法与平台

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101120337A (zh) * 2004-04-02 2008-02-06 易享信息技术(上海)有限公司 多租户数据库系统中的自定义实体和字段
CN101777057A (zh) * 2004-04-02 2010-07-14 易享信息技术(上海)有限公司 多租户数据库系统中为多个租户存储自定义字段的方法和系统
CN103455512A (zh) * 2012-05-31 2013-12-18 上海博腾信息科技有限公司 Saas平台多租户数据管理模型
CN105488117A (zh) * 2015-11-23 2016-04-13 浪潮集团有限公司 一种自定义对象的处理方法及装置
CN107122364A (zh) * 2016-02-25 2017-09-01 华为技术有限公司 数据操作方法和数据管理服务器
CN106469224A (zh) * 2016-09-26 2017-03-01 武汉工程大学 一种用于SaaS平台的可扩展数据模型

Also Published As

Publication number Publication date
WO2019205790A1 (zh) 2019-10-31
CN110399368A (zh) 2019-11-01

Similar Documents

Publication Publication Date Title
CN110399368B (zh) 一种定制数据表的方法、数据操作方法及装置
US10963428B2 (en) Multi-range and runtime pruning
US10606834B2 (en) Methods and apparatus of shared expression evaluation across RDBMS and storage layer
US9507875B2 (en) Symbolic hyper-graph database
CN108932313B (zh) 数据处理方法、装置、电子设备及存储介质
US20210224235A1 (en) Parallel and efficient technique for building and maintaining a main memory csr based graph index in a rdbms
US10534770B2 (en) Parallelizing SQL on distributed file systems
WO2020135613A1 (zh) 数据查询处理方法、装置及系统、计算机可读存储介质
US11531704B2 (en) Autonomously partitioning database tables
CN111767303A (zh) 一种数据查询方法、装置、服务器及可读存储介质
US20090024654A1 (en) Multi-value property storage and query support
CN105335403A (zh) 数据库访问方法及装置、数据库系统
US9830385B2 (en) Methods and apparatus for partitioning data
EP3376403A1 (en) Method of accessing distributed database and device providing distributed data service
WO2016191995A1 (zh) 一种分布式数据库中关联表分区的方法和设备
US20200250192A1 (en) Processing queries associated with multiple file formats based on identified partition and data container objects
CN109906447A (zh) 管理请求数据库系统中不存在的索引键的事务
CN114090695A (zh) 分布式数据库的查询优化的方法和装置
US11567957B2 (en) Incremental addition of data to partitions in database tables
CN111737228A (zh) 数据库的分库分表方法及装置
CN114443015A (zh) 一种基于数据库元数据的增删改查服务接口生成方法
Suganya et al. Efficient fragmentation and allocation in distributed databases
CN112889039A (zh) 用于克隆后租户标识符转换的记录的标识
CN115934760A (zh) 数据库查询语句的优化方法、存储介质与计算机设备
EP4030312A1 (en) Method and apparatus for querying data, computing device, and storage medium

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
GR01 Patent grant
GR01 Patent grant