CN117555894A - 一种分布式数据库中创建全局二级索引的方法及装置 - Google Patents

一种分布式数据库中创建全局二级索引的方法及装置 Download PDF

Info

Publication number
CN117555894A
CN117555894A CN202210939851.7A CN202210939851A CN117555894A CN 117555894 A CN117555894 A CN 117555894A CN 202210939851 A CN202210939851 A CN 202210939851A CN 117555894 A CN117555894 A CN 117555894A
Authority
CN
China
Prior art keywords
data
node
secondary index
information
attribute
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.)
Pending
Application number
CN202210939851.7A
Other languages
English (en)
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 CN202210939851.7A priority Critical patent/CN117555894A/zh
Priority to PCT/CN2023/106365 priority patent/WO2024027459A1/zh
Publication of CN117555894A publication Critical patent/CN117555894A/zh
Pending legal-status Critical Current

Links

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/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing 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/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/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof
    • 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/23Updating
    • 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/23Updating
    • G06F16/2365Ensuring data consistency and integrity
    • 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/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor

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)
  • Computing Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请提供一种分布式数据库中创建全局二级索引的方法及装置,应用于第一节点,该方法包括:接收第一指示,所述第一指示用于指示创建基表中至少一个属性的全局二级索引;根据所述第一指示,向用于存储所述基表的第二节点发送第一请求;其中,所述第一请求用于请求获取第一目标信息,所述第一目标信息包括所述基表中的所述至少一个属性;接收来自所述第二节点的所述第一目标信息,并根据所述第一目标信息创建所述全局二级索引。本申请提供的方案,能够在保证性能和成本的同时,创建可用性高的全局二级索引。

Description

一种分布式数据库中创建全局二级索引的方法及装置
技术领域
本申请涉及数据处理技术领域,尤其涉及一种分布式数据库中创建全局二级索引的方法及装置。
背景技术
基表是分布式数据库中用来存储数据的对象,基表可以是分布式存储在至少一个数据节点中的多行乘多列数据的集合。其中,同一列的数据属于同一个属性,同一行的数据为一个元组,可以存储在同一个数据节点中。当前,基表可以具有一个或多个全局二级索引,基表的每个全局二级索引可以包含基表中的部分列数据,因此基表的全局二级索引可以用于进行数据查询。与基表数据的存储方式类似,基表的全局二级索引的数据也可以分布式存储在至少一个数据节点中。
当分布式数据库中存在基表时,无论基表中有没有数据,用户都可以根据需求对基表中的一列或多列(即一个属性或多个属性)创建全局二级索引。当前通常是针对数据库本身结构,与基表的创建过程同步或异步的进行全局二级索引的创建。
其中,与基表的创建过程同步的进行全局二级索引的创建的方案能够保证全局二级索引与基表的数据的一致性(即全局二级索引中的各列数据与其在基表中对应列的数据是一致的),但是创建过程中需要创建和维护基表快照等多份中间数据,会导致数据库的输入/输出(input/output)在短时间内增大,影响数据库的性能。为了保证数据库的性能,当前通常会对数据库的架构进行一定程度的优化,又会造成数据库维护成本的升高以及扩展性、实用性的降低。
与基表的创建过程异步的进行全局二级索引的创建的方案可以根据分布式数据库负载进行动态优化,从而保证分布式数据库的性能。但是,该方案会导致处理的时间成本升高,且会影响全局二级索引与基表的数据的一致性(即全局二级索引中的各列数据与其在基表中对应列的数据是一致的),导致全局二级索引的可用性变差。
综上,当前创建基表的全局二级索引的方案存在成本高、性能差或全局二级索引的可用性差等问题。
发明内容
本申请提供一种分布式数据库中创建全局二级索引的方法及装置,用以在保证性能和成本的同时,创建可用性高的全局二级索引。
第一方面,本申请提供一种分布式数据库中创建全局二级索引的方法,应用于第一节点,该方法包括:接收第一指示,所述第一指示用于指示创建基表中至少一个属性的全局二级索引;根据所述第一指示,向用于存储所述基表的第二节点发送第一请求;其中,所述第一请求用于请求获取第一目标信息,所述第一目标信息包括所述基表中的所述至少一个属性;接收来自所述第二节点的所述第一目标信息,并根据所述第一目标信息创建所述全局二级索引。
在该方法中,在分布式数据库中,第一节点在创建全局二级索引时,可以直接从存储基表的第二节点中获取用于创建全局二级索引所需的信息并根据获取的信息进行全局二级索引的创建。该方案能够基于分布式数据库原有架构实现,无需对数据库架构进行其它额外优化处理,因此处理成本较低,对数据库性能的影响也较低。此外,第一节点在接收到指示后即可快速完成全局二级索引的创建,对启动条件和应用场景的要求较低,可根据需要随时进行全局二级索引的创建,以保证全局二级索引与基表数据的强一致性,提高全局二级索引数据的准确度,进而提高全局二级索引的可用性。
在一种可能的设计中,所述第一目标信息还包括位置信息;其中,所述位置信息用于指示所述至少一个属性的数据所属的元组在所述基表中的位置。
在该方法中,第一目标信息可以用于创建全局二级索引,第一目标信息中包含的位置信息可以确定基表中数据对应的存储位置,因此,基于第一位置信息创建的全局二级索引中不需要必须包含基表的主键、分布键或分区键等,能够适当减少基表的全局二级索引的数据量,减少索引膨胀问题,尤其在基表的主键、分布键涉及的属性列较多时,能够明显减少创建全局二级索引后需要维护的数据量,提高使用全局二级索引的效率。
在一种可能的设计中,所述第二节点包括至少一个数据节点,所述至少一个属性的数据包括第一数据;所述第一数据对应的位置信息包括第一位置信息和第二位置信息;或者,所述第一数据对应的位置信息包括所述第二位置信息和用于确定所述第一位置信息的目标分布键,所述目标分布键为所述第一数据所属的元组对应在所述基表的分布键;其中,所述第一位置信息用于指示所述第一数据所在的第一数据节点,所述第二位置信息用于指示所述第一数据节点中所述第一数据的存储位置。
在该方法中,基于数据对应的位置信息中的第一位置信息能够在存储基表的多个节点中快速确定数据所在的节点,基于数据对应的位置信息中的第二位置信息则能够在节点中进一步确定更为精确的数据存储位置。因此,基于位置信息中的第一位置信息和第二位置信息,能够快速高效的定位数据。
在一种可能的设计中,所述根据所述第一目标信息创建所述全局二级索引,包括:当所述第一数据对应的位置信息包括所述第二位置信息和所述目标分布键时,根据所述目标分布键确定所述第一位置信息;将所述第一数据、所述第一位置信息和所述第二位置信息作为所述全局二级索引中所述第一数据对应的元组;将所述第一数据对应的元组存储到第二数据节点。
在该方法中,当数据对应的位置信息中包含分布键数据时,第一节点可以根据分布键数据计算得到数据对应的第一位置信息,再将数据及其对应的第一位置信息、第二位置信息作为全局二级索引中的数据存储到数据节点,能够以数据量较小的第一位置信息替代数据量可能较大的分布键数据,适当减少全局二级索引中的数据量,提高全局二级索引的实用性。此外,第一节点承担分布键数据的计算处理,可以减少对用于存储数据的数据节点的资源占用,提高数据节点的存储性能。
在一种可能的设计中,所述根据所述第一目标信息创建所述全局二级索引,包括:将所述第一目标信息作为所述全局二级索引包含的信息;将所述全局二级索引包含的信息分布式存储到至少一个数据节点中。
在该方法中,第一节点可以直接将接收到的用于创建全局二级索引的信息将全局二级索引数据存储到数据节点,因此,第一节点主要起信息转发的作用,在创建基表过程中第一节点的数据处理和计算量较低,能够避免占用第一节点的较多资源,降低对第一节点性能的影响。
在一种可能的设计中,所述至少一个属性中的至少一个第一属性用于作为所述全局二级索引的索引建,所述至少一个属性中除所述至少一个第一属性以外的属性以及所述第一目标信息中除所述至少一个属性以外的信息用于作为所述全局二级索引的附加键。
在该方法中,全局二级索引中的部分或全部属性可以作为全局二级索引的索引键,基于索引键能够实现对数据的筛选过滤,并能得到较好的过滤效果。
在一种可能的设计中,所述第一目标信息还包括版本信息,所述版本信息用于指示所述至少一个属性的数据所属的元组的版本,每个元组的版本用于确定相应元组是否有效。
在该方法中,版本信息用于确定元组数据的有效性,因此基于元组数据的版本信息能够确定有效数据范围,从而避免对无效数据的处理,进而保证对数据进行处理时的正确性。
在一种可能的设计中,在根据所述第一目标信息创建所述全局二级索引之后,所述方法还包括:接收第三指示,所述第三指示用于指示重建所述全局二级索引;根据所述第三指示,指示用于存储所述全局二级索引的节点删除已存储的所述全局二级索引,并向所述第二节点发送第二请求;其中,所述第二请求用于请求获取第二目标信息,所述第二目标信息包括所述基表中属于至少一个目标属性的数据,所述至少一个目标属性为重建的所述全局二级索引包含的至少一个属性;接收来自所述第二节点的所述第二目标信息,并根据所述第二目标信息重建所述全局二级索引。
在该方法中,在分布式数据库中,第一节点在重建全局二级索引时,可以直接从存储基表的第二节点中获取用于重建全局二级索引所需的信息并根据获取的信息进行全局二级索引的重建。该方案能够基于分布式数据库原有架构实现,无需对数据库架构进行其它额外优化处理,因此处理成本较低,对数据库性能的影响也较低。此外,第一节点在接收到指示后即可快速完成全局二级索引的重建,对启动条件和应用场景的要求较低,可根据需要随时进行全局二级索引的重建,方案实用性较高。
在一种可能的设计中,所述根据所述第一指示,向用于存储所述基表的所述第二节点发送第一请求,包括:根据所述第一指示,确定所述基表并获取所述基表的元数据;根据所述第一指示和所述基表的元数据,生成所述全局二级索引的元数据;根据所述基表的元数据和所述全局二级索引的元数据,生成所述第一请求;向所述第二节点发送所述第一请求。
所述第二节点包括至少一个数据节点,在接收第一指示之前,所述方法还包括:根据接收到的第三指示,创建所述基表并将所述基表分布式存储在所述至少一个数据节点中;其中,所述第三指示用于指示创建所述基表。
在该方法中,全局二级索引的创建可以在基表创建之后进行,即第一节点可以在创建基表后,同步创建基表的全局二级索引,因此能够保证基表数据与全局二级索引数据的强一致性,进而提高全局二级索引可用性。
第二方面,本申请提供一种分布式数据库中创建全局二级索引的方法,应用于第二节点,所述方法包括:接收来自第一节点的第一请求;其中,所述第一请求用于请求获取第一目标信息,所述第一目标信息用于生成基表中至少一个属性的全局二级索引,所述第一目标信息包括所述基表中的所述至少一个属性;所述第二节点用于存储所述基表;根据所述第一请求,获取所述第一目标信息,并将所述第一目标信息发送至所述第一节点,以使所述第一节点根据所述第一目标信息创建所述全局二级索引。
在一种可能的设计中,所述第一目标信息还包括位置信息;其中,所述位置信息用于指示所述至少一个属性的数据所属的元组在所述基表中的位置。
在一种可能的设计中,所述第二节点包括至少一个数据节点,所述至少一个属性的数据包括第一数据;所述第一数据对应的位置信息包括第一位置信息和第二位置信息;或者,所述第一数据对应的位置信息包括所述第二位置信息和用于确定所述第一位置信息的目标分布键,所述目标分布键为所述第一数据所属的元组对应在所述基表的分布键;其中,所述第一位置信息用于指示所述第一数据所在的第一数据节点,所述第二位置信息用于指示所述第一数据节点中所述第一数据的存储位置。
在一种可能的设计中,所述至少一个属性中的至少一个第一属性用于作为所述全局二级索引的索引建,所述至少一个属性中除所述至少一个第一属性以外的属性以及所述第一目标信息中除所述至少一个属性以外的信息用于作为所述全局二级索引的附加键。
在一种可能的设计中,所述第一目标信息还包括版本信息,所述版本信息用于指示所述至少一个属性的数据所属的元组的版本,每个元组的版本用于确定相应元组是否有效。
在一种可能的设计中,在根据所述第一请求,获取所述第一目标信息,并将所述第一目标信息发送至所述第一节点之后,所述方法还包括:按照所述第一节点的指示删除已存储的所述全局二级索引,并接收来自所述第一节点的第二请求;其中,所述第二请求用于请求获取第二目标信息,所述第二目标信息包括所述基表中属于至少一个目标属性的数据,所述至少一个目标属性为重建的所述全局二级索引包含的至少一个属性;根据所述第二请求,获取所述第二目标信息,并将所述第二目标信息发送至所述第一节点,以使所述第一节点根据所述第二目标信息重建所述全局二级索引。
第三方面,本申请提供一种数据处理装置,应用于第一节点,所述装置包括:收发单元,用于接收第一指示,所述第一指示用于指示创建基表中至少一个属性的全局二级索引;处理单元,用于根据所述第一指示,通过所述收发单元向用于存储所述基表的第二节点发送第一请求;其中,所述第一请求用于请求获取第一目标信息,所述第一目标信息包括所述基表中的所述至少一个属性;所述处理单元,还用于通过所述收发单元接收来自所述第二节点的所述第一目标信息,并根据所述第一目标信息创建所述全局二级索引。
在一种可能的设计中,所述第一目标信息还包括位置信息;其中,所述位置信息用于指示所述至少一个属性的数据所属的元组在所述基表中的位置。
在一种可能的设计中,所述第二节点包括至少一个数据节点,所述至少一个属性的数据包括第一数据;所述第一数据对应的位置信息包括第一位置信息和第二位置信息;或者,所述第一数据对应的位置信息包括所述第二位置信息和用于确定所述第一位置信息的目标分布键,所述目标分布键为所述第一数据所属的元组对应在所述基表的分布键;其中,所述第一位置信息用于指示所述第一数据所在的第一数据节点,所述第二位置信息用于指示所述第一数据节点中所述第一数据的存储位置。
在一种可能的设计中,所述处理单元根据所述第一目标信息创建所述全局二级索引时,具体用于:当所述第一数据对应的位置信息包括所述第二位置信息和所述目标分布键时,根据所述目标分布键确定所述第一位置信息;将所述第一数据、所述第一位置信息和所述第二位置信息作为所述全局二级索引中所述第一数据对应的元组;将所述第一数据对应的元组存储到第二数据节点。
在一种可能的设计中,所述处理单元根据所述第一目标信息创建所述全局二级索引时,具体用于:将所述第一目标信息作为所述全局二级索引包含的信息;将所述全局二级索引包含的信息分布式存储到至少一个数据节点中。
在一种可能的设计中,所述至少一个属性中的至少一个第一属性用于作为所述全局二级索引的索引建,所述至少一个属性中除所述至少一个第一属性以外的属性以及所述第一目标信息中除所述至少一个属性以外的信息用于作为所述全局二级索引的附加键。
在一种可能的设计中,所述第一目标信息还包括版本信息,所述版本信息用于指示所述至少一个属性的数据所属的元组的版本,每个元组的版本用于确定相应元组是否有效。
在一种可能的设计中,所述处理单元在根据所述第一目标信息创建所述全局二级索引之后,还用于:通过所述收发单元接收第二指示,所述第二指示用于指示重建所述全局二级索引;根据所述第二指示,通过所述收发单元指示用于存储所述全局二级索引的节点删除已存储的所述全局二级索引,并向所述第二节点发送第二请求;其中,所述第二请求用于请求获取第二目标信息,所述第二目标信息包括所述基表中属于至少一个目标属性的数据,所述至少一个目标属性为重建的所述全局二级索引包含的至少一个属性;通过所述收发单元接收来自所述第二节点的所述第二目标信息,并根据所述第二目标信息重建所述全局二级索引。
在一种可能的设计中,所述处理单元根据所述第一指示,向用于存储所述基表的所述第二节点发送第一请求时,具体用于:根据所述第一指示,确定所述基表并获取所述基表的元数据;根据所述第一指示和所述基表的元数据,生成所述全局二级索引的元数据;根据所述基表的元数据和所述全局二级索引的元数据,生成所述第一请求;向所述第二节点发送所述第一请求。
第四方面,本申请提供一种数据处理装置,应用于第二节点,所述装置包括:收发单元,用于接收来自第一节点的第一请求;其中,所述第一请求用于请求获取第一目标信息,所述第一目标信息用于生成基表中至少一个属性的全局二级索引,所述第一目标信息包括所述基表中的所述至少一个属性;所述第二节点用于存储所述基表;处理单元,用于根据所述第一请求,获取所述第一目标信息,并通过所述收发单元将所述第一目标信息发送至所述第一节点,以使所述第一节点根据所述第一目标信息创建所述全局二级索引。
在一种可能的设计中,所述第一目标信息还包括位置信息;其中,所述位置信息用于指示所述至少一个属性的数据所属的元组在所述基表中的位置。
在一种可能的设计中,所述第二节点包括至少一个数据节点,所述至少一个属性的数据包括第一数据;所述第一数据对应的位置信息包括第一位置信息和第二位置信息;或者,所述第一数据对应的位置信息包括所述第二位置信息和用于确定所述第一位置信息的目标分布键,所述目标分布键为所述第一数据所属的元组对应在所述基表的分布键;其中,所述第一位置信息用于指示所述第一数据所在的第一数据节点,所述第二位置信息用于指示所述第一数据节点中所述第一数据的存储位置。
在一种可能的设计中,所述至少一个属性中的至少一个第一属性用于作为所述全局二级索引的索引建,所述至少一个属性中除所述至少一个第一属性以外的属性以及所述第一目标信息中除所述至少一个属性以外的信息用于作为所述全局二级索引的附加键。
在一种可能的设计中,所述第一目标信息还包括版本信息,所述版本信息用于指示所述至少一个属性的数据所属的元组的版本,每个元组的版本用于确定相应元组是否有效。
在一种可能的设计中,所述处理单元在根据所述第一请求,获取所述第一目标信息,并通过所述收发单元将所述第一目标信息发送至所述第一节点之后,还用于:按照所述第一节点的指示删除已存储的所述全局二级索引,并通过所述收发单元接收来自所述第一节点的第二请求;其中,所述第二请求用于请求获取第二目标信息,所述第二目标信息包括所述基表中属于至少一个目标属性的数据,所述至少一个目标属性为重建的所述全局二级索引包含的至少一个属性;根据所述第二请求,获取所述第二目标信息,并通过所述收发单元将所述第二目标信息发送至所述第一节点,以使所述第一节点根据所述第二目标信息重建所述全局二级索引。
第五方面,本申请提供一种数据处理装置,所述装置包括存储器和至少一个处理器;所述存储器用于存储计算机程序;所述处理器用于执行所述存储器中存储的计算机程序,实现上述第一方面或第一方面的任一可能的设计所描述的方法,或者,实现上述第二方面或第二方面的任一可能的设计所描述的方法。
第六方面,本申请提供一种分布式数据库系统,所述系统包括第一节点和第二节点,其中,所述第一节点用于实现上述第一方面或第一方面的任一可能的设计所描述的方法,所述第二节点用于实现上述第二方面或第二方面的任一可能的设计所描述的方法。
第七方面,本申请提供一种计算机存储介质,所述计算机存储介质中存储有计算机可读程序,当所述计算机可读程序在计算机上运行时,使得所述计算机执行上述第一方面或第一方面的任一可能的设计所描述的方法,或者,使得所述计算机执行上述第二方面或第二方面的任一可能的设计所描述的方法。
第八方面,本申请提供一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算机执行上述第一方面或第一方面的任一可能的设计所描述的方法,或者,使得所述计算机执行上述第二方面或第二方面的任一可能的设计所描述的方法。
第九方面,本申请实施例提供一种芯片,所述芯片用于读取存储器中存储的计算机程序,执行上述第一方面或第一方面的任一可能的设计所描述的方法,或者,执行上述第二方面或第二方面的任一可能的设计所描述的方法。
第十方面,本申请实施例提供一种芯片系统,所述芯片系统包括处理器,用于支持计算机装置实现上述第一方面或第一方面的任一可能的设计所描述的方法,或者,实现上述第二方面或第二方面的任一可能的设计所描述的方法。
在一种可能的设计中,所述芯片系统还包括存储器,所述存储器用于存储所述计算机装置必要的程序和数据。
在一种可能的设计中,所述芯片系统由芯片构成,或者包含芯片和其他分立器件。
上述第二方面到第十方面的有益效果,请参见上述第一方面的有益效果的描述,这里不再重复赘述。
附图说明
图1a为一种分布式数据库系统的架构示意图;
图1b为一种创建全局二级索引的流程的示意图;
图2a为一种分布式数据库系统的架构示意图;
图2b为一种创建全局二级索引的流程的示意图;
图3a为本申请实施例提供的一种分布式数据库系统的架构示意图;
图3b为本申请实施例提供的一种分布式数据库系统的架构示意图;
图4为本申请实施例提供的一种分布式数据库中创建全局二级索引的方法的示意图;
图5为本申请实施例提供的一种分布式数据库中数据分布的示意图;
图6为本申请实施例提供的一种分布式数据库中数据分布的示意图;
图7为本申请实施例提供的一种分布式数据库中创建全局二级索引的方法的流程示意图;
图8为本申请实施例提供的一种分布式数据库中重建全局二级索引的方法的流程示意图;
图9为本申请实施例提供的一种分布式数据库中创建全局二级索引的方法的示意图;
图10为本申请实施例提供的一种数据处理装置的示意图;
图11为本申请实施例提供的一种数据处理装置的结构示意图。
具体实施方式
为了使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施例作进一步地详细描述。其中,在本申请实施例的描述中,以下,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。
为了便于理解,示例性的给出了与本申请相关概念的说明以供参考。
1)分布式数据库,是用计算机网络将物理上分散的多个数据库单元连接起来组成的一个逻辑上统一的数据库,其中,每个被连接起来的数据库单元可以称为站点或节点或数据节点(data node,DN)等。分布式存储是一种数据存储技术,是将数据分散的存储在多个独立的数据单元的技术。
2)键-值数据库(key-value database),或称键-值存储,是用来存储、检索和管理关联数组的数据存储范式,关联数组是更常称为字典或散列表的一种数据结构。其中,字典包含对对象或记录的一个收集,记录内有多个不同的字段(或称域),每个字段都包含数据。键-值数据库可以将数据存储为键值对集合,其中键作为唯一标识符,可以用于标识数据,键也可以称为字段或者属性等。
3)基表(base table),即表,是数据库中用来存储数据的对象,是有结构的数据的集合。基表可以定义为至少一个属性(或称为列/键)的集合。一个属性就是基表中的一列数据,因此,基表也可以理解为是至少一列数据的集合。
4)分片(sharding),是分布式数据库中一种利用横向扩展来分散负载的方法,对象可以是基表、物化视图、全局二级索引等。示例性的,基表的分片中可以包括该基表中的至少一行数据。
5)主键(primary key),基表中通常有一列或多列数据的组合,其值能唯一地标识基表中的每一行,这样的一列或多列数据称为基表的主键,通过主键可强制基表的实体完整性。当创建或更改基表时可通过定义主键约束来创建主键,一个基表只能有一个主键约束,且主键约束中的列数据不能为空值。
6)分布键(distribution key),是分布式数据库中,用于确定存储特定数据行的数据库单元的一列或多列数据的组合,基于分布键能够确定基表中的数据行存储在哪个数据库单元。
7)全局二级索引(global secondary index,GSI),也称为全局索引,是索引的一种,索引是数据库系统中一个排序的数据结构,用于协助快速查询、更新数据库基表中的数据。全局二级索引是在分布式数据库中的数据节点生效的一种全局的索引。索引键(indexkey)是全局二级索引中标识索引项的一列(或多列的组合)。
8)协调节点(coordinator node,CN),是进行数据调度的节点。协调节点可以管理与该协调节点建立通信连接的数据节点并进行数据节点间的数据调度。
数据节点,是用于处理和存储数据的节点。数据节点可以接收协调节点的数据调度信息,并根据接收的数据调度信息收发数据或进行数据处理和存储的节点。
本申请实施例中提供的协调节点和数据节点的设备形态可以是电子设备,也可以是设置在电子设备中的功能模块或单元,还可以是部署在电子设备中的芯片、集成电路、元器件等。
示例性的,电子设备可以是终端设备,终端设备又可以称为用户设备(userequipment,UE)、移动终端(mobile terminal,MT)等。终端设备包括但不限于手机(MobilePhone)、平板电脑、笔记本电脑、掌上电脑、移动互联网设备(Mobile Internet Device,MID)、可穿戴设备(例如智能手表、智能手环等),车辆、车载设备(例如,汽车、电动车、飞机、船舶、火车、高铁等)、虚拟现实(Virtual Reality,VR)设备、增强现实(AugmentedReality,AR)设备、工业控制(Industrial Control)中的无线终端、智能家居设备(例如,冰箱、电视、空调、电表等)、智能机器人、车间设备、无人驾驶(Self Driving)中的无线终端、远程手术(Remote Medical Surgery)中的无线终端、智能电网(Smart Grid)中的无线终端、运输安全(Transportation Safety)中的无线终端、智慧城市(Smart City)中的无线终端,或智慧家庭(Smart Home)中的无线终端、飞行设备(例如,智能机器人、热气球、无人机、飞机)等。示例性的,本申请实施例中的终端设备包括但不限于搭载 或者其它操作系统。
应理解,本申请实施例中“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B的情况,其中A、B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一(项)个”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a、b或c中的至少一项(个),可以表示:a,b,c,a和b,a和c,b和c,或a、b和c,其中a、b、c可以是单个,也可以是多个。
当分布式数据库中存在基表时,无论基表中有没有数据,用户都可以根据需求对表中的一列或几列创建全局二级索引。此时,基表和全局二级索引的分布方式可以是哈希(hash)分布、列表(list)分布、范围(range)分布等。对于已经存在的全局二级索引,用户也可以通过指令对其进行重建。重建的指令可以是重建索引(reindex)类指令,也可以通过修改基表的属性来重建基表的所有全局二级索引。
全局二级索引的创建/重建与常规的索引创建/重建逻辑上有很大不同,全局二级索引的创建/重建过程常常伴随着大量跨数据节点的数据交换。这使得全局二级索引的创建/重建的时间成本和数据一致性风险极高。针对这些问题,当前普遍的做法是针对数据库本身的存储结构,同步或异步的进行基表及其全局二级索引的构建/重建。
以创建过程为例,同步进行基表及其全局二级索引的创建过程,会导致数据库I/O短时间内增大,对整体数据库的性能是一个考验。虽然当前可以针对数据库的架构进行不同程度的优化,但是随之而来的是扩展性的降低及维护成本的升高。
参照图1a,当前的一种分布式数据库系统的架构可以是基于日志结构合并(logstructured merge,LSM)树(tree)的架构,基于该架构的分布式数据库中存在一个或多个副本,每个副本中存在多个数据分片,其中,每个数据分片存储有部分或全部的基表和全局二级索引数据,每个数据分片内可以存在一个或多个基表分区和全局二级索引分区,每个基表分区中包括基表中的部分数据,每个全局二级索引分区中包括全局二级索引中的部分数据。
如图1b中所示,该系统中创建全局二级索引的流程可以包括以下步骤1~步骤5:
步骤1:系统中节点在创建全局二级索引时,生成全局二级索引元数据,并将创建过程中产生的数据记录到增量数据表中。
其中,受限于LSM树存储结构,全局二级索引元数据中需要包含基表的主键。
步骤2:节点在未完成的数据操纵语言(data manipulation language,DML)指令执行结束后,通过获取基表的基线快照来获取全量基表信息。
步骤3:节点扫描基线快照,并通过分布式排序的结构化查询语言(structuredquery language,SQL)计划将基线数据写入全局二级索引的基线数据表中。
在该步骤中,全局二级索引的数据由分布式排序的SQL的计划进行构建。其中,数据库中的计划结构相对复杂,若要在原有计划的基础上进行扩展会产生额外的开销。
步骤4:节点将基线数据表中的数据同步给分布式数据库系统中的其它副本进行数据备份。
步骤5:其它副本备份完成后,节点校验基表和索引表数据的一致性。
其中,对于具有唯一约束的全局二级索引,还需要校验索引表中的属性是否唯一。
上述方法能够保证全局二级索引与基表数据的强一致性,但是整体方案依赖于底层LSM树存储架构,扩展性较差。此外,上述方法中全局二级索引的增量数据表和基线数据表都需要根据基表主键进行排序,而分布式排序计划的开销很大,同时维护多份增量数据表和基线数据表的成本也很高,因此整体构建过程中分布式数据库的处理压力很大,可能难以保证分布式数据库的性能。上述方法中数据校验发生在创建过程的最后阶段,因此创建过程中出现数据不一致或不符合唯一约束的情况时是无法及时退出的。
以创建过程为例,异步进行基表及其全局二级索引的创建过程,可以更方便的根据数据库负载进行动态优化,但是会使得全局二级索引可用性变差,若是创建过程中业务负载较大,则创建的时间成本会升高。此外,异步创建基表及其全局二级索引也会加重全局二级索引与基表数据的不一致性,影响全局二级索引的准确性。
参照图2a,当前的另一种分布式数据库系统中可以包括日志管理服务(log-structured journal service)、分布式非关系型数据库和变更转发服务(change recordpropagators)。其中,日志管理服务中包含日志管理系统(journal manager)、变更日志和面向流的接口(Stream-Oriented API),日志管理系统用于管理变更日志(journal),变更日志内包含基表变更记录,面向流的接口用于提交变更记录给变更转发服务。分布式非关系型数据库中包含基表存储节点(Base table storage node,BTSN)集(set)和全局二级索引节点集。其中,基表存储节点集即基表存储节点的集合,基表存储节点为存储基表数据的节点。全局二级索引节点集即全局二级索引节点的集合,全局二级索引节点为存储全局二级索引数据的节点。基表-全局二级索引节点是以基表上的各个全局二级索引为单位分开的逻辑集合。变更转发服务用于将变更日志发送给基表-全局二级索引节点。
如图2b中所示,该系统中创建全局二级索引的流程可以包括以下步骤1~步骤4:
步骤1:分布式数据库收到创建全局二级索引的指令后,日志管理服务将创建时的变更记录到日志管理服务中的日志中。
步骤2:分布式数据库中部署的变更转发服务读取、过滤并发送变更日志到全局二级索引对应的节点。
步骤3:如果在创建全局二级索引时基表中存有数据,则分布式数据库对基表生成快照,变更转发服务将映射好的基表快照数据发送到全局二级索引对应的节点。
在该步骤中,如果基表中存有数据,则对基表生成最新的快照,并通过映射,将快照中的数据转发给全局二级索引对应的节点。相同的,变更转发服务会对之前记录的变更日志进行映射,并转发给全局二级索引所对应的节点。其中,快照是一个只读的静态视图,记录了某个时间点上数据库中的数据信息。
该步骤中的数据处理操作是由单独部署的变更转发服务完成的,整个过程与基表的创建过程是异步的,因此难以保证全局二级索引与基表的数据的强一致性。
步骤4:分布式数据库利用映射好的基表快照数据填充全局二级索引,并通过收到的变更日志更新全局二级索引。
在该步骤中,全局二级索引所在的节点(GSIN)通过变更转发服务发送来的数据进行全局二级索引的本地创建。全局二级索引填充基线数据,并通过变更日志更新完成之后,可以与基表达成数据的最终一致。
上述方法依赖于独立部署的日志管理服务通过API与数据库进行交互,这种部署方式的扩展性较差,在修改传输数据的同时不仅要维护数据库内的服务或模块,还需要维护日志管理服务中的API,导致对数据操作不够灵活。此外,上述方法中变更转发服务是异步工作的,导致基表和全局二级索引并不能实时同步。对于涉及长时间、DML操作密集的业务,全局二级索引需要频繁更改可用状态来防止用户查询到错误(与基表不一致)的信息,最后会导致全局二级索引的有效的时间窗口变小,可用性变差。
鉴于以上问题,本申请实施例提供一种分布式数据库中创建全局二级索引的方法及装置,用于在保证分布式数据库性能和成本的同时,创建可用性高的全局二级索引。该方案能够在分布式数据库中,在已经创建好的基表上创建全局二级索引,并可以重建全局二级索引,整个创建过程能够平衡分布式数据库的性能和可扩展性,并保持全局二级索引与基表数据的强一致性。
本申请实施例提供的方案可以应用于针对分布式数据库中的基表,创建或重建基表的全局二级索引的场景中。
本申请实施例中,基表中包括至少一列数据,所述至少一列数据可以分为至少一行数据,即基表中包括至少一行×至少一列数据。在本申请一些实施例中,基表中位于同一列的数据属于同一属性,基表中位于同一行的数据属于同一元组,可以存储在同一存储位置中,基表中的至少一列数据为基表的分布键,基表的分布键用于确定基表中数据的存储位置。可选的,基表中还可以存在用于作为主键的至少一列数据。基表的分布键和主键可以相同,也可以不同。基表的分布键和主键可以为基表中设定列的数据,或者可以为根据用户指示确定的数据。
本申请实施例中,基表的全局二级索引包含基表中部分列的数据以及基表中数据对应的位置信息,该部分列的数据可以是用户从基表的列数据中选择并设定的,数据对应的位置信息用于指示对应数据在基表中的位置。可选的,基表的全局二级索引还可以包括基表中数据对应的版本信息(或称为事务信息),数据对应的版本信息用于确定相应数据是否有效。在本申请一些实施例中,全局二级索引中位于同一列的数据属于同一属性,位于同一行的数据属于同一元组,可以存储在同一位置中。
在本申请一些实施例中,全局二级索引中的至少一列数据可以为全局二级索引的分布键,全局二级索引的分布键用于确定全局二级索引中数据的存储位置。在本申请一些实施例中,全局二级索引中可以包含索引键、附加键(也可称为附加列/隐藏列/覆盖列/包含列)等。其中,索引键为全局二级索引中的至少一列数据,可以用于查询特定数据,从而加快查询速度。隐藏列包含全局二级索引中对用户不可见的至少一列数据,当用户指示显示全局二级索引时,显示给用户的全局二级索引的数据中不包含全局二级索引的隐藏列数据。全局二级索引的分布键和索引键可以相同,也可以不同。全局二级索引的分布键和索引键可以为设定列的数据,或者可以为根据用户指示确定的数据。
在本申请实施例提供的方案中,用户可以在创建基表后,同步创建基表的全局二级索引,并可以在后续过程中对已创建的全局二级索引进行重建。用户可以对基表中的数据进行插入、更新、删除(insert、update、delete,IUD)操作,从而对基表进行更新,并可以同步对基表的全局二级索引进行相应更新,从而保证基表数据与全局二级索引数据的强一致性。
本申请实施例提供的方案可以应用于包含至少一个协调节点与至少一个数据节点的分布式数据库系统中。在分布式数据库系统中,数据节点用于存储基表数据和/或全局二级索引数据,协调节点用于对数据节点中存储的基表数据、全局二级索引数据进行数据计算处理、调度处理等。
示例性的,如图3a中所示,分布式数据库系统中包含至少一个协调节点,每个协调节点对应至少一个数据节点。分布式数据库系统中的每个节点(协调节点或数据节点)可以包含一条或多条基表的元数据以及一条或多条全局二级索引的元数据,其中,元数据包含但不限于数据库对象的描述信息如类型、属性、名称等信息。数据节点包含的元数据是协调节点包含的元数据的子集,节点中每条基表元数据可以对应一条或多条全局二级索引元数据。数据节点中每条元数据对应至少一条数据节点中的数据。基表中包含的数据、全局二级索引中包含的数据均可以分布式存储在至少一个数据节点中,其分布方式可以采用哈希分布、列表分布、范围分布等方式。
在本申请一些实施例中,基表的分布式存储与全局二级索引的分布式存储之间互相独立。协调节点可以按照基表对应的分布方式将基表数据分布式存储在至少一个数据节点中。协调节点可以按照全局二级索引对应的分布方式将全局二级索引数据分布式存储在至少一个数据节点中。同一个数据节点中可以仅存储基表数据或全局二级索引数据,也可以同时存储基表数据和全局二级索引数据。
示例性的,协调节点可以根据基表的分布键,通过分布算法将基表数据分布式存储在多个数据节点。针对基表的全局二级索引,协调节点可以采用与基表相同或不同的分布方式,根据全局二级索引的分布键,通过分布算法将全局二级索引数据分布式存储在多个数据节点。
在一种可能的应用场景中,协调节点可以根据用户指示创建基表,在创建基表后,协调节点可以根据用户指示创建基表的全局二级索引并在至少一个数据节点分布式存储基表的全局二级索引的数据,其中,若基表中存在数据,则需要将基表数据同步到全局二级索引。在另一种可能的应用场景中,协调节点在根据用户指示创建基表的全局二级索引后,可以根据用户指示或场景需求重建基表的全局二级索引,其中,若基表中存在数据,则需要将基表数据同步到全局二级索引。
示例性的,如图3b中所示,协调节点中可以包括解析模块、优化模块和执行模块。如图3b中的a过程所示,用户可以在协调节点上输入用于指示创建/重建全局二级索引的创建/重建(create/rebuild)语句,来触发全局二级索引的创建/重建流程。在用户输入创建/重建语句后,协调节点中的解析模块和优化模块分别对创建/重建语句进行解析和优化,将创建/重建语句转换为执行模块可以识别的数据结构。执行模块可以依据基表名称和全局二级索引名称等内容来生成/更新全局二级索引的元数据,并指示数据节点生成/更新全局二级索引的元数据,如图3b中的b过程所示。如图3b中的c过程所示,执行模块在生成/更新全局二级索引的元数据后,可以根据全局二级索引的元数据生成用于控制创建/重建全局二级索引的指示例如SQL控制语句。解析模块和优化模块可以对该指示进行解析优化后发送至执行模块。如图3b中的d过程所示,执行模块可以根据该指示,从数据节点查询获取创建/重建全局二级索引所需的数据。再将获取到的数据作为全局二级索引中的数据存储到数据节点中,实现全局二级索引的创建/重建,如图3b中的e过程所示。
示例性的,上述解析模块的功能可以由协调节点中部署的解析器实现,上述优化模块的功能可以由协调节点中部署的优化器实现,上述执行模块的功能可以由数据节点中部署的执行器实现。当然,上述各模块的功能也可以通过其它硬件装置实现,本申请实施例中不做具体限制。
示例性的,上述协调节点或数据节点的执行逻辑可以以程序码的形态部署在分布式数据库中的协调节点和数据节点上。
本申请实施例中,各个数据节点除存储的数据不同之外,在架构上并无不同,并且支持各种不同的数据分布方式。协调节点可以通过选举算法选择,也可采用与数据节点不同的架构,根据分布式数据库系统具体部署情况,协调节点可以有多个。数据库的各个模块可以平等地部署在协调节点和各个数据节点上,并通过配置文件,设定节点在分布式数据库系统中承担的角色。
应理解,上述图3a或图3b所示的系统架构仅是对本申请方案适用的系统架构的一种示例性说明,并不对本申请方案可应用的系统架构造成限制。
下面结合具体实施例,对本申请实施例提供的方案进行介绍。
参照图4,本申请实施例提供的一种分布式数据库中创建全局二级索引的方法可以包括:
S401:第一节点接收第一指示,所述第一指示用于指示创建基表中至少一个属性的全局二级索引。
在本申请一些实施例中,该步骤可以在创建基表后执行,或者可以在已创建有基表的场景下执行。可选的,在第一节点接收第一指示之前,第一节点可以根据接收到的指示创建基表并将所述基表分布式存储在第二节点中。其中,所述指示用于指示创建所述基表,所述第二节点可以包括至少一个数据节点,所述第一节点将基表分布式存储在第二节点中具体可以是所述第一节点将所述基表分布式存储在所述至少一个数据节点中。
示例性的,第一节点可以为上述实施例中所述的分布式数据库中的协调节点,数据节点可以为上述实施例中所述的分布式数据库中的数据节点。
在本申请一些实施例中,第一节点创建的基表中可以包含至少一个属性(至少一列数据),其中每个属性为基表中的一列数据,所述基表中的数据(即至少一个属性/至少一列数据)可以按照行分布情况(即按照元组)分布式存储在第二节点中的至少一个数据节点中。其中,所述基表中位于同一行的数据可以存储在同一个数据节点中,所述至少一个数据节点中每个数据节点存储有所述基表中的至少一行数据。
下面结合具体示例对基表进行介绍。
示例1、不包含主键的基表
示例性的,以基表中的数据为某学校学籍系统中的学籍数据为例,该基表的名称可以为基表1(table1),该基表中可以包括如下表1中所示的数据:
表1基表1数据
其中,表1所示的基表1中可以包含3列×n行数据(n为正整数),其中,3列数据分别属于学生号、学生姓名、班级号这3个属性,每行数据对应一个学生的学籍信息。则当上述基表为基表1时,基表中包含的至少一个属性为表1中所示的学生号、学生姓名和班级号这3个属性。
表1所示的基表1的表定义信息(或表属性信息)如下表2中所示:
表2基表1定义信息
根据上述表2可以确定,基表的名称为基表1,基表中包含3个属性,具体为学生号、学生姓名和班级号这3列数据。其中,学生号为自增且唯一的属性,是基表1的分布键,且基表1中数据按照哈希分布的方式分布存储在多个数据节点中。基表1中不包含主键。学生号这一属性中的数据为整数型数据,学生姓名这一属性中的数据为可变长度字符型数据,班级号这一属性中的数据为整数/整型数据。其中,上述表2所指示的信息可以作为基表1的元数据存储在第一节点和第二节点中,当然,基表1的元数据不限于包括上述表2所指示的信息,也可以包括比表2中更多或更少的信息。
示例性的,以第一节点为分布式数据库系统中的协调节点、第二节点为分布式数据库系统中的至少一个数据节点为例,基表1在分布式数据库系统中的分布存储情况如图5中所示。其中,协调节点和每个数据节点中均存储有基表1的元数据,基表1中包含的数据可以按分片分别存储在多个数据节点中。例如,基表1中的数据可以分为3个分片,其中,分片1中包括基表1中的第1行数据(1:{‘A’,11})和第2行数据(2:{‘B’,12})等,分片1中包括的这些数据可以存储在一个数据节点中;分片2中包括基表1中的第3行数据(3:{‘C’,13})等,分片2中包括的数据可以存储在一个数据节点中;分片3中可以包括基表1中的其它数据,这些数据可以存储在一个数据节点中。
需要说明的是,上述示例仅是对本申请实施例提供的方法适用的一种场景和实施方式的示例性说明,并不对本申请实施例提供的方法的应用场景和实施方式造成限制。
示例2、包含主键的基表
示例性的,以基表中的数据为某学校学籍系统中的学籍数据为例,该基表的名称可以为基表2(table2),该基表中可以包括如下表3中所示的数据:
表3基表2数据
其中,表3所示的基表2中可以包含4列×n行数据(n为正整数),其中,4列数据分别属于学生号、学籍档案号、学生姓名、班级号这4个属性,每行数据对应一个学生的学籍信息。则当基表为基表2时,基表中包含的至少一个属性为表3中所示的学生号、学籍档案号、学生姓名和班级号这4个属性。
表3所示的基表2的表定义信息(或表属性信息)如下表4中所示:
表4基表2定义信息
根据上述表4可以确定,基表的名称为基表2,基表中包含4个属性,具体为学生号、学籍档案号、学生姓名和班级号这4列数据。其中,学生号、学籍档案号这两个属性为基表2的主键。学生号这一属性为基表2的分布键,且基表2中数据按照哈希分布的方式分布存储在多个数据节点中。学生号这一属性中的数据为整数型数据,学籍档案号这一属性中的数据为字符型数据,学生姓名这一属性中的数据为可变长度字符型数据,班级号这一属性中的数据为整数/整型数据。其中,上述表4所指示的信息可以作为基表2的元数据存储在第一节点和第二节点中,当然,基表2的元数据不限于包括上述表4所指示的信息,也可以包括比表4中更多或更少的信息。
基表2在分布式数据库中的分布存储情况可以参照上述图5中所示的分布情况,此处不再赘述。
在本申请一些实施例中,基表可以具有至少一个全局二级索引,其中每个全局二级索引可以包括基表中的部分属性。全局二级索引中的数据可以按照行分布情况分布式存储在至少一个数据节点中,其中,全局二级索引中位于同一行的数据属于同一元组,可以存储在同一个节点中,所述至少一个数据节点中每个数据节点存储有全局二级索引中的至少一行数据(即至少一个元组)。可选的,所述至少一个数据节点与第二节点包括的至少一个数据节点可以相同也可以不同,或者,所述至少一个数据节点和所述第二节点包括的至少一个数据节点中可以存在部分相同的节点。
在本申请一些实施例中,基表的全局二级索引还包含位置信息,所述位置信息用于指示全局二级索引中数据在所述基表中对应的数据在所述基表中的位置,具体的,所述位置信息用于指示至少一个属性的数据所属的元组在基表中的位置,所述至少一个属性为全局二级索引中包含的属于基表的属性。
作为一种可选的实施方式,每个数据对应的位置信息可以包括第一位置信息和第二位置信息,其中,所述第一位置信息用于指示数据所在的节点,所述第二位置信息用于指示该节点中该数据的存储位置,即数据在其所在节点中的存储位置。基于此,全局二级索引中可以包含至少一个位置信息,所述至少一个位置信息可以作为全局二级索引中的一个属性,每个位置信息对应基表中的一个元组,每个位置信息用于指示对应的元组在基表中的位置。
示例性的,所述第二节点可以包括至少一个数据节点,全局二级索引中至少一个属性的数据包括第一数据;所述第一数据对应的位置信息包括第一位置信息和第二位置信息;其中,所述第一位置信息用于指示所述第一数据所在的第一数据节点,所述第二位置信息用于指示所述第一数据节点中所述第一数据的存储位置。
其中,所述第一位置信息可以根据基表的分布键确定。具体的,基表中数据对应的第一位置信息可以是根据基表的分布方式对应的分布算法对该数据中属于基表分布键的数据进行计算得到的结果。例如,基表中的数据按照哈希分布方式分布存储在多个数据节点中,则基表中数据对应的第一位置信息为采用哈希算法对该数据中属于基表分布键的数据进行运算的结果。
作为另一种可选的实施方式,每个数据对应的位置信息可以包括第二位置信息和用于确定第一位置信息的目标分布键。其中,所述目标分布键为数据所属的元组对应在基表的分布键,即数据所属的元组中包含的属于基表分布键的数据,所述第一位置信息用于指示数据所在的节点,所述第二位置信息用于指示该节点中该数据的存储位置,即数据在其所在节点中的存储位置。
示例性的,所述第二节点可以包括至少一个数据节点,全局二级索引中至少一个属性的数据包括第一数据;所述第一数据对应的位置信息包括所述第二位置信息和用于确定所述第一位置信息的目标分布键,所述目标分布键为所述第一数据所属的元组对应在所述基表的分布键;其中,所述第一位置信息用于指示所述第一数据所在的第一数据节点,所述第二位置信息用于指示所述第一数据节点中所述第一数据的存储位置。
在本申请一些实施例中,基表的全局二级索引还包含版本信息,所述版本信息用于指示全局二级索引中数据在所述基表中对应的数据的版本,具体的,所述版本信息用于指示至少一个属性的数据所属的元组的版本,每个元组的版本用于确定相应元组是否有效,所述至少一个属性为全局二级索引中包含的属于基表的属性。基于此,全局二级索引中可以包含至少一个版本信息,所述至少一个版本信息可以作为全局二级索引中的一个属性,每个版本信息对应基表中的一个元组,每个版本信息用于指示对应的元组是否有效,从而确定基表中所包括的有效数据,进而可以从有效数据中获取所需查询的数据。
可选的,全局二级索引中包含的位置信息和版本信息可以作为全局二级索引中的附加键的数据。
在本申请一些实施例中,第一节点可以根据用户的指示,触发创建基表的全局二级索引,其中,第一节点创建的全局二级索引可以包括上述的基表中的至少一个属性、位置信息、版本信息等信息。
示例性的,在第一节点创建的基表为上述示例1所述的场景中的基表1或者为上述示例2所述的场景中的基表2时,第一指示可以是用于指示创建全局二级索引class_gsi的指示,其中,要求全局二级索引的名称为class_gsi,全局二级索引class_gsi中包括基表中的班级号和学生姓名这两个属性,且班级号这一属性为class_gsi的索引键和分布键,class_gsi中数据按照哈希分布方式分布式存储在多个节点。例如,在基表为上述示例1所述的场景中的基表1时,第一指示可以为用户输入第一节点的以下SQL语句:CREATE GLOBALINDEX class_gsi ON table1(classid)CONTAINING(name)DISTRIBUTE BY HASH(classid)。其中,CREATE GLOBAL INDEX指创建全局二级索引,CONTAINING指附加键,DISTRIBUTE BY HASH指按照哈希分布方式分布。该语句的含义为:在分布键为班级号的基表1上创建索引键和分布键为班级号、分布方式为哈希分布、附加键为学生姓名的全局二级索引class_gsi。同理,在基表为上述示例2所述的场景中的基表2时,第一指示可以为用户输入第一节点的以下SQL语句:CREATE GLOBAL INDEX class_gsi ON table2(classid)CONTAINING(name)DISTRIBUTE BY HASH(classid)。该语句的含义为:在分布键为班级号的基表2上创建索引键和分布键为班级号、分布方式为哈希分布、附加键为学生姓名的全局二级索引class_gsi。
S402:第一节点根据所述第一指示,向用于存储所述基表的第二节点发送第一请求;其中,所述第一请求用于请求获取第一目标信息,所述第一目标信息包括所述基表中的所述至少一个属性。
在本申请一些实施例中,第一节点接收到第一指示后,可以根据第一指示确定需要创建全局二级索引的基表,并获取已存储的该基表的元数据,再进一步根据第一指示所指示的需要创建的全局二级索引的信息以及该基表的元数据,生成所需创建的全局二级索引的元数据,最后可以根据全局二级索引的元数据和基表的元数据生成所述第一请求。
在本申请一些实施例中,所述第一目标信息可以用于作为所述全局二级索引中包含的信息。在本申请一些实施例中,所述第一目标信息至少包含基表中的至少一个属性和位置信息;其中,所述位置信息用于指示所述全局二级索引中数据在所述基表中对应的数据在所述基表中的位置。在本申请一些实施例中,所述第一目标信息还可以包含版本信息,所述版本信息用于指示所述全局二级索引中数据在所述基表中对应的数据的版本,每个数据的版本用于确定相应数据是否有效。其中,全局二级索引中的位置信息和版本信息可以参照上述实施例中的相关介绍,此处不再重述。
示例性的,在基表为上述示例1所述的场景中的基表1或者为上述示例2中所述的场景中的基表2时,第一目标信息可以包括基表中的班级号和学生姓名这两个属性,以及,基表中数据对应的位置信息和版本信息。示例性的,在基表为上述示例1所述的场景中的基表1时,第一请求可以为以下SQL语句:INSERT INTO class_gsi(classid,name,位置信息,版本信息)SELECT classid,name,位置信息,版本信息FROM table1。其中,INSERT INTO指插入,SELECT指选择。该语句的含义为:从基表1中选择班级号、学生姓名、位置信息和版本信息插入到全局二级索引class_gsi中。同理,在基表为上述示例2所述的场景中的基表2时,第一请求可以为以下SQL语句:INSERT INTO class_gsi(classid,name,位置信息,版本信息)SELECT classid,name,位置信息,版本信息FROM table2。该语句的含义为:从基表2中选择班级号、学生姓名、位置信息和版本信息插入到全局二级索引class_gsi中。
在本申请一些实施例中,所述第一目标信息中的至少一个属性中的至少一个第一属性用于作为所述全局二级索引的索引建,所述至少一个属性中除所述至少一个第一属性以外的属性以及所述第一目标信息中除所述至少一个属性以外的信息用于作为所述全局二级索引的附加键。其中,所述至少一个第一属性可以是用户指示的属性。例如,在上述示例中,所述至少一个第一属性包括基表中的班级号这一属性,所述至少一个属性中除所述至少一个第一属性以外的属性即为学生姓名这一属性。
在一种可能的情况中,每个数据对应的位置信息可以包括第一位置信息和第二位置信息;其中,所述第一位置信息用于指示数据所在的节点,所述第二位置信息用于指示数据在其所在的节点中的存储位置,具体可参照上述实施例中的相关介绍,此处不再重述。
在另一种可能的情况中,所述位置信息可以包括用于确定第一位置信息的目标分布键,以及第二位置信息;其中,所述目标分布键为基表的分布键,所述第一位置信息用于指示数据所在的节点;所述第二位置信息用于指示数据在其所在的节点中的存储位置。具体可参照上述实施例中的相关介绍,此处不再重述。
S403:第一节点接收来自所述第二节点的所述第一目标信息,并根据所述第一目标信息创建所述全局二级索引。
在本申请一些实施例中,作为一种可选的实施方式,第一节点在接收到来自第二节点的第一目标信息后,若确定所述第一目标信息中数据对应的位置信息包括第一位置信息和第二位置信息,则第一节点可以直接将所述第一目标信息作为所述全局二级索引包含的信息,并将第一目标信息分布式存储到至少一个数据节点中。具体的,第一节点可以根据全局二级索引采用的分布方式对应的分布算法,对第一目标信息中用于作为全局二级索引的分布键的数据进行计算,并根据计算结果确定用于存储对应数据的节点,然后将对应数据发送至对应节点进行存储。
在本申请一些实施例中,作为一种可选的实施方式,第一节点在接收到来自第二节点的第一目标信息后,若确定所述第一目标信息中数据对应的位置信息包括目标分布键和第二位置信息,第一节点可以先根据各数据对应的目标分布键确定各数据对应的第一位置信息,再将确定的各数据对应的第一位置信息和所述第一目标信息中除各数据对应的目标分布键以外的信息作为所述全局二级索引包含的信息,并将该信息分布式存储到至少一个数据节点中。或者,第一节点可以直接将目标信息发送至对应的数据节点,数据节点接收到目标信息后,可以根据目标信息中各数据对应的目标分布键确定各数据对应的第一位置信息,并将确定的第一位置信息和所述第一目标信息中除各数据对应的目标分布键以外的信息作为所述全局二级索引包含的信息进行存储。
示例性的,针对第一目标信息中包含的至少一个属性,该至少一个属性中包括第一数据,针对该第一数据,第一节点可以在确定该第一数据对应的位置信息包括第二位置信息和目标分布键时,根据目标分布键确定对应的第一位置信息。再将所述第一数据、所述第一位置信息和所述第二位置信息作为所述全局二级索引中所述第一数据对应的元组,并将所述第一数据对应的元组存储到第二数据节点。其中,第二数据节点包含在上述的至少一个数据节点中。针对所述至少一个属性中的其它数据的处理方式与针对第一数据的处理方式类似。在对所述至少一个属性的数据全部进行上述处理过程后,即可完成全局二级索引的创建。
示例性的,在基表为上述示例1所述的场景中的基表1、创建的全局二级索引为上述的class_gsi时,第一目标信息可以包括:13:{‘C’}{位置信息}{版本信息},12:{‘B’}{位置信息}{版本信息},11:{‘A’}{位置信息}{版本信息},其中,每组数据中的位置信息和版本信息为该组数据在基表中对应的数据(元组)的位置信息和版本信息。例如,13:{‘C’}{位置信息}{版本信息}中的位置信息和版本信息为基表1中的第3行数据(3:{‘C’,13})的位置信息和版本信息,12:{‘B’}{位置信息}{版本信息}中的位置信息和版本信息为基表1中的第2行数据(2:{‘B’,12})的位置信息和版本信息。第一节点将第一目信息作为class_gsi中包含的信息并将该信息分布式存储在多个数据节点后,class_gsi在分布式数据库中的分布情况如图6中所示,其中,协调节点和每个数据节点中均存储有class_gsi的元数据,class_gsi中包含的数据可以按分片分别存储在多个数据节点中。例如,class_gsi中的数据可以分为3个分片,每个分片中的数据存储在一个数据节点中。其中,分片1中包括的class_gsi中的数据为13:{‘C’}{位置信息}{版本信息};分片2中包括的class_gsi中的数据为12:{‘B’}{位置信息}{版本信息};分片3中包括class_gsi中的数据为11:{‘A’}{位置信息}{版本信息}。
在本申请一些实施例中,第一节点在创建基表的全局二级索引后,还可以对基表的全局二级索引进行重建。具体的,第一节点在接收到用于指示重建全局二级索引的第二指示后,可以根据所述第二指示,指示用于存储所述全局二级索引的节点删除已存储的所述全局二级索引,并向所述第二节点发送第二请求;其中,所述第二请求用于请求获取第二目标信息,所述第二目标信息用于生成重建后的所述全局二级索引,所述第二目标信息包括所述基表中属于至少一个目标属性的数据,所述至少一个目标属性为重建的所述全局二级索引包含的至少一个属性。第一节点在接收来自所述第二节点的所述第二目标信息后,可以根据所述第二目标信息重建所述全局二级索引。
在本申请一些实施例中,第二指示可以是用户下发的重建全局二级索引的指示,或者,可以是数据节点在重建基表后发送的重建基表的全局二级索引的指示。
在本申请一些实施例中,上述用于存储全局二级索引的节点删除已存储的所述全局二级索引时进行的具体操作可以是将该全局二级索引标记为不可用或无效。并可以在后续处理过程中对该全局二级索引与其它待删除信息进行统一删除。
在本申请一些实施例中,第一节点在接收到第二指示后,可以根据第二指示更新基表的元数据和全局二级索引的元数据,再根据更新后的基表的元数据和更新后的全局二级索引的元数据生成第二请求。第一节点向第二节点请求第二目标信息并根据第二目标信息重建全局二级索引的实施过程可以参照上述实施例中第一节点向第二节点请求第一目标信息并根据第一目标信息创建全局二级索引的实施过程,此处不再赘述。
示例性的,基于以上实施例,在上述示例1所述的场景中,当用户在使用过程中发现基表1中学生姓名这一属性的类型为可变长字符串varchar(10)类型,该类型支持姓名的最大长度为10,而需要插入基表1中的学生信息中的学生姓名的长度为15,超出了学生姓名这一属性的最大长度,则该学生信息无法插入到基表中。因此需要扩大学生姓名这一属性的最大长度。协调节点可以利用分布式数据库修改(ALTER)指令将基表1中学生姓名这一属性的类型转换为varchar(50),则在已创建上述实施例中所述的基表1的全局二级索引class_gsi的情况下,该全局二级索引class_gsi也需要相应的进行重建。该场景下对应的重建全局二级索引class_gsi的流程可以包括:
1)协调节点接收到重建基表1的指示后,根据该指示,更新基表1的元数据和class_gsi的元数据,并根据该指示重建基表1。
其中,对基表1进行的修改(即重建操作)为:将基表1中学生姓名属性的类型从varchar(10)修改为varchar(50),对应的,协调节点对基表1元数据和class_gsi的元数据进行的更新为:将元数据中学生姓名属性的类型从varchar(10)修改为varchar(50)。协调节点更新基表1的元数据和class_gsi的元数据后,指示数据节点对基表1的元数据和class_gsi的元数据进行相同的更新。数据节点根据协调节点的指示更新基表1的元数据和class_gsi的元数据后可以向协调节点返回更新成功的通知,以使协调节点进行下一步处理。
示例性的,协调节点重建class_gsi可以是重建基表1的事件触发的,即协调节点在重建基表1后自动进行class_gsi的重建。协调节点接收到的重建基表1的指示可以是以下SQL语句:ALTER TABLE table1 ALTER COLUMN name TYPE varchar(50)。其中,ALTERTABLE指修改基表,ALTER COLUMN指修改列,TYPE指类型。该语句的含义为:将基表1中的学生姓名列的数据类型修改为varchar(50)类型。
2)协调节点重建基表1后,删除已创建的全局二级索引class_gsi中的数据。
可选的,协调节点可以将已创建的全局二级索引class_gsi中的数据标记为不可用或无效。
3)协调节点生成改造的SQL语句并执行,其中该SQL语句用于指示从基表1中选择全局二级索引数据并将选择的全局二级索引数据插入到class_gsi中。
示例性的,协调节点生成的改造的SQL语句可以为:INSERT INTO class_gsi(classid,name,位置信息,版本信息)SELECT classid,name,位置信息,版本信息FROMtable1。该语句用于指示从基表1中选择classid,name,位置信息,版本信息,并将这些信息插入到class_gsi中。
4)协调节点指示数据节点从基表1中选择全局二级索引数据,并接收来自数据节点的全局二级索引数据。
在该步骤中,协调节点可以根据基表1的元数据和class_gsi的元数据生成数据获取请求(即上述实施例中所述的第二请求),并将数据获取请求发送至数据节点。数据节点可以根据该请求中携带的更新后的class_gsi的属性信息,扫描基表1中的数据,并将扫描得到的数据返回至协调节点。其中,数据节点扫描得到的数据包括但不限于基表1中包含的用于作为class_gsi的索引键和附加键的属性(即班级号、学生姓名这两个属性)、位置信息等。
5)协调节点将全局二级索引数据存储到数据节点,从而完成全局二级索引class_gsi的重建。
其中,协调节点可以采用哈希分布算法,对全局二级索引数据中用于作为class_gsi分布键的属性即班级号进行计算,并根据计算结果确定用于存储全局二级索引数据的数据节点,然后指示数据节点将全局二级索引数据插入到class_gsi中进行存储。
其中,上述过程中,在删除已创建的全局二级索引class_gsi中的数据后,协调节点和数据节点重建class_gsi的过程与上述实施例中所述的创建class_gsi的过程相同,此处不再赘述。
在上述实施例中,基表的全局二级索引中包含基表中数据对应的位置信息,而不是基表的主键、分布键或分区键,因此,基表的全局二级索引中不需要必须包含基表的主键、分布键或分区键,能够适当减少基表的全局二级索引的数据量,尤其在基表的主键、分布键涉及的属性列较多时,能够明显减少创建全局二级索引后需要维护的数据量,提高使用全局二级索引的效率。基于上述方法,第一节点可以在创建基表后,同步创建基表的全局二级索引,能够保证基表数据与全局二级索引数据的强一致性,进而提高全局二级索引可用性。此外,第一节点基于分布式数据库原本的系统架构即可实现基表的全局二级索引的创建和重建,能够保证分布式数据库的可扩展性。第一节点在创建/重建全局二级索引过程中,与第二节点之间的交互主要涉及全局二级索引中数据的传输,因此处理的数据量相对较小,能够减轻分布式数据库的处理压力,保证分布式数据库的性能。综上,上述方法能够在保证分布式数据库性能和成本的同时,创建可用性高的全局二级索引。
下面以上述实施例中所述的第一节点为协调节点、第二节点为数据节点为例,结合具体实例对上述方法的实施过程进行介绍。
图7为本申请实施例提供的一种分布式数据库中创建全局二级索引的方法的流程图。如图7中所示,该方法的流程可以包括:
S701:协调节点在接收到创建基表的全局二级索引的指示后,生成全局二级索引的元数据。
在该步骤中,协调节点在接收到创建基表的全局二级索引的指示后,首先基于已创建的基表的元数据,结合该指示生成对应的所需创建的全局二级索引的元数据并存储。其中,全局二级索引的元数据包括但不限于全局二级索引的名称、包含的属性、数据类型等信息。协调节点生成全局二级索引的元数据后,可以指示存储基表的各数据节点基于已创建的基表的元数据,结合该指示生成对应的所需创建的全局二级索引的元数据并存储。或者,协调节点可以将自身生成的全局二级索引的元数据下发至存储基表的各数据节点进行存储。基于该步骤,协调节点和存储基表的各数据节点均能存储全局二级索引的元数据。
S702:协调节点生成获取全局二级索引数据并创建全局二级索引的执行计划并执行。
协调节点确定上述步骤中协调节点和数据节点均生成并存储全局二级索引的元数据后,可以执行该步骤。在该步骤中,协调节点可以根据基表和全局二级索引的元数据生成获取全局二级索引数据并创建全局二级索引的执行计划。该执行计划可以为以下SQL语句:INSERT INTO{GSI}xxx SELECT xxx FROM{TABLE},并按照该执行计划开始执行即执行如下步骤S703~S704。其中,SQL语句中涉及的{GSI}为全局二级索引的名称,{table}为基表的名称“xxx”为全局二级索引或基表中的属性的名称。
S703:协调节点从数据节点获取全局二级索引数据。
在该步骤中,协调节点可以根据生成的执行计划向数据节点请求获取所需创建的全局二级索引中包含的数据。数据节点接收到请求后,可以根据该请求在基表中查询得到全局二级索引中包含的数据并将查询到的数据返回给协调节点。其中,数据节点查询的数据包括但不限于全局二级索引的索引键、附加键,基表中数据的位置信息、版本信息等。其中,基表中数据的位置信息可以是基表中数据在数据节点内的数据地址和基表的分布键等。
S704:协调节点将全局二级索引数据存储到数据节点。
上述步骤中所有涉及的数据节点成功获取到全局二级索引数据并返回协调节点后,协调节点可以执行该步骤。在该步骤中,协调节点可以根据获取到的信息确定用于存储全局二级索引数据的数据节点,并将获取到的全局二级索引数据插入到对应的数据节点中的全局二级索引中,从而实现全局二级索引的创建。
下面结合具体场景对上述流程进行示例性说明。
实例1
示例性的,以基表应用在某商城系统中为例,基表的名称可以是基表3(table3),基表中包含的数据可以是如下表5中所示的数据:
表5基表3数据
其中,表5所示的基表3中可以包含3列×6行数据,其中,3列数据分别属于收银台标识(identity document,ID)、楼层号、收银员ID这3个属性,每行数据对应一个收银台/收银员的信息。则当本申请实施例中所述的基表为基表3时,基表中包含的至少一个属性为表5中所示的收银台ID、楼层号、收银员ID这3个属性。
表5所示的基表3的表定义信息(或表属性信息)如下表6中所示:
表6基表3定义信息
根据上述表6可以确定,基表的名称为基表3,基表中包含3个属性,具体为收银台ID、楼层号、收银员ID对应的3列数据。其中,基表3中不存在主键。由于一般收银台总数相对固定,因此可以采用收银台ID这一属性作为基表3的分布键,并采用范围分布的方式存储基表3中数据。收银台ID、楼层号、收银员ID这三个属性中的数据为整数型数据。其中,上述表6所指示的信息可以作为基表3的元数据存储在第一节点中,当然,基表3的元数据包括但不限于上述表6中所指示的信息,也可以包括比表6中更多或更少的信息。
假设需要创建基表3的全局二级索引cashier_gsi,其中,要求cashier_gsi包含基表3中的收银台ID、收银员ID和楼层号这三个属性,且收银员ID这一属性作为cashier_gsi的索引键和分布键,收银台ID、楼层号这一属性作为cashier_gsi的附加键,cashier_gsi采用的分布方式为哈希分布。则协调节点创建cashier_gsi的过程可以包括:
1)协调节点根据接收到的创建cashier_gsi的指示,根据基表3的元数据生成cashier_gsi的元数据,并指示数据节点生成cashier_gsi的元数据。
示例性的,协调节点接收到的创建cashier_gsi的指示可以是以下SQL语句:CREATE GLOBAL INDEX cashier_gsi ON table3(cashierid)CONTAINING(counterid,fno)DISTRIBUTE BY HASH(cashierid)。该语句的含义为:在分布键为收银台ID的基表3上创建索引键和分布键为班级号、分布方式为哈希分布、附加键为学生姓名的全局二级索引cashier_gsi。
2)协调节点生成改造的SQL语句并执行,其中该SQL语句用于指示从基表3中选择全局二级索引数据并将选择的全局二级索引数据插入到cashier_gsi中。
示例性的,协调节点生成的改造的SQL语句可以为:INSERT INTO cashier_gsi(cashiered,counterid,fno,位置信息,版本信息)SELECT cashiered,counterid,fno,位置信息,版本信息FROM table3。该语句用于指示从基表3中选择cashiered,counterid,fno,位置信息,版本信息,并将这些信息插入到cashier_gsi中。
3)协调节点指示数据节点从基表3中选择全局二级索引数据,并接收来自数据节点的全局二级索引数据。
其中,数据节点可以根据全局二级索引cashier_gsi的属性信息,扫描基表3中的数据,并从中选择cashier_gsi所需包含的属性以及基表3中数据的位置信息,并将这些信息发送到协调节点。
可选的,数据节点返回给协调节点的位置信息可以是基表的分布键与基表中数据在节点内的存储位置信息(即上述实施例中所述的第二位置信息)。其中,在该场景中,基表3的分布键收银台ID包含在cashier_gsi的属性中,无需单独返回,则数据节点可以直接向协调节点返回基表3中扫描到的收银员ID、收银台ID、楼层号这三个属性的数据,以及这三个属性的数据在基表3中对应的数据的第二位置信息。
4)协调节点将全局二级索引数据存储到数据节点。
其中,协调节点可以采用哈希分布算法,对全局二级索引数据中用于作为cashier_gsi分布键的属性即收银员ID进行计算,并根据计算结果确定用于存储全局二级索引数据的数据节点,然后指示确定的数据节点创建cashier_gsi,并将全局二级索引数据插入到对应数据节点创建的cashier_gsi中进行存储。
实例2
在上述实例1中,基表3中的收银台ID不唯一,但是收银台ID和收银员ID的组合是唯一的,因此可以在基表3中的收银台ID和收银员ID增加主键约束,即将收银台ID和收银员ID这两个属性作为基表3的主键。基表3的其它属性信息不变,与实例1中相同。在该场景中,创建基表3的全局二级索引的流程与上述实例1中创建基表3的全局二级索引的流程相同,不受主键约束的影响。例如,在该场景中,若需要创建基表3的全局二级索引cashier_gsi,其中,要求cashier_gsi包含基表3中的收银台ID、收银员ID和楼层号这三个属性,且收银员ID这一属性作为cashier_gsi的索引键和分布键,收银台ID、楼层号这一属性作为cashier_gsi的附加键,cashier_gsi采用的分布方式为哈希分布。则协调节点创建cashier_gsi的过程与上述实施例中协调节点创建cashier_gsi的过程一致,此处不再重述。
在上述方法中,无论基表中是否存在主键,协调节点均可以进行全局二级索引的创建。且全局二级索引的创建可以在基表创建后执行,能够保持全局二级索引数据与基表数据的强一致性,提高创建的全局二级索引的可用性。
图8为本申请实施例提供的一种分布式数据库中重建全局二级索引的方法的流程图。如图8中所示,该方法的流程可以包括:
S801:协调节点在接收到重建基表的全局二级索引的指示后,更新全局二级索引的元数据。
在该步骤中,协调节点在接收到重建基表的全局二级索引的指示后,首先根据该指示对已创建的基表元数据进行更新并存储,同时可以对基表进行更新。然后协调节点可以根据更新后的基表元数据对已创建的全局二级索引的元数据进行更新并存储,或者重新生成全局二级索引的元数据并存储。其中,全局二级索引的元数据包括但不限于全局二级索引的名称、包含的属性、数据类型等信息。协调节点更新或重新生成全局二级索引的元数据后,可以指示存储全局二级索引的各数据节点基于更新后的元数据,结合该指示更新对应的全局二级索引的元数据或者重新生成全局二级索引的元数据。或者,协调节点可以将自身更新或重新生成的全局二级索引的元数据下发至存储全局二级索引的各数据节点进行存储。基于该步骤,协调节点和存储基表的各数据节点均能存储更新后的或者重新生成的全局二级索引的元数据。
S802:协调节点控制删除已创建的全局二级索引中的数据。
在该步骤中,协调节点可以指示存储全局二级索引的数据节点分别删除所存储的该全局二级索引中的数据。
S803:协调节点生成获取全局二级索引数据并创建全局二级索引的执行计划并执行。
协调节点确定上述步骤中协调节点和数据节点均成功更新或重新生成全局二级索引的元数据后,可以执行该步骤。在该步骤中,协调节点可以根据基表和全局二级索引的元数据生成获取全局二级索引数据并创建全局二级索引的执行计划。该执行计划可以为以下SQL语句:INSERT INTO{GSI}xxx SELECT xxx FROM{TABLE},并按照该执行计划开始执行即执行如下步骤S804~S805。其中,SQL语句中涉及的{GSI}为全局二级索引的名称,{table}为基表的名称“xxx”为全局二级索引或基表中的属性的名称。
S804:协调节点从数据节点获取全局二级索引数据。
在该步骤中,协调节点可以根据生成的执行计划向数据节点请求获取所需重建的全局二级索引中包含的数据。数据节点接收到请求后,可以根据该请求在基表中查询得到全局二级索引中包含的数据并将查询到的数据返回给协调节点。其中,数据节点查询的数据包括但不限于全局二级索引的索引键、附加键,基表中数据的位置信息、版本信息等。其中,基表中数据的位置信息可以是基表中数据在数据节点内的数据地址和基表的分布键等。
S805:协调节点将全局二级索引数据存储到数据节点。
上述步骤中所有涉及的数据节点成功获取到全局二级索引数据并返回协调节点后,协调节点可以执行该步骤。在该步骤中,协调节点可以根据获取到的信息确定用于存储全局二级索引数据的数据节点,并将获取到的全局二级索引数据插入到对应的数据节点中的全局二级索引中,从而实现全局二级索引的创建。
下面结合具体场景对上述流程进行示例性说明。
实例3
基于以上实例1所述的场景,当商城系统中修改楼层号命名规则,将1层修改为G(ground)层时,由于基表3中的楼层号属性的类型为integer,无法直接承载G层,因此需要对基表3中楼层号属性的数据类型进行修改,具体可以将楼层号属性的类型由integer修改为char(2),以使楼层号的属性能够承载G层,从而适用修改后的楼层号命名规则。该场景中,由于修改属性的数据类型涉及全基表(即基表3)重建,因此基表的全局二级索引(即cashier_gsi)也需要相应的重建。该场景下对应的重建全局二级索引class_gsi的流程可以包括:
1)协调节点接收到重建基表3的指示后,根据该指示,更新基表3的元数据和cashier_gsi的元数据,并根据该指示重建基表3。
其中,对基表3进行的更新(即重建操作)为:将基表3中楼层号属性的类型从integer修改为char(2),对应的,协调节点对基表3元数据和cashier_gsi的元数据进行的更新为:将元数据中楼层号属性的类型从integer修改为char(2)。协调节点更新基表3的元数据和cashier_gsi的元数据后,可以指示数据节点对基表3的元数据和cashier_gsi的元数据进行相同的更新。数据节点根据协调节点的指示更新基表3的元数据和cashier_gsi的元数据后可以向协调节点返回更新成功的通知,以使协调节点进行下一步处理。
示例性的,协调节点接收到的重建基表3的指示可以是以下SQL语句:ALTER TABLEtable3 ALTER COLUMN fno TYPE char(2)。其中,ALTER TABLE指修改基表,ALTER COLUMN指修改列,TYPE指类型。该语句的含义为:将基表3中的楼层号属性的数据类型修改为char(2)类型。
2)协调节点在重建基表3后,删除已创建的全局二级索引cashier_gsi中的数据。
可选的,协调节点可以将已创建的全局二级索引cashier_gsi中的数据标记为不可用或无效。
3)协调节点生成改造的SQL语句并执行,其中该SQL语句用于指示从基表3中选择全局二级索引数据并将选择的全局二级索引数据插入到cashier_gsi中。
示例性的,协调节点生成的改造的SQL语句可以为:INSERT INTO cashier_gsi(cashierid,counterid,fno,位置信息,版本信息)SELECT cashierid,counterid,fno,位置信息,版本信息FROM table3。该语句用于指示从基表3中选择cashierid,counterid,fno,位置信息,版本信息,并将这些信息插入到cashier_gsi中。
4)协调节点指示数据节点从基表3中选择全局二级索引数据,并接收来自数据节点的全局二级索引数据。
在该步骤中,协调节点可以根据基表3的元数据和cashier_gsi的元数据生成数据获取请求(即上述实施例中所述的第二请求),并将数据获取请求发送至数据节点。数据节点可以根据该请求中携带的更新后的cashier_gsi的属性信息,扫描基表3中的数据,并将扫描得到的数据返回至协调节点。其中,数据节点扫描得到的数据包括但不限于基表3中包含的用于作为cashier_gsi的索引键和附加键的属性(即收银台ID、收银员ID、楼层号这三个属性)、位置信息等。
5)协调节点将全局二级索引数据存储到数据节点,从而完成全局二级索引cashier_gsi的重建。
其中,协调节点可以采用哈希分布算法,对全局二级索引数据中用于作为cashier_gsi分布键的属性即收银员ID进行计算,并根据计算结果确定用于存储全局二级索引数据的数据节点,然后指示数据节点将全局二级索引数据插入到cashier_gsi中进行存储。
上述完成cashier_gsi的重建后,用户可按需对基表3中数据进行更新,例如将基表3中楼层1的楼层号1更新为G层等。
其中,上述过程中,在删除已创建的全局二级索引cashier_gsi中的数据后,协调节点和数据节点重建cashier_gsi的过程与上述实施例中所述的创建cashier_gsi的过程相同,此处不再赘述。
在上述实例2所述的场景中,若需对基表3的全局二级索引cashier_gsi进行上述实例3中所述的重建,则可以采用与上述实例3中相同的实施方式实现,此处不再赘述。
需要说明的是,上述各实施例提供的具体实施流程,仅是对本申请实施例适用方法流程的举例说明,且具体执行可参照上述实施例中的介绍。此外,各实施流程中各步骤的执行顺序可根据实际需求进行相应调整,还可以增加其它步骤,或减少部分步骤等,本申请实施例中不做具体限制。
参照图9,本申请实施例提供的一种分布式数据库中创建全局二级索引的方法可以包括:
S901:第二节点接收来自第一节点的第一请求;其中,所述第一请求用于请求获取第一目标信息,所述第一目标信息用于生成基表中至少一个属性的全局二级索引,所述第一目标信息包括所述基表中的所述至少一个属性;所述第二节点用于存储所述基表。
S902:根据所述第一请求,获取所述第一目标信息,并将所述第一目标信息发送至所述第一节点,以使所述第一节点根据所述第一目标信息创建所述全局二级索引。
其中,所述第二节点可以为上述实施例中所述的第二节点,所述第一节点可以为上述实施例中所述的第一节点。该方法中各步骤的具体执行可参照上述实施例中所述的方法,此处不再赘述。
基于以上实施例及相同构思,本申请实施例还提供一种数据处理装置,用于实现本申请实施例提供的节点的功能。图10所示为本申请提供的一种数据处理装置1000,该数据处理装置1000可以是节点设备,也可以是节点设备中的芯片或芯片系统。
具体的,所述数据处理装置1000包括收发单元1001和处理单元1002。其中,所述收发单元1001用于接收外部数据处理装置发送的数据和用于向外部数据处理装置发送数据。
所述数据处理装置1000实现为上述实施例中的第一节点时,所述收发单元1001与所述处理单元1002配合,可用于执行本申请实施例提供的由第一节点所执行的方法。
所述数据处理装置1000实现为上述实施例中的第二节点时,所述收发单元1001与所述处理单元1002配合,可用于执行本申请实施例提供的由第二节点所执行的方法。
本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,另外,在本申请各个实施例中的各功能模块可以集成在一个处理器中,也可以是单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
基于以上实施例及相同构思,本申请实施例还提供一种数据处理装置,用于实现本申请实施例提供的节点的功能。图11所示为本申请实施例提供的一种数据处理装置1100,该数据处理装置1100可以是节点设备,也可以是节点设备中的芯片或芯片系统。
在本申请一些实施例中,所述数据处理装置1100还可以是能够执行本申请实施例提供的方法的网络设备、电子设备,或者芯片、集成电路等结构。
示例性的,所述数据处理装置1100包括收发器1101和至少一个处理器1102。其中,所述处理器1102和所述收发器1101耦合,本申请实施例中的耦合是装置、单元或模块之间的间接耦合或通信连接,可以是电性,机械或其它的形式,用于装置、单元或模块之间的信息交互。
具体的,所述收发器1101可以是电路、总线、通信接口或者其它任意可以用于进行信息交互的模块,可用于接收或发送信息。
可选的,所述数据处理装置1100还可以包括存储器1103,所述存储器1103与所述收发器1101和所述处理器1102耦合,用于存储程序指令。
所述处理器1102用于调用存储器1103中存储的程序指令,使得数据处理装置1100执行本申请实施例提供的方法中由第一节点或第二节点所执行的方法。
所述收发器1101用于接收和发送射频信号,耦合于数据处理装置1100的接收器和发射器。所述收发器1101通过射频信号与通信网络和其它设备通信,如无线局域网(Wireless Local Area Networks,WLAN)、蓝牙通信网络、移动网络等。
具体实现中,所述存储器1103可包括高速随机存取的存储器,并且也可包括非易失性存储器,例如一个或多个磁盘存储设备、闪存设备或其他非易失性固态存储设备。所述存储器1103可以存储操作系统(下述简称系统),例如ANDROID,IOS,WINDOWS,或者LINUX等嵌入式操作系统。所述存储器1103可用于存储本申请实施例的实现程序。所述存储器1103还可以存储网络通信程序,该网络通信程序可用于与一个或多个附加设备,一个或多个用户设备,一个或多个网络设备进行通信。
所述处理器1102可以是一个通用中央处理器(Central Processing Unit,CPU),微处理器,特定应用集成电路(Application-Specific Integrated Circuit,ASIC),或一个或多个用于控制本申请方案程序执行的集成电路。
在一些实施例中,所述数据处理装置1100还可以包括输出设备1104和输入设备1105。输出设备1104和处理器1102通信,可以以多种方式来显示信息。例如,输出设备1104可以是液晶显示器(Liquid Crystal Display,LCD),发光二级管(Light Emitting Diode,LED)显示设备,阴极射线管(Cathode Ray Tube,CRT)显示设备,或投影仪(projector)等。输入设备1105和处理器1102通信,可以以多种方式接收用户的输入。例如,输入设备1105可以是鼠标、键盘、触摸屏设备或传感设备等。为了便于输出设备1104和输入设备1105的用户使用,在一些实施例中,所述存储器1103还可以存储用户接口程序,该用户接口程序可以通过图形化的操作界面将应用程序的内容形象逼真的显示出来,并通过菜单、对话框以及按键等输入控件接收用户对应用程序的控制操作。
在一个示例中,所述数据处理装置1100实现为上述实施例中的第一节点时,所述收发器1101与所述处理器1102配合,可用于执行本申请实施例提供的由第一节点所执行的方法。
在一个示例中,所述数据处理装置1100实现为上述实施例中的第二节点时,所述收发器1101与所述处理器1102配合,可用于执行本申请实施例提供的由第二节点所执行的方法。
基于以上实施例及相同构思,本申请实施例还提供一种数据处理装置,所述装置包括存储器和至少一个处理器;所述存储器用于存储计算机程序;所述处理器用于执行所述存储器中存储的计算机程序,实现上述实施例中提供的方法。
基于以上实施例及相同构思,本申请实施例还提供一种分布式数据库系统,所述系统包括第一节点和第二节点,其中,所述第一节点用于实现上述实施例中所述的由第一节点所执行的方法,所述第二节点用于实现上述实施例中所述的由第二节点所执行的方法。
基于以上实施例及相同构思,本申请实施例还提供一种计算机存储介质,所述计算机存储介质中存储有计算机可读程序,当所述计算机可读程序在计算机上运行时,使得所述计算机执行上述实施例中提供的方法。
基于以上实施例及相同构思,本申请实施例还提供一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算机执行上述实施例中提供的方法。
基于以上实施例及相同构思,本申请实施例还提供一种芯片,所述芯片用于读取存储器中存储的计算机程序,执行上述实施例中提供的方法。
基于以上实施例及相同构思,本申请实施例还提供一种芯片系统,所述芯片系统包括处理器,用于支持计算机装置实现上述实施例中提供的方法。
在一种可能的设计中,所述芯片系统还包括存储器,所述存储器用于存储所述计算机装置必要的程序和数据。
在一种可能的设计中,所述芯片系统由芯片构成,或者包含芯片和其他分立器件。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (30)

1.一种分布式数据库中创建全局二级索引的方法,应用于第一节点,其特征在于,所述方法包括:
接收第一指示,所述第一指示用于指示创建基表中至少一个属性的全局二级索引;
根据所述第一指示,向用于存储所述基表的第二节点发送第一请求;其中,所述第一请求用于请求获取第一目标信息,所述第一目标信息包括所述基表中的所述至少一个属性;
接收来自所述第二节点的所述第一目标信息,并根据所述第一目标信息创建所述全局二级索引。
2.如权利要求1所述的方法,其特征在于,所述第一目标信息还包括位置信息;其中,所述位置信息用于指示所述至少一个属性的数据所属的元组在所述基表中的位置。
3.如权利要求2所述的方法,其特征在于,所述第二节点包括至少一个数据节点,所述至少一个属性的数据包括第一数据;所述第一数据对应的位置信息包括第一位置信息和第二位置信息;或者,所述第一数据对应的位置信息包括所述第二位置信息和用于确定所述第一位置信息的目标分布键,所述目标分布键为所述第一数据所属的元组对应在所述基表的分布键;
其中,所述第一位置信息用于指示所述第一数据所在的第一数据节点,所述第二位置信息用于指示所述第一数据节点中所述第一数据的存储位置。
4.如权利要求3所述的方法,其特征在于,所述根据所述第一目标信息创建所述全局二级索引,包括:
当所述第一数据对应的位置信息包括所述第二位置信息和所述目标分布键时,根据所述目标分布键确定所述第一位置信息;
将所述第一数据、所述第一位置信息和所述第二位置信息作为所述全局二级索引中所述第一数据对应的元组;
将所述第一数据对应的元组存储到第二数据节点。
5.如权利要求1~3任一所述的方法,其特征在于,所述根据所述第一目标信息创建所述全局二级索引,包括:
将所述第一目标信息作为所述全局二级索引包含的信息;
将所述全局二级索引包含的信息分布式存储到至少一个数据节点中。
6.如权利要求1~5任一所述的方法,其特征在于,所述至少一个属性中的至少一个第一属性用于作为所述全局二级索引的索引建,所述至少一个属性中除所述至少一个第一属性以外的属性以及所述第一目标信息中除所述至少一个属性以外的信息用于作为所述全局二级索引的附加键。
7.如权利要求1~6任一所述的方法,其特征在于,所述第一目标信息还包括版本信息,所述版本信息用于指示所述至少一个属性的数据所属的元组的版本,每个元组的版本用于确定相应元组是否有效。
8.如权利要求1~7任一所述的方法,其特征在于,在根据所述第一目标信息创建所述全局二级索引之后,所述方法还包括:
接收第二指示,所述第二指示用于指示重建所述全局二级索引;
根据所述第二指示,指示用于存储所述全局二级索引的节点删除已存储的所述全局二级索引,并向所述第二节点发送第二请求;其中,所述第二请求用于请求获取第二目标信息,所述第二目标信息包括所述基表中属于至少一个目标属性的数据,所述至少一个目标属性为重建的所述全局二级索引包含的至少一个属性;
接收来自所述第二节点的所述第二目标信息,并根据所述第二目标信息重建所述全局二级索引。
9.如权利要求1~8任一所述的方法,其特征在于,所述根据所述第一指示,向用于存储所述基表的所述第二节点发送第一请求,包括:
根据所述第一指示,确定所述基表并获取所述基表的元数据;
根据所述第一指示和所述基表的元数据,生成所述全局二级索引的元数据;
根据所述基表的元数据和所述全局二级索引的元数据,生成所述第一请求;
向所述第二节点发送所述第一请求。
10.一种分布式数据库中创建全局二级索引的方法,应用于第二节点,其特征在于,所述方法包括:
接收来自第一节点的第一请求;其中,所述第一请求用于请求获取第一目标信息,所述第一目标信息用于生成基表中至少一个属性的全局二级索引,所述第一目标信息包括所述基表中的所述至少一个属性;所述第二节点用于存储所述基表;
根据所述第一请求,获取所述第一目标信息,并将所述第一目标信息发送至所述第一节点,以使所述第一节点根据所述第一目标信息创建所述全局二级索引。
11.如权利要求10所述的方法,其特征在于,所述第一目标信息还包括位置信息;其中,所述位置信息用于指示所述至少一个属性的数据所属的元组在所述基表中的位置。
12.如权利要求11所述的方法,其特征在于,所述第二节点包括至少一个数据节点,所述至少一个属性的数据包括第一数据;所述第一数据对应的位置信息包括第一位置信息和第二位置信息;或者,所述第一数据对应的位置信息包括所述第二位置信息和用于确定所述第一位置信息的目标分布键,所述目标分布键为所述第一数据所属的元组对应在所述基表的分布键;
其中,所述第一位置信息用于指示所述第一数据所在的第一数据节点,所述第二位置信息用于指示所述第一数据节点中所述第一数据的存储位置。
13.如权利要求11或12所述的方法,其特征在于,所述至少一个属性中的至少一个第一属性用于作为所述全局二级索引的索引建,所述至少一个属性中除所述至少一个第一属性以外的属性以及所述第一目标信息中除所述至少一个属性以外的信息用于作为所述全局二级索引的附加键。
14.如权利要求10~13任一所述的方法,其特征在于,所述第一目标信息还包括版本信息,所述版本信息用于指示所述至少一个属性的数据所属的元组的版本,每个元组的版本用于确定相应元组是否有效。
15.如权利要求10~14任一所述的方法,其特征在于,在根据所述第一请求,获取所述第一目标信息,并将所述第一目标信息发送至所述第一节点之后,所述方法还包括:
按照所述第一节点的指示删除已存储的所述全局二级索引,并接收来自所述第一节点的第二请求;其中,所述第二请求用于请求获取第二目标信息,所述第二目标信息包括所述基表中属于至少一个目标属性的数据,所述至少一个目标属性为重建的所述全局二级索引包含的至少一个属性;
根据所述第二请求,获取所述第二目标信息,并将所述第二目标信息发送至所述第一节点,以使所述第一节点根据所述第二目标信息重建所述全局二级索引。
16.一种数据处理装置,应用于第一节点,其特征在于,所述装置包括:
收发单元,用于接收第一指示,所述第一指示用于指示创建基表中至少一个属性的全局二级索引;
处理单元,用于根据所述第一指示,通过所述收发单元向用于存储所述基表的第二节点发送第一请求;其中,所述第一请求用于请求获取第一目标信息,所述第一目标信息包括所述基表中的所述至少一个属性;
所述处理单元,还用于通过所述收发单元接收来自所述第二节点的所述第一目标信息,并根据所述第一目标信息创建所述全局二级索引。
17.如权利要求16所述的装置,其特征在于,所述第一目标信息还包括位置信息;其中,所述位置信息用于指示所述至少一个属性的数据所属的元组在所述基表中的位置。
18.如权利要求17所述的装置,其特征在于,所述第二节点包括至少一个数据节点,所述至少一个属性的数据包括第一数据;所述第一数据对应的位置信息包括第一位置信息和第二位置信息;或者,所述第一数据对应的位置信息包括所述第二位置信息和用于确定所述第一位置信息的目标分布键,所述目标分布键为所述第一数据所属的元组对应在所述基表的分布键;
其中,所述第一位置信息用于指示所述第一数据所在的第一数据节点,所述第二位置信息用于指示所述第一数据节点中所述第一数据的存储位置。
19.如权利要求18所述的装置,其特征在于,所述处理单元根据所述第一目标信息创建所述全局二级索引时,具体用于:
当所述第一数据对应的位置信息包括所述第二位置信息和所述目标分布键时,根据所述目标分布键确定所述第一位置信息;
将所述第一数据、所述第一位置信息和所述第二位置信息作为所述全局二级索引中所述第一数据对应的元组;
将所述第一数据对应的元组存储到第二数据节点。
20.如权利要求16~18任一所述的装置,其特征在于,所述处理单元根据所述第一目标信息创建所述全局二级索引时,具体用于:
将所述第一目标信息作为所述全局二级索引包含的信息;
将所述全局二级索引包含的信息分布式存储到至少一个数据节点中。
21.如权利要求16~20任一所述的装置,其特征在于,所述至少一个属性中的至少一个第一属性用于作为所述全局二级索引的索引建,所述至少一个属性中除所述至少一个第一属性以外的属性以及所述第一目标信息中除所述至少一个属性以外的信息用于作为所述全局二级索引的附加键。
22.如权利要求16~21任一所述的装置,其特征在于,所述第一目标信息还包括版本信息,所述版本信息用于指示所述至少一个属性的数据所属的元组的版本,每个元组的版本用于确定相应元组是否有效。
23.如权利要求16~22任一所述的装置,其特征在于,所述处理单元在根据所述第一目标信息创建所述全局二级索引之后,还用于:
通过所述收发单元接收第二指示,所述第二指示用于指示重建所述全局二级索引;
根据所述第二指示,通过所述收发单元指示用于存储所述全局二级索引的节点删除已存储的所述全局二级索引,并向所述第二节点发送第二请求;其中,所述第二请求用于请求获取第二目标信息,所述第二目标信息包括所述基表中属于至少一个目标属性的数据,所述至少一个目标属性为重建的所述全局二级索引包含的至少一个属性;
通过所述收发单元接收来自所述第二节点的所述第二目标信息,并根据所述第二目标信息重建所述全局二级索引。
24.一种数据处理装置,应用于第二节点,其特征在于,所述装置包括:
收发单元,用于接收来自第一节点的第一请求;其中,所述第一请求用于请求获取第一目标信息,所述第一目标信息用于生成基表中至少一个属性的全局二级索引,所述第一目标信息包括所述基表中的所述至少一个属性;所述第二节点用于存储所述基表;
处理单元,用于根据所述第一请求,获取所述第一目标信息,并通过所述收发单元将所述第一目标信息发送至所述第一节点,以使所述第一节点根据所述第一目标信息创建所述全局二级索引。
25.如权利要求24所述的装置,其特征在于,所述第一目标信息还包括位置信息;其中,所述位置信息用于指示所述至少一个属性的数据所属的元组在所述基表中的位置。
26.如权利要求25所述的装置,其特征在于,所述第二节点包括至少一个数据节点,所述至少一个属性的数据包括第一数据;所述第一数据对应的位置信息包括第一位置信息和第二位置信息;或者,所述第一数据对应的位置信息包括所述第二位置信息和用于确定所述第一位置信息的目标分布键,所述目标分布键为所述第一数据所属的元组对应在所述基表的分布键;
其中,所述第一位置信息用于指示所述第一数据所在的第一数据节点,所述第二位置信息用于指示所述第一数据节点中所述第一数据的存储位置。
27.如权利要求25或26所述的装置,其特征在于,所述第一目标信息还包括版本信息,所述版本信息用于指示所述至少一个属性的数据所属的元组的版本,每个元组的版本用于确定相应元组是否有效。
28.如权利要求24~27任一所述的装置,其特征在于,所述处理单元在根据所述第一请求,获取所述第一目标信息,并通过所述收发单元将所述第一目标信息发送至所述第一节点之后,还用于:
按照所述第一节点的指示删除已存储的所述全局二级索引,并通过所述收发单元接收来自所述第一节点的第二请求;其中,所述第二请求用于请求获取第二目标信息,所述第二目标信息包括所述基表中属于至少一个目标属性的数据,所述至少一个目标属性为重建的所述全局二级索引包含的至少一个属性;
根据所述第二请求,获取所述第二目标信息,并通过所述收发单元将所述第二目标信息发送至所述第一节点,以使所述第一节点根据所述第二目标信息重建所述全局二级索引。
29.一种数据处理装置,其特征在于,包括存储器和至少一个处理器;
所述存储器用于存储计算机程序;
所述处理器用于执行所述存储器中存储的计算机程序,实现如权利要求1~9任一所述的方法,或者实现如权利要求10~15任一所述的方法。
30.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机可读程序,当所述计算机可读程序在计算机上运行时,使得所述计算机执行如权利要求1~9任一所述的方法,或执行如权利要求10~15任一所述的方法。
CN202210939851.7A 2022-08-05 2022-08-05 一种分布式数据库中创建全局二级索引的方法及装置 Pending CN117555894A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202210939851.7A CN117555894A (zh) 2022-08-05 2022-08-05 一种分布式数据库中创建全局二级索引的方法及装置
PCT/CN2023/106365 WO2024027459A1 (zh) 2022-08-05 2023-07-07 一种分布式数据库中创建全局二级索引的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210939851.7A CN117555894A (zh) 2022-08-05 2022-08-05 一种分布式数据库中创建全局二级索引的方法及装置

Publications (1)

Publication Number Publication Date
CN117555894A true CN117555894A (zh) 2024-02-13

Family

ID=89815345

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210939851.7A Pending CN117555894A (zh) 2022-08-05 2022-08-05 一种分布式数据库中创建全局二级索引的方法及装置

Country Status (2)

Country Link
CN (1) CN117555894A (zh)
WO (1) WO2024027459A1 (zh)

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109144994B (zh) * 2017-06-19 2022-04-29 华为技术有限公司 索引更新方法、系统及相关装置
GB201807534D0 (en) * 2018-05-09 2018-06-20 Palantir Technologies Inc Systems and methods for indexing and searching
CN111259004B (zh) * 2020-01-08 2023-04-14 腾讯科技(深圳)有限公司 一种存储引擎中数据索引的方法以及相关装置
CN112416925B (zh) * 2020-11-02 2024-04-09 浙商银行股份有限公司 基于有序分布式索引结构的查询方法和分布式数据库系统
CN113868251B (zh) * 2021-09-24 2022-10-18 北京百度网讯科技有限公司 分布式数据库的全局二级索引方法及其装置

Also Published As

Publication number Publication date
WO2024027459A1 (zh) 2024-02-08

Similar Documents

Publication Publication Date Title
KR102307371B1 (ko) 데이터베이스 시스템 내의 데이터 복제 및 데이터 장애 조치
KR102134494B1 (ko) 위치 정보를 가진 데이터 프로파일링
US9251163B2 (en) File sharing system and file sharing method
CN101176090B (zh) 用于识别在冗余数据存储中的异步数据并且将其重新同步的装置和方法
US20090012932A1 (en) Method and System For Data Storage And Management
US20150269215A1 (en) Dependency-aware transaction batching for data replication
Chavan et al. Survey paper on big data
NO20171080A1 (en) Apparatus and methods of data synchronization
US20120254249A1 (en) Database Management System
CN101184106A (zh) 一种移动数据库的关联事务处理方法
CN104657459A (zh) 一种基于文件粒度的海量数据存储方法
US11216516B2 (en) Method and system for scalable search using microservice and cloud based search with records indexes
KR102174957B1 (ko) 관계형 데이터베이스의 DML문장을 NoSQL 데이터베이스로 동기화하기 위한 트랜잭션 제어 방법
JP2022550049A (ja) ストレージエンジンにおけるデータインデックス付け方法、データインデックス付け装置、コンピュータ装置、及びコンピュータプログラム
US11226986B2 (en) Data table partitioning management method and apparatus
CN115114374B (zh) 事务执行方法、装置、计算设备及存储介质
de Souza Baptista et al. NoSQL geographic databases: an overview
CN114556320A (zh) 切换到最终一致的数据库副本
CN117555894A (zh) 一种分布式数据库中创建全局二级索引的方法及装置
CN113641686B (zh) 数据处理方法、装置、电子设备、存储介质及程序产品
US11789971B1 (en) Adding replicas to a multi-leader replica group for a data set
US11726955B2 (en) Methods and apparatus for efficient container location database snapshot operation
JP2009301352A (ja) テスト装置およびテスト方法
CN112000671A (zh) 基于区块链的数据库表处理方法、装置及系统
US10353920B2 (en) Efficient mirror data re-sync

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication