CN109144994B - 索引更新方法、***及相关装置 - Google Patents
索引更新方法、***及相关装置 Download PDFInfo
- Publication number
- CN109144994B CN109144994B CN201710464640.1A CN201710464640A CN109144994B CN 109144994 B CN109144994 B CN 109144994B CN 201710464640 A CN201710464640 A CN 201710464640A CN 109144994 B CN109144994 B CN 109144994B
- Authority
- CN
- China
- Prior art keywords
- index
- updating
- target
- metadata information
- data
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 44
- 230000001360 synchronised effect Effects 0.000 claims abstract description 35
- 230000004044 response Effects 0.000 claims abstract description 5
- 238000012545 processing Methods 0.000 claims description 26
- 238000012217 deletion Methods 0.000 abstract description 14
- 230000037430 deletion Effects 0.000 abstract description 14
- 238000004891 communication Methods 0.000 description 16
- 230000015654 memory Effects 0.000 description 14
- 230000006870 function Effects 0.000 description 12
- 238000013461 design Methods 0.000 description 7
- 238000007726 management method Methods 0.000 description 6
- 230000008859 change Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 238000005457 optimization Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 230000003993 interaction Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 101100317378 Mus musculus Wnt3 gene Proteins 0.000 description 1
- 238000013523 data management Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 235000019800 disodium phosphate Nutrition 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 238000011010 flushing procedure Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000011022 operating instruction Methods 0.000 description 1
- 238000012827 research and development Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2272—Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q30/00—Commerce
- G06Q30/06—Buying, selling or leasing transactions
- G06Q30/0645—Rental transactions; Leasing transactions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2315—Optimistic concurrency control
- G06F16/2329—Optimistic concurrency control using versioning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2336—Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
- G06F16/2343—Locking methods, e.g. distributed locking or locking implementation details
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/235—Update request formulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/256—Integrating or interfacing systems involving database management systems in federated or virtual databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/273—Asynchronous replication or reconciliation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q30/00—Commerce
- G06Q30/06—Buying, selling or leasing transactions
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Business, Economics & Management (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- Software Systems (AREA)
- Economics (AREA)
- General Business, Economics & Management (AREA)
- Strategic Management (AREA)
- Marketing (AREA)
- Development Economics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例公开了索引更新技术。在一种索引更新方法中,包括:接收索引更新请求,索引更新请求用于指示创建或删除与租户的逻辑表上的字段相关联的目标索引;响应于索引更新请求,更新数据库中逻辑表的元数据信息并通知协调服务;协调服务通知第二数据访问节点进行本地同步更新;各第二数据访问节点均完成本地同步更新后,进行数据异步更新。在本申请提供的方案中,在更新元数据信息至数据库后,分两步实现索引更新:第一步进行本地同步更新。本地同步更新后,后续针对逻辑表的数据访问请求可基于新的元数据信息;第二步当各数据访问节点均完成本地同步更新后再执行数据异步更新。通过上述两步更新可实现在线实时更新索引。
Description
技术领域
本申请涉及计算机领域,更具体地说,涉及宽表索引更新技术。
背景技术
在一些多租单实例架构的场景下,会使用宽表作为租户数据(即租户的自定义对象)的存储空间,因此,宽表存储了多个租户的租户数据。当然,请参见图1c,对用户而言,其看到的并不是宽表,而是逻辑表或业务表(例如订单、验收单、库存单等)。
索引作为数据库***中的关键数据结构,在数据库***的索引更新中发挥重要作用。通过使用索引可以实现快速访问物理数据库表中的记录。
然而,现有的索引更新方式存在局限性,只能针对全表数据创建索引,不能满足在某租户的租户数据上创建索引的需求,从而无法适应多租户场景。
为此,引入索引透视表,并通过元数据定义索引透视表中的索引数据,以实现为租户数据对应的逻辑表上的字段创建索引,进而满足在租户数据上创建索引的需求。
但是,现有的索引更新是在***空闲时执行的,并非在线实时的。因此,如何在线实时的更新索引,成为目前研发的一个课题。
发明内容
有鉴于此,本申请实施例的目的在于提供索引更新方法及相关装置,以实现在线实时更新索引。
为实现上述目的,本申请实施例提供如下技术方案:
一方面,本申请的实施例提供一种索引更新方法,包括第一数据访问节点接收索引更新请求,所述索引更新请求用于指示创建或删除与租户的逻辑表相关联的目标索引;响应于所述索引更新请求,第一数据访问节点更新数据库中所述逻辑表的元数据信息并通知协调服务所述逻辑表的元数据信息发生变更。而协调服务则通知第二数据访问节点对所述逻辑表的元数据信息进行本地同步更新;同时,第一数据访问节点也对所述逻辑表的元数据信息进行本地同步更新。在所有第二数据访问节点均完成本地同步更新后,第一数据访问节点进行数据异步更新。可见,在本实施例中,在更新元数据信息至数据库后,分两步实现索引更新:第一步各数据访问节点对逻辑表的元数据信息进行本地同步更新。本地同步更新后,各数据访问节点后续针对逻辑表的数据访问请求,可基于新的元数据信息;第二步,当各数据访问节点均完成本地同步更新后,再执行数据异步更新—创建或删除目标索引。通过上述两步更新,可实现在线实时更新索引。
在一个可能的设计中,在接收到所述索引更新请求之后、更新所述元数据信息之前,第一数据访问节点还会对所述逻辑表添加表锁;所述表锁用于禁止其他请求对所述逻辑表的元数据信息进行更新操作,这里的其他请求指涉及到对上述逻辑表的元数据信息进行更新操作的请求。而在完成所述数据异步更新之后,第一数据访问节点会释放所述表锁。在实际操作中,可能会有其他的索引更新请求也指示对同一逻辑表上的字段创建或删除索引,而表锁可避免多个请求同时更新同一逻辑表的元数据信息,从而避免数据更新混乱。
在一个可能的设计中,上述本地同步更新至少可包括:刷新本地缓存的、所述逻辑表的元数据信息;等待当前事务列表中的所有事务均结束后,通知所述协调服务完成本地同步更新。其中,等待当前事务列表中的事务结束,可保证当前事务(正在进行的数据操作)不受影响。
在一个可能的设计中,上述“本地同步更新”还可包括如下操作:设置本地缓存的、与所述逻辑表相关联的查询计划为失效状态。这是因为,此时的查询计划是在未更新元数信息之前生成的,将其设置为失效,可防止新的查询计划对其进行使用。需要说明的是,虽然查询计划作了失效处理,但当前事务列表中的事务仍可以使用失效状态的查询计划,只是新的查询请求不能使用失效状态的查询计划。
在一个可能的设计中,所述更新数据库中所述逻辑表的元数据信息至少包括更新所述数据库中所述逻辑表的元数据版本号。进一步的,对于创建索引,更新索引元数据信息可具体包括:A:将目标索引的索引元数据信息保存至数据库。B:将目标索引的状态设置为第一中间状态。具体的,可设计第一中间状态为“创建中”。处于第一中间状态的索引,不能被查询计划引用。之所以将目标索引状态设置为第一中间状态,是因为此时只是将目标索引的索引元数据信息保存至数据库,而目标索引本身并未真正创建成功。在此情况下如允许查询计划引用,则会导致查询失败。此外,第一中间状态在其他实施例中还有其他作用,本文后续将进行介绍;而对于删除索引,更新索引元数据信息可具体包括:将目标索引的状态设置为第二中间状态。具体的,可设计第二中间状态为“删除中”。更具体的,可将索引元数据表的状态(status)字段值设置为“deleting”表示“删除中”。处于第二中间状态的索引,也不能被查询计划引用。之所以将目标索引状态设置为第二中间状态,是为了防止查询计划对将删除的索引进行引用。无论是删除还是创建索引,第一数据访问节点都会更新数据库中目标逻辑表的元数据版本号。本实施例提供了更新数据库中所述逻辑表的元数据信息的具体方式,更好得实现了在线索引更新。
在一个可能的设计中,上述所述数据异步更新至少包括:根据所述索引更新请求创建目标索引或者删除目标索引。在创建所述目标索引或删除所述目标索引之后,所述数据异步更新还包括:更新所述目标租户数据记录中的元数据版本号。其中,对于创建目标索引,第一数据访问节点可查询宽表中与目标逻辑表相关联的租户数据记录,将目标租户数据记录中的数据同步至目标索引,同时更新目标租户数据记录中的元数据版本号。其中,目标租户数据记录包括:与所述逻辑表相关联且元数据版本号未更新的租户数据记录。当再查询不到目标租户数据记录后,第一数据访问节点将数据库中目标索引的状态设置为正常状态,并通知协调服务。则协调服务可再次通知第二数据访问节点再次刷新本地缓存的目标逻辑表的元数据信息,或仅刷新本地缓存的目标索引的状态;对于删除目标索引,在删除所述目标索引之后,所述数据异步更新还包括:删除所述数据库中所述目标索引的索引元数据信息,并通知所述协调服务;则协调服务可再次通知第二数据访问节点再次刷新本地缓存的所述逻辑表的元数据信息。
又一方面,本申请实施例提供了一种数据访问节点,该数据访问节点具有实现上述方法实际中数据访问节点行为的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。
又一方面,本申请实施例提供了一种索引更新***,包括应用节点、数据库节点以及上述的数据访问节点,该数据访问节点具有实现上述方法实际中数据访问节点行为的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。
又一方面,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。
又一方面,本申请提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。
又一方面,本申请提供了一种芯片***,该芯片***包括处理器,用于支持数据发送设备实现上述方面中所涉及的功能,例如,例如生成或处理上述方法中所涉及的数据和/或信息。在一种可能的设计中,所述芯片***还包括存储器,所述存储器,用于保存数据发送设备必要的程序指令和数据。该芯片***可以由芯片构成,也可以包含芯片和其他分立器件。
在本申请提供的方案中,在更新元数据信息至数据库后,分两步实现索引更新:第一步各数据访问节点对逻辑表的元数据信息进行本地同步更新。本地同步更新后,各数据访问节点后续针对逻辑表的数据访问请求,可基于新的元数据信息;第二步,当各数据访问节点均完成本地同步更新后,再执行数据异步更新—创建或删除目标索引。通过上述两步更新,可实现在线实时更新索引。
附图说明
图1a和图1b为本申请实施例提供的索引更新***示例性结构图;
图1c为本申请实施例提供的逻辑表与宽表关系示意图;
图2a为本申请实施例提供的数据访问节点的示例性结构图;
图2b为本申请实施例提供的一种更新装置的示例性结构图;
图2c为本申请实施例提供的另一种更新装置的示例性结构图;
图3为本申请实施例提供的一种索引更新方法的示例性流程图;
图4为本申请实施例提供的另一种索引更新方法的示例性流程图;
图5为本申请实施例提供的另一种索引更新方法的示例性流程图。
具体实施方式
为了引用和清楚起见,下文中使用的技术名词、简写或缩写总结解释如下:
SQL:Structured Query Language,结构化查询语言;
DDL:Data Definition Language,数据定义语言,用于描述数据库管理***中存储的现实世界实体的语言;
DML:Data Manipulation Language,数据操作语言,用于实现对数据库管理***中数据进行操作的语言;
Index:索引,数据库管理***中排序的数据结构,辅助快速查询、更新数据库表中数据;
Query Plan:查询计划,数据库管理***中用于访问数据的一组有序执行步骤;
CBO:Cost-Based Optimization,基于成本优化,一种数据库***查询计划的优化方法;
ID:identification,标识。
多租单实例架构可应用于多种场景。例如,软件即服务(Software As A Service,SaaS)模式。在该模式中,SaaS厂商统一部署应用软件,租户根据实际需求,通过互联网向厂商订购应用软件服务并支付费用。租户不再需要额外构建企业的IT基础设置、有效节省运行维护成本。多租单实例架构会使用宽表作为租户数据(即租户的自定义对象)的存储空间,为方便理解本申请提供的技术方案,本文先对宽表模型、对象元数据表、字段元数据表进行介绍。
宽表模型如下表1所示。宽表模型预留了若干(例如100个、500个等)无类型字段作为租户数据的存储字段。例如,下表中的value 0-value499,即为上述无类型字段。同时,宽表模型中还包括描述租户数据基本信息的字段,例如:租户ID(tenant_id)、对象类型ID(obj_id)、全局唯一标识符(Globally Unique Identifier,GUID)等。
表1
另外,还需通过一组元数据表,定义租户数据。主要的元数据表包括对象元数据表和字段元数据表。其中:对象元数据表模型如下表2所示。对象元数据表用于保存租户数据的基本元数据信息,包括:租户ID、名称(obj_name)和对象类型ID等;
objects | 说明 |
obj_id | 对象类型ID |
tenant_id | 租户ID |
obj_name | 对象名称 |
表2
字段元数据表模型如下表3所示。字段元数据表用于保存租户数据的字段详细信息,包括:字段ID(field_id)、名称(field_name)、类型(data_type)和大小(data_size)、字段在宽表中的列号等。
Fields | 说明 |
field_id | 字段ID |
tenant_id | 租户ID |
obj_id | 对象类型ID |
field_name | 字段名 |
data_type | 字段类型 |
data_size | 字段大小 |
field_num | 字段在宽表中的列号 |
表3
假设租户101自定义了ACCOUNT对象(ACCOUNT逻辑表),其对象元数据表示例性得如下表4所示,其字段元数据表示例性得如下表5所示,假定宽表中存储的租户101的ACCOUNT数据对象如下表6所示。
obj_id | tenant_id | obj_name |
201 | 101 | ACCOUNT |
表4
field_id | tenant_id | obj_id | field_name | data_type | data_size | field_num |
301 | 101 | 201 | ACCOUNT_ID | int | 4 | 0 |
302 | 101 | 201 | ACCOUNT_NAME | varchar | 16 | 1 |
303 | 101 | 201 | ADDRESS | varchar | 256 | 2 |
表5
tenant_id | obj_id | Guid | version | delete_time | value0 | value1 | value2 |
101 | 201 | 1000001 | V1 | null | ACCID_1 | Tom | Nanjing |
101 | 201 | 1000002 | V1 | null | ACCID_2 | Jack | Shanghai |
101 | 201 | 1000003 | V1 | null | ACCID_3 | Mary | Beijing |
101 | 201 | 1000004 | V1 | null | ACCID_4 | Penny | Hongkong |
表6
可以看出,租户对数据对象的定制,例如字段的增删、类型改动等,可不再基于对物理数据库的实体表的DDL操作,而是可通过对元数据的DML操作实现。租户可以任意修改其对象定义,而不影响到其他租户。
需要说明的是,虽然租户数据存储在宽表中,但对用户而言,其看到的却不是宽表,而是逻辑表或业务表(例如订单表、验收单表、库存单表等)。例如前述提及的宽表中租户101的ACCOUNT数据对象,请参见图1c,对用户而言,其看到的是一张逻辑的ACCOUNT表。
如欲查询逻辑ACCOUNT表中,名字为“ABC”的所有记录中的ID、名称(name)和地址(address)。则其逻辑SQL语句示例性得如下所示:
SELECT ACCOUNT_ID,ACCOUNT_NAME,ADDRESS
FROM ACCOUNT
WHERE ACCOUNT_NAME=‘ABC’。
可通过元数据描述信息,将租户基于自定义数据对象的逻辑SQL访问最终转化为基于数据宽表的物理SQL访问。索引作为数据库***中的关键数据结构,在数据库***的查询优化中发挥重要作用。通过使用索引,可以实现快速访问物理数据库表中的记录。前已述及,现有的索引更新方式存在局限性,只能针对全表数据创建索引,不能满足在某租户的租户数据上创建索引的需求,从而无法适应多租户场景。
为此,引入索引透视表以满足在某个租户数据上创建索引的需求。索引透视表结构如下表7和表8所示,分别支持非唯一性索引和唯一性索引。
其中,Index透视表的string_value、num_value、date_value字段分别存储字符串、数值、日期类字段值,且其上均创建非唯一性索引;而Unique Index透视表的这些字段上则创建唯一性索引。
Index透视表 | 说明 |
tenant_id | 租户ID |
obj_id | 对象类型ID |
field_num | 字段在宽表中的列号 |
Guid | 记录全局Guid |
string_value | 字符串值 |
num_value | 数字值 |
date_value | 日期值 |
表7
Unique Index透视表 | 说明 |
tenant_id | 租户ID |
obj_id | 对象类型ID |
field_num | 字段在宽表中的列号 |
Guid | 记录全局Guid |
string_value | 字符串值 |
num_value | 数字值 |
date_value | 日期值 |
表8
另外,还通过一组元数据表定义索引透视表中的数据,上述元数据表包括索引元数据表(indexes)和索引字段表(index_fields)。indexes的模型如下表9所示,index_fields的模型如下表10所示。
Indexes | 说明 |
index_id | 索引ID |
tenant_id | 租户ID |
obj_id | 对象类型ID |
index_name | 索引名 |
index_type | 索引类型 |
status | 索引状态 |
create_time | 创建时间 |
update_time | 更新时间 |
表9
index_fields | 说明 |
index_id | 索引ID |
tenant_id | 租户ID |
obj_id | 对象类型ID |
field_id | 字段ID |
表10
示例性的,假定宽表中存储的租户101的ACCOUNT数据对象如上表6所示,在本申请中,若租户指定在ACCOUNT对象的ACCOUNT_NAME字段(value0字段)创建非唯一性索引。则索引元数据表(indexes)如下表11所示,而索引透视表如下表12所示。
表11
tenant_id | obj_id | field_num | Guid | string_value | num_value | date_value |
101 | 201 | 0 | 1000001 | ACCID_1 | Null | Null |
101 | 201 | 0 | 1000002 | ACCID_2 | Null | Null |
101 | 201 | 0 | 1000003 | ACCID_3 | Null | Null |
101 | 201 | 0 | 1000004 | ACCID_4 | Null | Null |
表12
需要说明的是,对象元数据表、字段元数据表、索引元数据表和索引字段表均属于逻辑表的元数据信息。例如,上述表4、表5、表11和表12均属于ACCOUNT逻辑表的元数据信息,此外,逻辑表的元数据信息中还有元数据版本号。
本申请实施例提供了索引更新方法及相关装置(更新装置、数据访问节点、索引更新***),以解决索引创建受限问题,例如:索引更新方式,在字段类型、索引类型方面存在一定的限制,使租户能够灵活指定字段创建索引,同时在索引的在线创建过程中,不影响正在进行的数据操作。
请参见图1a,上述索引更新***可包括应用节点101、数据访问节点102和数据库节点103(存储租户数据)。在一个示例中,索引更新***具体可为SaaS应用***。
应用节点101主要负责运行索引更新***的业务服务。在大容量场景下,请参见图1b,可采用集群部署。数据访问节点102主要负责运行索引更新***的数据库访问服务,提供标准的SQL接口,可接受应用节点101的数据库访问请求,向数据库节点103提交数据库查询(查询计划),并返回结果给应用节点101。在大容量场景下,请参见图1b,可采用集群部署。此外,数据访问节点102还可执行本申请提供的索引更新方法,例如下述图3-5所示实施例提供的索引更新方法。数据库节点103主要负责索引更新***的数据存储访问服务,可采用商用数据库,例如:Oracle数据库,MySql数据库等。在大容量场景下,请参见图1b,可采用集群部署。在多租场景下,各租户数据存储在指定数据库节点,可通过部署配置信息来指定数据库节点。
在集群场景下,上述索引更新***还可包括负载均衡器104,负载均衡器104主要负责接受(租户)客户端的请求(例如逻辑SQL请求),根据各应用节点101的负载情况,将请求分发给应用节点集群中的应用节点。
协调服务:协调服务为分布式、开放源码的分布式应用程序协调服务,完成统一命名服务、状态同步服务、集群管理、分布式应用配置项管理等工作。协调服务一般部署在独立的协调服务节点上。
图2a示出了上述数据访问节点102的一种示例性结构,包括:
SQL解析器21:负责解析应用节点101发送的SQL查询请求,生成语法树。这里的SQL查询请求可包括DDL SQL语句和DML SQL语句。需要说明的是,本申请着重对DML SQL语句的执行,因此,如无特殊声明,后续的SQL查询请求均指DML SQL语句。
元数据和统计信息缓存22:负责数据访问节点102上的元数据和统计信息缓存,其中,元数据在数据库访问服务启动时从数据库加载,统计信息由数据访问服务实时收集保存。查询分析器23:负责基于语法树、元数据和统计信息缓存进行查询分析,得到查询分析结果。查询计划生成器24:可负责确定前述提及的目标查询计划。更具体的,可在未搜索到最优查询计划时,可根据查询分析结果,生成目标查询计划。此外,查询计划生成器24还可确定针对SQL查询请求的备选查询计划,在存在多个备选查询计划时,向所述数据库查询各备选查询计划的查询成本,缓存查询成本最小的备选查询计划,作为针对该SQL查询请求的最优查询计划。DML执行器25,负责执行目标查询计划,接收处理数据库返回的查询结果,并向应用节点101返回查询结果。DDL执行器26,负责执行应用节点101发送的DDL SQL语句(DDL请求)。数据库访问接口27,提供对各异构数据库的访问接口。上述更新装置可以硬件或软件的形式部署于数据访问节点102中。
图2b示出了上述更新装置的一种示例性结构,可以包括通信单元201和处理单元202。本文后续将结合更新方法介绍各单元的功能。
图2c示出了上述更新装置的另一种示例性结构,包括:总线、控制器/处理器1、存储器2、通信接口3。可选地,上述控制终端设备还可以包括输入设备4和输出设备5。处理器1、存储器2、输入设备4和输出设备5通过总线相互连接。其中:总线可包括一通路,在计算机***各个部件之间传送信息。
控制器/处理器1可以是通用处理器,例如通用中央处理器(CPU)、网络处理器(Network Processor,NP)、微处理器等,也可以是特定应用集成电路(application-specific integrated circuit,ASIC),或一个或多个用于控制本申请方案程序执行的集成电路。还可以是数字信号处理器(Digital Signal Processor,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。控制器/处理器1也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等等。
处理器1可用于实现前述处理单元202的功能。存储器2中保存有执行本申请技术方案的程序,还可以保存有操作***和其他应用程序。具体地,程序可以包括程序代码,程序代码包括计算机操作指令。更具体的,存储器2可以是只读存储器(read-only memory,ROM)、可存储静态信息和指令的其他类型的静态存储设备、随机存取存储器(randomaccess memory,RAM)、可存储信息和指令的其他类型的动态存储设备、磁盘存储器等等。输入设备4可包括接收用户输入的数据和信息的终端设备,例如键盘、鼠标、摄像头、扫描仪、光笔、语音输入终端设备、触摸屏等。输出设备5可包括允许输出信息给用户的终端设备,例如屏幕单元。通信接口3可包括使用任何收发器一类的终端设备,以便支持控制终端设备与其他设备或通信网络通信。通信接口3可用于实现前述通信单元201的功能。
可以理解的是,图2b仅仅示出了控制终端设备的简化设计。在实际应用中,控制终端设备可以包含任意数量的发射器,接收器,处理器,控制器,存储器,通信接口等,而所有可以实现本申请的控制终端设备都在本申请的保护范围之内。
处理器1执行存储器2中所存放的程序,以及调用其他设备,可用于实现下述图3-5所示实施例提供的索引更新方法。
在本申请其他实施例中,上述数据访问节点102也可采用类似于图2b的结构。
图3示出了上述索引更新方法的一种示例***互流程,共包括:
S301:用户(租户)通过应用节点101的数据库访问服务发送索引更新请求至某一数据访问节点102。
该过程可以由前述的通信单元201接收索引更新请求。索引更新请求可用于指示创建或删除与租户的逻辑表上的字段相关联的目标索引。所谓的目标索引指的是索引更新请求指示创建的索引,或索引更新请求指示删除的索引。可将索引更新请求中指示的逻辑表称为目标逻辑表。
更具体的,用户可直接编写索引更新请求,或者应用节点101可提供图形界面供用户定制、自动生成相关的索引更新请求,并将该索引更新请求发送给某一数据访问节点102上的数据访问服务,触发更新索引的流程。通过该方式,租户能够在应用节点101提供的图形界面上自行完成索引更新操作。
为便于区分,可将接收到索引更新请求的数据访问节点称为第一数据访问节点,而将其他数据访问节点称为第二数据访问节点。
在一个示例中,可使用标准的DDL SQL语句作为索引更新请求。
以创建目标索引为例,DDL SQL语句的语法定义如下:
CREATE[UNIQUE]INDEX INDEX_NAME ON TABLE_NAME(FIELD_NAME)。
其中,“INDEX_NAME”表征具体的索引名称;“TABLE_NAME”表征具体的逻辑表名称,例如,前述的ACCOUNT逻辑表的名称;FIELD_NAME表征逻辑表中具体的字段。
用户可在索引更新请求中指定逻辑表名及字段,更新指定字段关联的目标索引。这样,可实现灵活指定逻辑表和字段,在指定的字段上创建或更新索引。
S302:第一数据访问节点对目标逻辑表添加表锁。
表锁可以用于禁止其他请求对逻辑表的元数据信息进行更新操作。这里的其他请求指涉及到对上述逻辑表的元数据信息进行更新操作的请求。例如,在实际操作中,可能会有其他的索引更新请求也指示对同一逻辑表上的字段创建或删除索引,而表锁可避免多个请求同时更新同一逻辑表的元数据信息,从而避免数据更新混乱。在一个示例中,表锁具体可为DDL锁,第一数据访问节点可向协调服务节点上部署的协调服务获取DDL锁,以防止不同的DDL并发操作同一逻辑表的元数据信息。
在一个示例中,可由第一数据访问节点的处理单元202执行步骤302。
S303:第一数据访问节点更新数据库中的目标逻辑表的元数据信息。
可由第一数据访问节点的处理单元202执行步骤303。处理单元202可指示通信单元201向数据库提交更新请求,以更新目标逻辑表的元数据信息。
在数据库中存储了逻辑表的元数据信息,而在各数据访问节点也会本地缓存逻辑表的元数据信息。在本步骤中进行的是数据库中逻辑表的元数据信息的更新。在后续步骤中,各数据访问节点也会对本地缓存的目标逻辑表的元数据信息进行更新。
实际上,本步骤主要用于更新目标索引的索引元数据信息,而目标索引的索引元数据信息属于目标逻辑表的元数据信息的一部分。所以对索引元数据信息的更新,也属于更新目标逻辑表的元数据信息的范畴。
更具体的,前述提及了索引更新请求可指示创建或删除目标索引。
对于创建索引,更新索引元数据信息可具体包括:
A:将目标索引的索引元数据信息保存至数据库;更具体的,可将目标索引的索引元数据信息保存至数据库的indexes和index_fields表中。
B:将目标索引的状态设置为第一中间状态。具体的,可设计第一中间状态为“创建中”。处于第一中间状态的索引,不能被查询计划引用。
示例性的,假定宽表中存储的租户101的ACCOUNT数据对象如上表6所示,用户的索引更新请求指示在ACCOUNT对象的ACCOUNT_NAME字段(value0字段)创建非唯一性索引。则在本步骤中,数据库中的目标索引的索引元数据表(indexes)如下表13所示。其中,状态(status)字段的“creating”表示“创建中”。
表13
之所以将目标索引状态设置为第一中间状态,是因为此时只是将目标索引的索引元数据信息保存至数据库,而目标索引本身并未真正创建成功。在此情况下如允许查询计划引用,则会导致查询失败。此外,第一中间状态在其他实施例中还有其他作用,本文后续将进行介绍。
而对于删除索引,更新索引元数据信息可具体包括:将目标索引的状态设置为第二中间状态。具体的,可设计第二中间状态为“删除中”。更具体的,可将索引元数据表的状态(status)字段值设置为“deleting”表示“删除中”。处于第二中间状态的索引,也不能被查询计划引用。之所以将目标索引状态设置为第二中间状态,是为了防止查询计划对将删除的索引进行引用。
C:无论是删除还是创建索引,第一数据访问节点都会更新数据库中目标逻辑表的元数据版本号。例如,可将目标逻辑表的元数据版本号从之前的V1更新为V2。
S304:第一数据访问节点通知协调服务目标逻辑表元数据信息发生变更。
更具体的,可通知协调服务目标逻辑表的元数据版本号发生变更。步骤304可由第一数据访问节点的处理单元202指示通信单元201执行。
S305:协调服务通知第二数据访问节点对目标逻辑表的元数据信息进行本地同步更新。
更具体的,各第二数据访问节点上部署的数据访问服务会监听协调服务的元数据变更通知,当监听到元数据变更通知,进行本地同步更新。监听机制有多种,由协调服务提供,不在本方案详细讨论。
S306:第二数据访问节点(上的数据访问服务)对目标逻辑表的元数据信息,进行本地同步更新。
在一个示例中,“本地同步更新”至少可包括如下步骤:
A:刷新本地缓存的、目标逻辑表的元数据信息。
刷新具体的实现方式可为:使用数据库中目标逻辑表的元数据信息,替代本地缓存的目标逻辑表的元数据信息。需要说明的是,在未刷新前,各数据访问节点本地缓存的目标逻辑表的元数据版本号还是V1,刷新后,其元数据版本号为V2。
B:获取当前事务列表。
当前事务列表中的事务为正在执行的事务。
C:等待当前事务列表中的所有事务结束(正常结束或超时结束)。
等待当前事务列表中的事务结束,可保证当前事务(正在进行的数据操作)不受影响,增强了用户使用体验。在一个示例中,在当前事务列表中的所有事务均结束后,第二数据访问节点可通知协调服务完成本地同步更新。而协调服务可根据第二数据访问节点的通知,将第二数据访问节点的元数据同步更新状态设置为完成。更具体的,协调服务可维护更新状态列表,将列表中已完成元数据同步更新的第二数据访问节点的状态值设置为1,而未通知协调服务的第二数据访问节点的状态值设置为0。
需要说明的是,事务会使用查询计划,查询计划则是基于逻辑表的元数据信息生成的。若一查询计划是基于某一逻辑表的元数据信息生成的,可认为此查询计划与该逻辑表相关联。举例来讲,响应于一个查询请求,某数据访问节点需要对逻辑表A进行查询,则会基于逻辑表A的元数据信息生成查询计划(也即生成与逻辑表A相关联的查询计划)。
而在查询结束后,该数据访问节点会在本地缓存生成的查询计划,以便在接收到同一查询请求时可直接使用该查询计划,从而提高查询效率。
因此,一般而言,每一数据访问节点本地缓存有多个查询计划,可以说数据访问节点维护有查询计划池。假定目标逻辑表的元数据信息未更新前,其元数据版本号为V1,更新后元数据版本号为V2。
显然,在执行上述操作A之前,各数据访问节点缓存的、与目标逻辑表相关联的查询计划,都是基于目标逻辑表的旧元数据信息生成的(基于旧元数据信息生成的查询计划可称为旧查询计划)。或者是,旧查询计划是基于V1版本的元数据信息生成的。而当前事务列表中正在执行事务所使用的与目标逻辑表相关联的查询计划,也是基于V1版本的。
由于是在线更新索引,所以各数据访问节点很可能会接收到新查询请求,为避免旧查询计划被新的SQL查询请求使用,在一个示例中,上述“本地同步更新”还可包括如下操作:设置本地缓存的、与目标逻辑表相关联的查询计划(一般为SQL执行计划)为失效状态。
也即,将旧查询计划作失效处理。需要说明的是,虽然旧查询计划作了失效处理,但当前事务列表中的事务仍可以使用旧查询计划的,只是新的查询请求不能使用旧查询计划。
与此同时,数据访问节点可基于新版本的元数据信息生成查询计划(基于新版本元数据信息生成的查询计划可简称为新查询计划)。新的SQL查询请求可使用新查询计划。
此外需要说明的是,查询计划最终会转化为对宽表中的租户数据记录的操作。
请参见上表6,每一租户数据记录中保存了所对应的逻辑表的元数据版本号的。在操作后,租户数据记录中的元数据版本号将更新为查询计划所依据的元数据版本号。
以表6为例,假定第一条租户数据记录中的数据被旧查询计划所更改,那么其在version字段的值仍为V1。而第三、四租户数据记录中的数据被新查询计划所更改,那么其在version字段的值更新为V2。更新后的租户数据记录如下表14所示。
tenant_id | obj_id | Guid | version | delete_time | value0 | value1 | value2 |
101 | 201 | 1000001 | V1 | null | ACCID_1 | Tom | Nanjing |
101 | 201 | 1000002 | V1 | null | ACCID_2 | Jack | Shanghai |
101 | 201 | 1000003 | V2 | null | ACCID_3 | Mary | Beijing |
101 | 201 | 1000004 | V2 | null | ACCID_4 | Penny | Hongkong |
表14
对于新建目标索引这一情况而言,因老版本中根本没有目标索引的相关信息,因此经旧查询计划修改的租户数据不能同步到索引透视表,可在后续的数据异步完成同步。而经新查询计划修改后的租户数据则可同步到索引透视表。
步骤306可由第二数据访问节点的处理单元202执行,其中的通知协调服务,可由第二数据访问节点的处理单元202指示其通信单元201完成。
S307:第一数据访问节点对目标逻辑表的元数据信息进行本地同步更新。
与第二数据访问节点相类似,第一数据访问节点也需要进行本地同步更新。因此,第一数据访问节点也会执行诸如刷新本地缓存的目标逻辑表的元数据信息,等待当前事务列表中的所有事务结束,设置本地缓存的与目标逻辑表相关联的查询计划为失效状态等操作。至于在当前事务列表中的所有事务结束后,是否通知协调服务,可进行灵活设计。可设计第一数据访问节点在完成本地同步更新后通知协调服务,也可设计为不通知。
步骤307可由第一数据访问节点的处理单元202执行,其中的通知协调服务,可由第一数据访问节点的处理单元202指示其通信单元201完成。
S308:在所有第二数据访问节点均完成本地同步更新后,第一数据访问节点进行数据异步更新。
在一个示例中,第一数据访问节点可持续向协调服务查询第二数据访问节点的元数据同步更新状态,直至全部第二数据访问节点的元数据同步更新状态均为完成,再进行数据异步更新。当然,在其他实施例中,也可由其中一个第二数据访问节点进行数据异步更新。数据异步更新至少包括:根据索引更新请求创建目标索引,或者,根据索引更新请求删除目标索引。本文后续将针对创建和删除两种情况,具体介绍如何进行数据异步更新。第一数据访问节点可开启异步任务进行异步更新。
S309:在完成异步更新后,第一数据访问节点释放表锁。由于异步更新完成后,索引的创建或删除就完成了,所以可以释放表锁。
在本发明其他实例中,在完成异步更新后,第一数据访问节点可返回更新结果至相应的应用节点。更具体的,更新结果可包括表征更新成功或失败的信息。当然,如更新失败,更新结果中也可包含失败原因。
步骤308和309可由第一数据访问节点的处理单元202指示通信单元201完成。
可见,在本申请提供的方案中,在更新元数据信息至数据库后,分两步实现索引更新:第一步各数据访问节点对逻辑表的元数据信息进行本地同步更新,在本地同步更新中,会等待当前事务列表中的事务结束,这样,可不影响当前事务的执行。本地同步更新后,各数据访问节点后续针对逻辑表的数据访问请求,可基于新的元数据信息;第二步,当各数据访问节点均完成本地同步更新后,再执行数据异步更新—创建或删除目标索引。通过上述两步更新,可实现在线实时更新索引,同时,还可保证当前事务正在进行的数据操作不受影响,增强了用户使用体验。
下面将以更详细的例子,对创建索引和删除索引的步骤进行介绍。
图4示出了创建目标索引时,上述索引更新方法的一种示例***互流程,包括:
S401-S402与前述S301-S302相同,在此不作赘述。
S403:第一数据访问节点将目标索引的索引元数据信息保存至数据库,其中,目标索引的状态被设置为“创建中”(第一中间状态)。相关介绍请参见前述S303部分的介绍,在此不作赘述。
S404:第一数据访问节点更新数据库中目标逻辑表的元数据版本号。例如,可将目标逻辑表的元数据版本号从之前的V1更新为V2。
S405-S408与前述的S304-307相同,在此不作赘述。
S409:第一数据访问节点查询宽表中与目标逻辑表相关联的租户数据记录,将目标租户数据记录中的数据同步至目标索引,同时更新目标租户数据记录中的元数据版本号。
S409开始为异步数据更新。第一数据访问节点可开启异步任务执行异步数据更新。
异步任务可根据状态确定哪些索引需要进行异步更新。由于目标索引的状态当前为“创建中”,所以异步任务可根据其状态确定目标索引需要进行异步更新。当然,在其他示例中,也可建立一个表,记录了待创建和待删除的索引。
上述目标租户数据记录包括:与逻辑表相关联且元数据版本号未更新的租户数据记录。举例来讲,假定目标逻辑表的元数据版本号从之前的V1更新为V2。请参见上表14,若租户数据记录的元数据版本号为V2,说明该记录已经更新至索引透视表,则异步任务不对该记录进行任何操作。若租户数据记录的元数据版本号不是V2,说明该租户数据记录没有被更新到索引透视表。也即,在上表14中,阴影部分的两条租户数据记录的元数据版本号为V1,这两条租户数据记录即为目标租户数据记录。
第一数据节点的异步任务会将上表14标阴影的两条租户数据记录中,目标索引涉及的字段值更新到索引透视表。假定目标索引关联的字段是表14中的“value 0”,则会把上表14中的ACCID_1和ACCID_2更新到索引透视表。更新后的索引透视表如下表15所示。同时,异步任务还会修改上述两条租户数据记录的元数据版本号,标识其已经使用新的元数据更新过,修改后的租户数据记录如下表16所示。
tenant_id | obj_id | field_num | Guid | string_value | num_value | date_value |
101 | 201 | 0 | 1000001 | ACCID_1 | Null | Null |
101 | 201 | 0 | 1000002 | ACCID_2 | Null | Null |
101 | 201 | 0 | 1000003 | ACCID_3 | Null | Null |
101 | 201 | 0 | 1000004 | ACCID_4 | Null | Null |
表15
tenant_id | obj_id | Guid | version | delete_time | value0 | value1 | value2 |
101 | 201 | 1000001 | V2 | null | ACCID_1 | Tom | Nanjing |
101 | 201 | 1000002 | V2 | null | ACCID_2 | Jack | Shanghai |
101 | 201 | 1000003 | V2 | null | ACCID_3 | Mary | Beijing |
101 | 201 | 1000004 | V2 | null | ACCID_4 | Penny | Hongkong |
表16
在一个示例中,为防止异步任务和正常DML同时操作某条租户数据记录,异步任务可使用SELECT FOR UPDATE,为租户数据记录增加行锁。SELECT FOR UPDATE为标准的DML语句,目的是为记录增加行锁。
S410:第一数据访问节点将数据库中目标索引的状态设置为正常状态,并通知协调服务。
当异步任务不能再查询到版本号小于V2的相关租户数据记录时,说明所有与目标逻辑表相关的租户数据记录,都已经使用新版本元数据信息更新过,则索引创建的异步任务完成。以上表13所示目标索引的索引元数据表为例,更改状态后,目标索引的索引元数据表如下表17所示。其中,状态(status)字段的“Normal”表示“正常”。
表17
在通知协调服务时,可通知协调服务目标索引的状态发生了更新,也可通知协调服务目标逻辑表的元数据信息发生了更新。则协调服务可再次通知第二数据访问节点再次刷新本地缓存的目标逻辑表的元数据信息,或仅刷新本地缓存的目标索引的状态。在本次刷新中,可不执行本地同步更新中的步骤B和步骤C。在本申请其他实施例中,可限制每次更新或删除的索引记录数。例如,可限制每次更新或删除的索引记录数最大为1000条。异步任务每次操作可更新1000条索引记录,如达到1000条上限,就再次进行相同的操作。这是考虑每次更新要生成日志,如果更新数据的记录很大,会造成日志也很大,影响性能。同理,对于宽表中租户数据记录的更新,也可限定每次更新的最大条数,在此不作赘述。
S411:在完成异步更新后,第一数据访问节点释放表锁。
S411与前述S309相同,在此不作赘述。
S411与S410可同时执行,也可先后执行。
步骤409至411可由第一数据访问节点的处理单元202指示通信单元201完成。
图5示出了删除目标索引时,上述索引更新方法的一种示例***互流程,包括:
S501-S502与前述的S401-S402或S301-S302相同,在此不作赘述。
S503:第一数据访问节点将数据库中目标索引的状态设置为“删除中”(第二中间状态)。相关介绍请参见前述S303部分的介绍,在此不作赘述。
S504:第一数据访问节点更新数据库中目标逻辑表的元数据版本号。例如,可将目标逻辑表的元数据版本号从之前的V1更新为V2。
S505-S508与前述的S405-S408或S304-307相同,在此不作赘述。
S509:第一数据访问节点查询宽表中与目标逻辑表相关联的租户数据记录,更新目标租户数据记录中的元数据版本号。
举例来讲,假定目标逻辑表的元数据版本号从之前的V1更新为V2。请参见上表14,可将与目标逻辑表相关联的所有租户数据记录的元数据版本号更新为V2。由于在本实施例中,目标索引需要删除,所以不需要将目标逻辑表中的数据同步至目标索引。
S509开始为异步数据更新。第一数据访问节点可开启异步任务执行异步数据更新。
异步任务可根据状态确定哪些索引需要进行异步更新。由于目标索引的状态当前为“删除中”,所以异步任务可根据其状态确定目标索引需要进行异步更新。在一个示例中,为防止异步任务和正常DML同时操作某条租户数据记录,异步任务可使用SELECTFORUPDATE,为租户数据记录增加行锁。SELECT FOR UPDATE为标准的DML语句,目的是为记录增加行锁。
S510:第一数据访问节点删除透视表中与目标索引相关的租户数据记录。
假定透视表如下表18所示,其中“num_value”字段中与目标索引相关联。在删除目标索引时,会删除“num_value”字段中的租户数据,删除后透视表如下表19所示。
tenant_id | obj_id | field_num | Guid | string_value | num_value | date_value |
101 | 201 | 0 | 1000001 | ACCID_1 | 01 | Null |
101 | 201 | 0 | 1000002 | ACCID_2 | 02 | Null |
101 | 201 | 0 | 1000003 | ACCID_3 | 03 | Null |
101 | 201 | 0 | 1000004 | ACCID_4 | 04 | Null |
表18
tenant_id | obj_id | field_num | Guid | string_value | num_value | date_value |
101 | 201 | 0 | 1000001 | ACCID_1 | Null | Null |
101 | 201 | 0 | 1000002 | ACCID_2 | Null | Null |
101 | 201 | 0 | 1000003 | ACCID_3 | Null | Null |
101 | 201 | 0 | 1000004 | ACCID_4 | Null | Null |
表19
当索引透视表中没有目标索引关联的租户数据待删除后,索引删除的异步任务完成。
S511:第一数据访问节点删除数据库中目标索引的索引元数据信息,并通知协调服务目标逻辑表的元数据信息发生了更新。
则协调服务可通知第二数据访问节点再次刷新本地缓存的目标逻辑表的元数据信息。在本次刷新中,可不执行本地同步更新中的步骤B和步骤C。
S512:在完成异步更新后,第一数据访问节点释放表锁。
S511与S512可同时执行,也可先后执行。
步骤509至512可由数据访问节点的处理单元202指示通信单元201完成。
在本申请其他实施例中,还可提供数据异步更新的状态查询接口,用户可查询索引更新进度。此外,还可提供逻辑表字段选择性的查询展示接口,租户在创建索引前,可通过查询展示接口查询逻辑表的一个字段,展示该字段的不同值有多少,如果字段的不同值很多,则说明选择性好,如果不同值很少,则选择性不好。用户可进行参考,从而更有效得辅助租户完成索引创建。
结合本申请公开内容所描述的方法或者算法的步骤可以硬件的方式来实现,也可以是由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、移动硬盘、CD-ROM或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。另外,该ASIC可以位于用户设备中。当然,处理器和存储介质也可以作为分立组件存在于用户设备中。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本申请所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
以上所述的具体实施方式,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请的具体实施方式而已,并不用于限定本申请的保护范围,凡在本申请的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本申请的保护范围之内。
Claims (21)
1.一种索引更新方法,其特征在于,应用于第一数据访问节点,包括:
接收索引更新请求,所述索引更新请求用于指示创建或删除与租户的逻辑表上的字段相关联的目标索引;
响应于所述索引更新请求,更新数据库中所述逻辑表的元数据信息;
通知协调服务所述逻辑表的元数据信息发生变更;所述协调服务至少用于通知第二数据访问节点对所述逻辑表的元数据信息进行本地同步更新;
对所述逻辑表的元数据信息进行本地同步更新;
在所有第二数据访问节点均完成本地同步更新后,进行数据异步更新。
2.如权利要求1所述的方法,其特征在于,
在接收到所述索引更新请求之后、更新所述元数据信息之前,还包括:对所述逻辑表添加表锁;所述表锁用于禁止其他请求对所述逻辑表的元数据信息进行更新操作;
在完成所述数据异步更新之后,还包括:释放所述表锁。
3.如权利要求1所述的方法,其特征在于,所述本地同步更新至少包括:
刷新本地缓存的、所述逻辑表的元数据信息;
等待当前事务列表中的所有事务均结束后,通知所述协调服务完成本地同步更新。
4.如权利要求3所述的方法,其特征在于,所述本地同步更新还包括:
将与所述逻辑表相关联的查询计划设置为失效。
5.如权利要求1所述的方法,其特征在于,所述数据异步更新至少包括:根据所述索引更新请求创建目标索引或者删除目标索引。
6.如权利要求1-5任一项所述的方法,其特征在于,所述更新数据库中所述逻辑表的元数据信息至少包括:更新所述数据库中所述逻辑表的元数据版本号。
7.如权利要求6所述的方法,其特征在于,
若所述索引更新请求用于指示创建目标索引,所述更新数据库中所述逻辑表的元数据信息还包括:
将所述目标索引的索引元数据信息保存至所述数据库;其中,所述索引元数据信息中所述目标索引的状态为第一中间状态;
若所述索引更新请求用于指示删除目标索引,所述更新数据库中所述逻辑表的元数据信息还包括:
将所述数据库中所述目标索引的状态设置为第二中间状态;
状态为第一中间状态或第二中间状态的索引不能被查询计划使用。
8.如权利要求7所述的方法,其特征在于,所述创建目标索引包括:
查询宽表中与所述逻辑表相关联的租户数据记录;
将目标租户数据记录中的数据同步至所述目标索引;所述目标租户数据记录包括:与所述逻辑表相关联且元数据版本号未更新的租户数据记录。
9.如权利要求8所述的方法,其特征在于,在创建所述目标索引或删除所述目标索引之后,所述数据异步更新还包括:更新所述目标租户数据记录中的元数据版本号。
10.如权利要求9所述的方法,其特征在于,
若所述索引更新请求用于指示创建目标索引,在所有目标租户数据记录中的元数据版本号均更新之后,所述数据异步更新还包括:
将所述数据库中所述目标索引的状态设置为正常状态,并通知所述协调服务;
若所述索引更新请求用于指示删除目标索引,在删除所述目标索引之后,所述数据异步更新还包括:
删除所述数据库中所述目标索引的索引元数据信息,并通知所述协调服务;
所述协调服务还用于通知所述第二数据访问节点刷新本地缓存的所述逻辑表的元数据信息。
11.一种索引更新装置,其特征在于,包括:
接收单元,用于接收索引更新请求,所述索引更新请求用于指示创建或删除与租户的逻辑表上的字段相关联的目标索引;
处理单元,用于:
响应于所述索引更新请求,更新数据库中所述逻辑表的元数据信息;
通知协调服务所述逻辑表的元数据信息发生变更;所述协调服务至少用于通知第二数据访问节点对所述逻辑表的元数据信息进行本地同步更新;
对所述逻辑表的元数据信息进行本地同步更新;
在所有第二数据访问节点均完成本地同步更新后,进行数据异步更新。
12.如权利要求11所述的装置,其特征在于,在对所述逻辑表的元数据信息进行本地同步更新的方面,所述处理单元具体用于:
刷新本地缓存的、所述逻辑表的元数据信息;
等待当前事务列表中的所有事务均结束后,通知所述协调服务完成本地同步更新。
13.如权利要求11所述的装置,其特征在于,在对所述逻辑表的元数据信息进行本地同步更新的方面,所述处理单元还用于:将与所述逻辑表相关联的查询计划设置为失效。
14.如权利要求11所述的装置,其特征在于,在数据异步更新的方面,所述处理单元具体用于:根据所述索引更新请求创建目标索引或者删除目标索引。
15.如权利要求11-14任一项所述的装置,其特征在于,在更新数据库中所述逻辑表的元数据信息的方面,所述处理单元具体用于:更新所述数据库中所述逻辑表的元数据版本号。
16.如权利要求15所述的装置,其特征在于,若所述索引更新请求用于指示创建目标索引,在更新数据库中所述逻辑表的元数据信息的方面,所述处理单元具体还用于:
将所述目标索引的索引元数据信息保存至所述数据库;其中,所述索引元数据信息中的状态为第一中间状态;
若所述索引更新请求用于指示删除目标索引,在更新数据库中所述逻辑表的元数据信息的方面,所述处理单元具体还用于:将所述数据库中所述目标索引的状态设置为第二中间状态;状态为第一中间状态或第二中间状态的索引不能被查询计划使用。
17.如权利要求16所述的装置,其特征在于,在所述创建目标索引的方面,所述处理单元具体用于:
查询宽表中与所述逻辑表相关联的租户数据记录;
将目标租户数据记录中的数据同步至所述目标索引;所述目标租户数据记录包括:与所述逻辑表相关联且元数据版本号未更新的租户数据记录。
18.如权利要求17所述的装置,其特征在于,在所述数据异步更新的方面,所述处理单元具体还用于:在创建所述目标索引或删除所述目标索引之后,更新所述目标租户数据记录中的元数据版本号。
19.如权利要求18所述的装置,其特征在于,
在所述数据异步更新的方面,若所述索引更新请求用于指示创建目标索引,所述处理单元具体还用于:
在所有目标租户数据记录中的元数据版本号均更新之后,将所述数据库中所述目标索引的状态设置为正常状态,并通知所述协调服务;
在所述数据异步更新的方面,若所述索引更新请求用于指示删除目标索引,所述处理单元具体还用于:在删除所述目标索引之后,删除所述数据库中所述目标索引的索引元数据信息,并通知所述协调服务;
所述协调服务还用于通知所述第二数据访问节点刷新本地缓存的所述逻辑表的元数据信息。
20.一种数据访问节点,其特征在于,包括如权利要求11-19所述的索引更新装置。
21.一种索引更新***,包括应用节点、数据库以及如权利要求20所述的数据访问节点。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710464640.1A CN109144994B (zh) | 2017-06-19 | 2017-06-19 | 索引更新方法、***及相关装置 |
EP18820724.5A EP3624424A4 (en) | 2017-06-19 | 2018-04-18 | INDEX UPDATE METHOD AND SYSTEM, AND ASSOCIATED DEVICE |
PCT/CN2018/083577 WO2018233364A1 (zh) | 2017-06-19 | 2018-04-18 | 索引更新方法、***及相关装置 |
US16/718,638 US11308062B2 (en) | 2017-06-19 | 2019-12-18 | Index update method and system, and related apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710464640.1A CN109144994B (zh) | 2017-06-19 | 2017-06-19 | 索引更新方法、***及相关装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109144994A CN109144994A (zh) | 2019-01-04 |
CN109144994B true CN109144994B (zh) | 2022-04-29 |
Family
ID=64736223
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710464640.1A Active CN109144994B (zh) | 2017-06-19 | 2017-06-19 | 索引更新方法、***及相关装置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11308062B2 (zh) |
EP (1) | EP3624424A4 (zh) |
CN (1) | CN109144994B (zh) |
WO (1) | WO2018233364A1 (zh) |
Families Citing this family (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109743407B (zh) * | 2019-02-28 | 2021-05-28 | 电子科技大学 | 一种面向多租户网络的边缘网络缓存方法 |
CN110110006A (zh) * | 2019-04-15 | 2019-08-09 | 平安普惠企业管理有限公司 | 数据管理方法及相关产品 |
CN110427366B (zh) * | 2019-06-29 | 2022-07-12 | 苏州浪潮智能科技有限公司 | 基于phoenix改造hbase旧***的索引同步方法、装置及*** |
CN110569257B (zh) * | 2019-09-16 | 2022-04-01 | 上海达梦数据库有限公司 | 数据处理方法、相应装置、设备及存储介质 |
CN110837585B (zh) * | 2019-11-07 | 2022-12-20 | 中盈优创资讯科技有限公司 | 多源异构的数据关联查询方法及*** |
CN111428114B (zh) * | 2020-03-27 | 2024-04-09 | 中国工商银行股份有限公司 | Elasticsearch搜索引擎的索引创建方法及装置 |
CN111460023B (zh) * | 2020-04-29 | 2023-06-09 | 上海东普信息科技有限公司 | 基于Elasticsearch的业务数据处理方法、装置、设备及存储介质 |
CN113806358B (zh) * | 2020-05-29 | 2023-02-17 | 斯诺弗雷克公司 | 实现子表复制的方法和***以及计算机可读存储介质 |
CN111858628A (zh) * | 2020-06-30 | 2020-10-30 | 北京百度网讯科技有限公司 | 基于数据库的管理方法、平台、电子设备及存储介质 |
CN112069201A (zh) * | 2020-09-04 | 2020-12-11 | 北京百度网讯科技有限公司 | 目标数据的获取方法和装置 |
CN112131211A (zh) * | 2020-09-15 | 2020-12-25 | 贝壳技术有限公司 | 一种清除冗余业务数据的方法、装置和存储介质 |
CN112507187B (zh) * | 2020-11-11 | 2022-09-27 | 贝壳技术有限公司 | 索引变更方法及装置 |
CN114598484B (zh) * | 2020-12-01 | 2024-03-19 | 中移(苏州)软件技术有限公司 | 一种证书更新方法、装置、集群及存储介质 |
CN112818017A (zh) * | 2021-01-22 | 2021-05-18 | 百果园技术(新加坡)有限公司 | 一种事件数据处理方法及装置 |
US20220245483A1 (en) * | 2021-02-03 | 2022-08-04 | International Business Machines Corporation | Identifying Influential Effects to Be Adjusted in Goal Seek Analysis |
CN112860727B (zh) * | 2021-02-20 | 2024-01-12 | 平安科技(深圳)有限公司 | 基于大数据查询引擎的数据查询方法、装置、设备及介质 |
CN113076317B (zh) * | 2021-04-08 | 2024-06-18 | 深圳前海微众银行股份有限公司 | 基于大数据的数据处理方法、装置、设备及可读存储介质 |
CN113535777B (zh) * | 2021-06-24 | 2023-05-23 | 上海浦东发展银行股份有限公司 | 数据库查询方法、装置和*** |
CN113535730A (zh) * | 2021-07-21 | 2021-10-22 | 挂号网(杭州)科技有限公司 | 搜索引擎的索引更新方法及***、电子设备、存储介质 |
CN114466026B (zh) * | 2022-01-05 | 2024-05-14 | 杭州网易云音乐科技有限公司 | 应用程序接口的更新方法、装置、存储介质和计算设备 |
CN114489505B (zh) * | 2022-01-21 | 2024-02-27 | 北京安天网络安全技术有限公司 | 数据报文的存储方法、装置、计算机设备 |
CN114372064B (zh) * | 2022-03-22 | 2022-07-12 | 飞狐信息技术(天津)有限公司 | 数据处理装置、方法、计算机可读介质及处理器 |
CN117555907A (zh) * | 2022-08-05 | 2024-02-13 | 华为技术有限公司 | 分布式数据库中处理基表及其全局二级索引的方法及装置 |
CN117555894A (zh) * | 2022-08-05 | 2024-02-13 | 华为技术有限公司 | 一种分布式数据库中创建全局二级索引的方法及装置 |
CN116010419A (zh) * | 2023-02-07 | 2023-04-25 | 江西数字网联信息安全技术有限公司 | 一种创建唯一索引和优化逻辑删除的方法及装置 |
CN116341560B (zh) * | 2023-02-13 | 2024-03-19 | 安徽龙鼎信息科技有限公司 | 一种针对运输过程安全的监控策略调整方法和*** |
CN117076474B (zh) * | 2023-10-16 | 2024-03-12 | 之江实验室 | 离线多模态文献数据的更新方法、装置、设备和介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102024020A (zh) * | 2010-11-04 | 2011-04-20 | 曙光信息产业(北京)有限公司 | 一种分布式文件***中高效的元数据访存方法 |
CN104866497A (zh) * | 2014-02-24 | 2015-08-26 | 华为技术有限公司 | 分布式文件***列式存储的元数据更新方法、装置、主机 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6360214B1 (en) * | 1998-12-16 | 2002-03-19 | Microsoft Corporation | Automatic database statistics creation |
CA2422176C (en) * | 2003-03-14 | 2009-07-21 | Ibm Canada Limited - Ibm Canada Limitee | Method and apparatus for interrupting updates to a database to provide read-only access |
US7779039B2 (en) * | 2004-04-02 | 2010-08-17 | Salesforce.Com, Inc. | Custom entities and fields in a multi-tenant database system |
CN100495400C (zh) * | 2006-09-01 | 2009-06-03 | 北大方正集团有限公司 | 一种全文检索***的索引在线更新方法 |
US9081805B1 (en) * | 2007-05-08 | 2015-07-14 | Progress Software Corporation | Tenant-aware database for software as a service |
CN101650741B (zh) * | 2009-08-27 | 2011-02-09 | 中国电信股份有限公司 | 一种分布式全文检索的索引实时更新的方法和*** |
US8706715B2 (en) * | 2009-10-05 | 2014-04-22 | Salesforce.Com, Inc. | Methods and systems for joining indexes for query optimization in a multi-tenant database |
CN102346744B (zh) * | 2010-07-30 | 2013-11-13 | 国际商业机器公司 | 用于在多租户应用***中处理物化表的装置 |
US9460176B2 (en) * | 2010-12-29 | 2016-10-04 | Sap Se | In-memory database for multi-tenancy |
US20150339359A1 (en) | 2013-02-06 | 2015-11-26 | Hitachi, Ltd. | Computer system, metadata management method, and recording medium |
CN103475721B (zh) * | 2013-09-12 | 2016-09-14 | 广东电子工业研究院有限公司 | 一种数字资产更新***的数字资产更新方法 |
US9959306B2 (en) * | 2015-06-12 | 2018-05-01 | International Business Machines Corporation | Partition-based index management in hadoop-like data stores |
US10747739B1 (en) * | 2015-09-18 | 2020-08-18 | Amazon Technologies, Inc. | Implicit checkpoint for generating a secondary index of a table |
CN105512200A (zh) * | 2015-11-26 | 2016-04-20 | 华为技术有限公司 | 一种分布式数据库处理的方法和设备 |
-
2017
- 2017-06-19 CN CN201710464640.1A patent/CN109144994B/zh active Active
-
2018
- 2018-04-18 WO PCT/CN2018/083577 patent/WO2018233364A1/zh unknown
- 2018-04-18 EP EP18820724.5A patent/EP3624424A4/en active Pending
-
2019
- 2019-12-18 US US16/718,638 patent/US11308062B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102024020A (zh) * | 2010-11-04 | 2011-04-20 | 曙光信息产业(北京)有限公司 | 一种分布式文件***中高效的元数据访存方法 |
CN104866497A (zh) * | 2014-02-24 | 2015-08-26 | 华为技术有限公司 | 分布式文件***列式存储的元数据更新方法、装置、主机 |
Non-Patent Citations (1)
Title |
---|
The Fore.com Multi Tenant Architecture;Anonymous;《http://developer.salesfore.com/page/Multi_Tenant_Architecture》;20160331;第1-14页 * |
Also Published As
Publication number | Publication date |
---|---|
WO2018233364A1 (zh) | 2018-12-27 |
CN109144994A (zh) | 2019-01-04 |
EP3624424A1 (en) | 2020-03-18 |
US11308062B2 (en) | 2022-04-19 |
EP3624424A4 (en) | 2020-04-08 |
US20200272614A1 (en) | 2020-08-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109144994B (zh) | 索引更新方法、***及相关装置 | |
US11106816B2 (en) | Database public interface | |
US8401994B2 (en) | Distributed consistent grid of in-memory database caches | |
US20120158795A1 (en) | Entity triggers for materialized view maintenance | |
EP2797013A1 (en) | Database update execution according to power management schemes | |
US20150317331A1 (en) | Unified platform for application development | |
WO2019109854A1 (zh) | 分布式数据库数据处理方法、装置、存储介质及电子装置 | |
US10339040B2 (en) | Core data services test double framework automation tool | |
CN113220755B (zh) | 一种基于多源数据灵活生成GraphQL接口的方法 | |
US11188450B2 (en) | Cloud application architecture using edge computing | |
KR20200092095A (ko) | 관계형 데이터베이스의 DML문장을 NoSQL 데이터베이스로 동기화하기 위한 트랜잭션 제어 방법 | |
US12007985B2 (en) | Executing transactions on distributed databases | |
US20240143594A1 (en) | Offloading graph components to persistent storage for reducing resident memory in distributed graph processing | |
US11334568B2 (en) | Deep caching in the data access layer of an enterprise portal application | |
US11722579B2 (en) | Dependency management for shared data objects in a database system | |
US11789948B2 (en) | Computational dependency directory | |
CN116341560B (zh) | 一种针对运输过程安全的监控策略调整方法和*** | |
JP7365469B1 (ja) | Rdbに関する処理を行うためのシステム、キャッシュサーバ、方法、及びプログラム | |
EP4361834A1 (en) | Fine-grained decision on propagation of revalidation | |
US20230342355A1 (en) | Diskless active data guard as cache | |
US11487527B1 (en) | Cross feature toggles | |
US20240232159A9 (en) | Flexible routing of database operations accessing remote tables |
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 |