首页> 中国专利> 共同分片和随机化共同分片

共同分片和随机化共同分片

摘要

本技术涉及在分布式存储系统中对表进行共同分片。可以接收包括一个或多个行的数据表。数据表中的每个行可以包括标识符键和数据段。可以将所述数据表中的每个数据段索引到索引表的单独行中,其中所述索引表中的每个行都包括与从中索引了所述相应行中的该数据段的所述数据表的所述标识符键相关联的数据。可以将所述索引表分片成裂片,其中所述分片包括基于从中索引了所述相应行中的该数据段的所述数据表的所述标识符键将所述索引表的每个行分配给所述裂片中的一个裂片。可以将所述裂片存储到所述分布式存储系统的两个或更多个部分中。

著录项

  • 公开/公告号CN112805695A

    专利类型发明专利

  • 公开/公告日2021-05-14

    原文格式PDF

  • 申请/专利权人 谷歌有限责任公司;

    申请/专利号CN202080005621.2

  • 申请日2020-03-18

  • 分类号G06F16/22(20060101);

  • 代理机构11219 中原信达知识产权代理有限责任公司;

  • 代理人李佳;周亚荣

  • 地址 美国加利福尼亚州

  • 入库时间 2023-06-19 10:58:46

说明书

相关申请的交叉引用

本申请要求于2019年3月20日提交的名称为Cosharding and RandomizedCosharding(共同分片和随机化共同分片)的美国临时申请第62/821,156号的权益,其公开内容通过引用并入本文。

背景技术

关系数据库通常与布置在表格中的数据一起操作,以进行有效的存储和检索。随着表的增长,数据通常分布在许多数据库服务器上。但是,将表分开到不同数据库服务器可能会降低关系数据库在检索数据时的效率。在这方面,可能需要分布式操作(即,需要在数据库中心内的不同数据库服务器或组件之间进行通信的操作)来定位和检索被检索的数据。

发明内容

本公开总体上涉及对表进行共同分片(cosharding)。该技术的一个方面针对一种用于在分布式存储系统内对表进行共同分片的方法。该方法可以包括:通过一个或多个处理器接收包括一个或多个行的数据表,其中每个行包括标识符键和数据段;通过一个或多个处理器将数据表中的每个数据段索引到索引表的单独行中,其中索引表中的每个行都包括与从中索引了相应行中的数据段的数据表的标识符键相关联的数据;通过一个或多个处理器将索引表分片成裂片,其中分片包括基于从中索引了相应行中的该数据段的数据表的标识符键将索引表的每个行分配给裂片中的一个裂片;以及通过一个或多个处理器将裂片存储到分布式存储系统的两个或更多个部分中。

在一些示例中,可以与数据表的相应行的数据段被索引到的一个或多个索引表行一起,对来自数据表的一个或多个行进行分片。在一些实例中,可以将来自数据表的一个或多个行存储在与数据表的相应行的数据段被索引到的一个或多个索引表行相同的裂片中。

在一些示例中,数据表中的数据可以在数据表的一个或多个列中。

在一些示例中,其中,标识符键可以包括随机生成数。在一些实例中,标识符键可以包括时间戳。在一些示例中,裂片可以按时间戳排序。

在一些示例中,标识符键可以包括单调递增或递减值。在一些实例中,裂片可以按单调递增或递减值排序。

在一些示例中,可以将整个索引表分片为裂片。

在一些示例中,可以将裂片存储到分布式存储系统的两个或更多个部分中可以包括:将第一裂片存储到分布式存储系统的两个或更多个部分中的第一部分中,并且将第二裂片存储到分布式存储系统的两个或更多个部分中的第二部分中。

在一些示例中,该方法可以包括:接收检索与所索引的数据段相关联的一个或多个键的请求;响应于接收到该请求,在第一裂片中通过分布式数据系统的第一服务器标识与所索引的数据段相关联的一个或多个键,并且在第二裂片中通过分布式数据系统的第二服务器标识与所索引的数据段相关联的一个或多个键;合并从第一裂片和第二裂片中标识出的键;并且通过分布式数据系统输出合并后的键。

在一些示例中,数据表中的每个行在分布式存储系统中存储的关系在线数据库中以事务方式被索引到索引表中。

该技术的另一方面针对一种用于对表进行共同分片的系统。该系统可以包括:分布式存储系统;以及一个或多个处理器,其中,该一个或多个处理器被配置为:接收包括一个或多个行的数据表,其中每个行包括标识符键和数据段;将数据表中的每个数据段索引到索引表的单独行中,其中索引表中的每个行都包括与从中索引了相应行中的数据段的数据表的标识符键相关联的数据;将索引表分片成裂片,其中分片包括基于从中索引了相应行中的该数据段的数据表的标识符键将索引表的每个行分配给裂片中的一个裂片;以及将裂片存储到分布式存储系统的两个或更多个部分中。

在一些示例中,该一个或多个处理器还可以被配置为:与数据表的相应行的数据段被索引到的一个或多个索引表行一起对来自数据表的一个或多个行进行分片。在一些实例中,可以将来自数据表的一个或多个行存储在与数据表的相应行的数据段被索引到的一个或多个索引表行相同的裂片中。

在一些示例中,数据表中的数据可以在数据表的一个或多个列中。

在一些示例中,标识符键可以包括时间戳。在一些实例中,裂片可以按时间戳排序。

在一些示例中,可以将裂片存储到分布式存储系统的两个或更多个部分中包括:将第一裂片存储到分布式存储系统的两个或更多个部分中的第一部分中,并且将第二裂片存储到分布式存储系统的两个或更多个部分中的第二部分中。在一些实例中,响应于接收到检索与所索引的数据段相关联的一个或多个键的请求,在第一裂片中通过分布式数据系统的第一服务器标识与所索引的数据段相关联的一个或多个键,并且在第二裂片中通过分布式数据系统的第二服务器标识与所索引的数据段相关联的一个或多个键;合并从第一裂片和第二裂片中标识出的键;并且通过分布式数据系统输出合并后的键。

在一些示例中,数据表中的每个行在分布式存储系统中存储的关系在线数据库中以事务方式被索引到索引表中。

该技术的另一个方面针对一种用于在分布式存储系统内对表进行共同分片的方法。该方法可以包括:通过一个或多个处理器,接收包括一个或多个行和多个列的数据表,其中,与多个列中的第一列相对应的每个行包括标识符键,并且多个列中的第二列和第三列均包括数据段;通过该一个或多个处理器,将数据表中的第二列中的每个数据段索引到第一索引表的单独行和列中,其中,该索引表中的每个行都包括与从中索引了相应行中的数据段的数据表的标识符键相关联的数据;通过该一个或多个处理器,将数据表中的第三列中的每个数据段索引到第二索引表的单独行和列中,其中,该索引表中的每个行都包括与从中索引了相应行中的数据段的数据表的标识符键相关联的数据;通过该一个或多个处理器,将第一索引表和第二索引分片成裂片,其中分片包括基于从中索引了相应行中的数据段的数据表的标识符键将第一索引表和第二索引表的每个行分配给裂片中的一个裂片;以及通过该一个或多个处理器,将裂片存储到分布式存储系统的两个或更多个部分中。

本文描述的方法可以使用一个或多个计算设备和/或系统来实现。该方法可以存储在诸如非暂时性计算机可读介质之类的计算机可读介质中。

附图说明

图1是根据本公开的各个方面的分布式存储系统内的示例系统的框图。

图2是根据本公开的各个方面的从数据表生成索引表的图示。

图3A是根据本公开的各个方面的基于索引表的键对索引表进行分片的图示。

图3B是示出了根据本公开的各个方面的索引表中的键如何映射回到数据表中的行的图示。

图4A是根据本公开的各个方面的基于数据表的键对索引表进行分片的图示。

图4B是示出根据本公开的各个方面的索引表中的键如何映射回到数据表中的行的图示。

图5是示出根据本公开的各个方面的在分布式数据存储中搜索裂片的示例的图。

图6是示出根据本公开的各个方面的在分布式数据存储中搜索裂片的示例的图。

图7是根据本公开的各个方面的被分配给服务器进行处理的数据的图示。

图8是根据本公开的各个方面的从具有随机化标识符的数据表中生成索引表的图示。

图9是根据本公开的各个方面的对从具有随机化标识符的数据表生成的索引表进行共同分片的图示。

图10是根据本公开的各个方面的流程图。

具体实施方式

概述

该技术通常涉及对索引表进行分片(即,拆分)使得条目基于另一个表的键以裂片形式被存储,并且以事务方式将这些共同分片的索引维持在关系在线数据库中。在关系在线数据库中以事务方式维持索引可以包括:对于添加到存储系统的每个新数据行,都使用添加文档的操作以原子方式(以事务方式)对该行进行索引,以使行和索引都可以在事务完成时对查询变得可见。随着数据量的增加,分布式存储系统可以将来自数据表的数据存储到索引表中,该索引表将来自数据表中的行的数据索引到索引表中的各个键。索引表中的每个行都可以包括键和将该键映射回到数据表中从中对其进行索引的行的数据。可以基于索引表中的行的键将索引表按行分片为多个裂片。分片可以存储在分布式存储系统的不同部分(例如,服务器、存储设备等)中。但是,通过索引表中各行的键对索引表进行分片可能会导致与单个数据表行相对应的键分散在分布式存储系统的多个部分中。这样,当搜索索引表时,可能需要分布式操作(即,需要在分布式存储系统的不同部分之间进行通信的操作),诸如将来自分布式存储系统的每个部分的搜索结果进行连接,来确定要搜索的数据是否位于数据表的单个行内。

为了减少确定要搜索的数据是否位于数据表的行内所需的分布式操作的数量,可以通过数据表或另一索引表的键来对索引进行分片。这样,可以将索引表中的行分片为裂片,以便在单个裂片中找到与一个数据表行相对应的所有索引表键。因此,可以在本地(即,在分布式存储系统的一部分上)确定给定数据表行是否与查询匹配。尽管本文的示例描述了将数据表索引到单个索引表中,但是可以将数据表索引到一个以上的索引表中,并且可以通过数据表或其他索引表的键对这些索引表进行分片。

示例系统

图1图示了包括分布式存储系统的示例系统100。多个数据中心160、170、180可以例如通过网络150通信地耦合。数据中心160、170、180可以进一步通过网络150与一个或多个客户端设备(例如客户端计算设备110)通信。因此,例如,客户端计算设备110可以在“云”中执行操作。在一些示例中,数据中心160、170、180可以进一步与服务器/控制器190通信。

每个客户端计算设备110可以是个人计算机,供具有通常在个人计算机中找到的所有内部组件的人使用,诸如中央处理器(CPU)、CD-ROM、硬盘驱动器和显示设备(例如具有屏幕的监视器、投影仪、触摸屏、小型LCD屏幕、电视机或另一设备(诸如可操作以显示处理器120处理的信息的电气设备))、扬声器、调制解调器和/或网络接口设备、用户输入(诸如鼠标、键盘、触摸屏或麦克风)、以及用于将这些元件相互连接的所有组件。此外,根据本文所述的系统和方法的计算机可以包括能够处理指令并在人与其他计算机(包括通用计算机、PDA、平板电脑、移动电话、智能手表、缺乏本地存储功能的网络计算机、电视机的机顶盒和其他联网设备)之间发送数据的设备。

客户端计算设备110可以包含处理器120、存储器130和通常存在于通用计算机中的其他组件。存储器130可以存储处理器120可访问的信息,包括可以由处理器120执行的指令132。存储器130还可以包括可以由处理器120检索、操纵或存储的数据134。存储器130是一类能够存储处理器120可访问的信息的非暂时性计算机可读介质,诸如硬盘驱动器、固态驱动器、磁带驱动器、光学存储、内存卡、ROM、RAM、DVD、CD-ROM、可写只读存储器。处理器120可以是公知的处理器或其他鲜为人知的类型的处理器。可替代地,处理器120可以是专用控制器,诸如ASIC。

指令132可以是由处理器120直接执行的指令集,诸如机器代码,或间接执行的指令,诸如脚本。就这一点而言,术语“指令”、“步骤”和“程序”可以在本文中可互换地使用。指令132可以以目标代码格式存储以由处理器120直接处理,或者以其他类型的计算机语言存储,包括脚本或独立源代码模块的集合,这些脚本或集合被按需解释或预先编译。

数据134可以由处理器120根据指令132检索、存储或修改。例如,尽管系统和方法不受特定数据结构的限制,但是数据134可以存储在计算机寄存器中、作为具有多个不同字段和记录的结构存储在分布式存储系统中、存储在文档中或存储在缓冲区中。数据134还可以被格式化为计算机可读格式,诸如但不限于二进制值、ASCII或Unicode。此外,数据134可以包括足以标识相关信息的信息,诸如数字、描述性文本、专有代码、指针、对存储在其他存储器(包括其他网络位置)中的数据的引用、或者用于计算相关数据的函数所用的信息。

尽管图1在功能上将处理器120和存储器130示为在同一块内,但是处理器120和存储器130实际上可以包括可以或可以不存储在同一物理壳体内的多个处理器和存储器。例如,一些指令132和数据134可以存储在可移动CD-ROM上,而其他的则可以存储在只读计算机芯片中。一些或全部指令和数据可被存储在物理上远离处理器120但仍可被处理器120访问的位置。类似地,处理器120实际上可包括处理器的集合,这些处理器可以并行操作或不并行操作。

数据中心160、170、180可以被定位成彼此相距相当大的距离。例如,数据中心可能位于世界各地的各个国家。每个数据中心160、170、180可以包括一个或多个计算设备,诸如处理器、服务器、分片等。例如,如图1所示,数据中心160包括计算设备162、164,数据中心170包括计算设备172,并且数据中心180包括计算设备181-186。根据一些示例,计算设备可以包括在主机上运行的一个或多个虚拟机。例如,计算设备162可以是主机,其支持运行操作系统和应用的多个虚拟机166、167。尽管在图1中仅图示了几个虚拟机166、167,但是应当理解,任何数量的虚拟机可以由任何数量的主计算设备支持。此外,应当理解,图1所示的配置仅是示例,并且示例数据中心160、170、180中的每个示例中的计算设备可以具有可以彼此相同或不同的各种结构和组件。

程序可以跨这些计算设备执行,例如,使得一些操作由第一数据中心的一个或多个计算设备执行,而其他操作由第二数据中心的一个或多个计算设备执行。在一些示例中,各种数据中心中的计算设备可以具有不同的容量。例如,不同的计算设备可以具有不同的处理速度、工作量等。虽然仅示出了这些计算设备中的少数几个,但是应当理解,每个数据中心160、170、180可以包括任何数量的计算设备,并且第一数据中心中的计算设备的数量可以不同于第二数据中心中的计算设备的数量。而且,应当理解,每个数据中心160、170、180中的计算设备的数量可以随时间变化,例如,随着硬件的移除、替换、升级或扩展。

此外,可以在分布式存储系统上构建各种后端系统。例如,身份管理系统、域名服务器(DNS)设置管理系统等。此类后端系统可能在某种程度上相互关联。例如,DNS设置管理系统的用户可以使用由身份管理系统管理的标识来登录。

在一些示例中,每个数据中心161、170、180还可以包括多个存储设备(未示出),诸如硬盘驱动器、随机存取存储器、磁盘、磁盘阵列、磁带驱动器或任何其他类型的存储设备。数据中心160、170、180可以实现多种架构和技术中的任何一种,包括但不限于直接附加存储(DAS)、网络附加存储(NAS)、存储区域网络(SAN)、光纤通道(FC)、以太网光纤通道(FCoE)、混合架构网络等。除了存储设备之外,数据中心还可以包括许多其他设备,诸如电缆、路由器等。此外,在一些示例中,数据中心160、170、180可以是虚拟化环境。此外,尽管仅示出了几个数据中心1160、170、180,但是可以通过网络150和/或附加网络耦合若干数据中心。

在一些示例中,控制器190可以与数据中心160、170、180中的计算设备通信,并且可以促进程序的执行。例如,控制器190可以追踪每个计算设备的容量、状态、工作量或其他信息,并使用这样的信息来分配任务。类似于上述客户端计算设备110,控制器190可以包括处理器120和存储器191,包括数据194和指令192。控制器190可以被配置为在不关闭对用户的服务的情况下向分布式存储系统的各个组件填充影响授权参数的改变。例如,控制器190可以具有组织结构的知识,并且进行映射以在整个组织结构中填充影响授权参数的改变。

客户端计算设备110、数据中心160、170、180和控制器190能够诸如通过网络150进行直接和间接通信。例如,使用因特网套接字,客户端计算设备110可以通过因特网协议套件连接到在远程服务器上操作的服务。服务器可以设置侦听套接字,该侦听套接字可以接受用于发送和接收信息的初始连接。网络150和中间节点可以包括各种配置和协议,包括因特网、万维网、内联网、虚拟专用网、广域网、局域网,使用对一个或多个公司专有的通信协议的专用网、以太网、WiFi(例如702.71、702.71b、g、n或其他此类标准)和HTTP、以及上述各项的各种组合。能够与其他计算机发送数据的设备,诸如调制解调器(例如,拨号、电缆或光纤)和无线接口,可以促进这种通信。

客户端计算设备110可以请求使用云中的后端系统之一来访问程序。此类请求可以由控制器190和/或数据中心160、170、180中的一个或多个计算设备来处理。当进行影响授权的改变时,诸如改变对特定角色的访问权限,可以通过使用推论、推理和传输来使这样的改变渗透分布式存储系统,而无需关闭后端系统或中断对客户端计算设备110的服务。

示例方法

输入到分布式存储系统中的数据可以是数据表的形式。在这方面,数据表可以包括针对每个行的一个或多个标识符键(ID)以及与每个标识符键相对应的数据。图2中示出了示例性数据表201。数据表201包括三个标识符键‘1’、‘2’和‘3’。ID‘1’的行210内的数据包括数据‘a b c’,ID‘2’的行212内的数据包括数据‘b c’,ID‘3’的行214内的数据包括数据‘b’。数据‘a’、‘b’和‘c’可以表示不同的数据段,诸如文本条目中的各个单词、整个文本条目、文件的一部分、整个文件等。尽管与每个标识符键相对应的数据被示出为在数据表201中的单个列内,但是与标识符键相关联的数据可以在行中的多个列内。此外,对于具有一个以上标识符键的行条目,标识符键可以分布在该行中的多个列上。例如,ID‘1’的行内的数据可以包括在三个列中,其中数据‘a’在第一列中,数据‘b’在第二列中,并且数据‘c’在第三列中。一行中可以存在任意数量的列。

数据表201中的每个数据段可以被索引到索引表的单独行中。在这方面,服务器或控制器(诸如控制器190)可以将每个数据段索引到索引表的行内的对应键中。例如,图2进一步图示了数据表201的行210中与ID‘1’相关联的数据(即,‘a’、‘b’和‘c’)被索引到索引表203中分别与键‘a’、‘b’和‘c’相对应的行213、215和221。数据表201的行212中与ID‘2’相关联的数据(即,‘b’和‘c’)以及数据表201的行214中与ID‘3’相关联的数据(即,‘b’)被索引到索引表203中分别与键‘b’、‘c’和‘b’相对应的行217、223、219中。对于具有多个标识符键的数据表,可以使用这些标识符键中的一个或多个来索引对应的数据。

索引表203中的每个键可以对应于指示被索引到该索引表的键中的数据所在的数据表的标识符键的数据。例如,索引表203中与键‘a’(行213)、‘b’(行215)和‘c’(行221)相对应的行包括数据‘1’,该数据指示与被索引到键‘a’、‘b’和‘c’的数据所在的数据表201中的行210对应的标识符键。类似地,键‘b’(行217)和‘c’(行223)的行包括数据‘2’,该数据‘2’指示与数据表201中的行212相对应的标识符键。键‘b’的行(行219)包括“3”,其指示与数据表201中的行214相对应的标识符键。在从另一索引表(第二索引表)创建索引表(第一索引表)的实例中,第一索引表可以包括数据,该数据指示被索引到第一索引表的键的数据所对应的第二索引表的键。尽管示出了来自数据表201的数据被索引到索引表203的键列中,但是来自数据表201的一些或全部数据可以被放置在索引表的数据列中。类似地,尽管数据表201的ID被示为被索引到索引表203的数据列中,但是一些或全部ID可以被放置在索引表203的键列中。

索引表可以通过键范围被分片为裂片。对索引表进行分片可以包括:将索引表拆分为多个裂片并将这些裂片存储在分布式存储系统的不同部分中。在典型的分布式存储系统中,索引表可能会根据索引表的键按行进行分片。图3A示出了根据索引表203的键将索引表203按行分片成裂片1和裂片2的示例。在这方面,裂片1包括索引表的具有‘a’键的行213,并且裂片2包括索引表的具有‘b’和‘c’键的行215-223。

通过索引表的键对索引表进行分片可能导致与单个数据表行相对应的键分散在分布式存储系统的多个部分中。例如,如图3B所示,索引表203的裂片1包括具有键‘a’的行213,其索引由标识符键‘1’标识的数据表行(行210)中的数据的数据‘a’。裂片2包括分别具有键‘b’和‘c’的行215和221,其索引数据‘b’和‘c’,即由标识符键‘1’标识的数据表行(行210)中的其余数据。每个数据裂片可以存储在分布式存储系统的不同部分中。例如,裂片1可以存储在分布式存储系统的第一部分中,而裂片2可以存储在分布式存储系统的第二部分中。

与通过索引表的键进行分片相反,索引表的分片可以基于数据表和/或另一索引表的标识符键。基于数据表和/或另一索引表的标识符键来对索引表进行分片可称为共同分片。通过对与数据表的标识符键相对应的索引表的行进行共同分片,可以将与数据表中的同一行相对应的数据表中的所有索引条目安排在同一裂片内。例如,如图4A所示,索引表可以基于数据表201的标识符键而被分片成两个裂片:裂片1和裂片2。在这方面,索引表中具有数据‘1’的键的行(包括行213、215和221,其指示与数据表(未示出)的行210相对应的标识符键)被分片成裂片1。索引表中具有数据‘2’的键的行(包括行217和223,其指示与数据表的行212相对应的标识符键)以及具有数据‘3’的键的行(包括行219,其指示与数据表的行214相对应的标识符键)被分片成裂片2。

如图4B所示,索引表203的裂片1包括具有键‘a’213、‘b’215和‘c’221的行,这些键对由标识符键‘1’标识的数据表行210中的所有数据进行索引。索引表203的裂片2包括具有键‘b’217、‘c’223和‘b’219的行,这些键对由标识符键‘2’和‘3’标识的数据表行(212和214)中的所有数据进行索引。每个数据裂片可以存储在分布式存储系统的不同部分中。

在一些实例下,数据表(或另一索引表)可以与索引表一起分片。在这方面,可以将来自数据表的行与对应于它们的一个或多个索引表行一起进行分片。换句话说,来自数据表的一个或多个索引的数据可以与数据表本身一起进行分片。例如,可以将由ID‘1’标识的数据表201的行210分片成裂片1,并且可以将由ID‘2’和‘3’分别标识的数据表201的行212和214分片成裂片2,如图4B进一步所示。将数据表与其对应的索引表(即索引该数据表的数据的索引表)一起分片是可选的;对应的索引表可以一起进行分片。

通过该索引表的键将索引表分片成多个裂片可以允许一个以上的服务器(诸如数据中心160、170和/或180的服务器)或其他计算设备同时检索、搜索和/或访问索引表。这可以减少原本会落在单个服务器上的负载,并减少处理时间量。

对于大索引,可以将索引表分片成裂片,使得可能需要多个分布式操作来从这些裂片检索非重复的结果集。例如,如图5所示,通过索引表的键将索引表203分片成两个裂片:裂片1和裂片2。可以针对与数据的索引条目对应的键来搜索这些裂片。例如,搜索可以包括针对文本“a b c”的搜索。服务器(诸如服务器60)可以从与裂片2中的键相关联的数据确定用ID‘1’和‘2’标识的数据表201(未示出)的行包括数据“b c”并且ID‘3’包括数据“b”,如框512所示。另一服务器(诸如服务器170)可以从与裂片1中的键相关联的数据确定用ID‘1’标识的表201的行包括“b”。然而,由于服务器160不知道裂片1的内容并且服务器170不知道裂片2的内容,所以可能会执行附加分布式操作,如框514所示,诸如‘连接’操作。分布式操作可以将服务器160和170输出的结果相结合,如框516所示。基于结合的结果,一个或多个服务器或另一计算设备可以确定与ID‘1’相关联的数据满足搜索请求,如框518所示。

基于另一数据表和/或索引表的键对索引表进行分片可以减少检索、搜索和/或访问索引表所需的分布式操作的数量和费用。例如,如图6所示,基于数据表201(未示出)的键来对索引表203进行分片。可以对与包含文本“a b c”的数据的索引条目相对应的键提出搜索请求。服务器(诸如服务器160)可以确定与ID‘1’标识的数据表201的行中的数据相关联的裂片1中的键满足搜索标准,如框610所示。另一服务器(诸如服务器170和/或180)可以确定与由ID‘2’和‘3’标识的数据表201的行中的数据相关联的裂片2中的键不满足搜索标准。由于在裂片2中搜索与包含文本“a b c”的数据的索引条目对应的键的服务器知道与ID‘2’和‘3’对应的所有数据都在裂片2中,所以,如果找不到完整的结果集,则服务器可以确定ID‘2’和‘3’不满足搜索标准。可以将服务器的搜索的结果合并在一起,并且可以仅输出满足搜索标准的ID(例如,ID‘1’),如框618所示。通过基于另一数据表和/或索引表的键对索引表进行分片,将数据表的行中的所有数据都索引在同一裂片中。这样,可以减少搜索整个索引表的分布式操作的数量。

该技术的另一方面涉及通过分配给数据表或其他索引表的随机键来共同分片索引表以减少热点。在这方面,当数据表的标识符键单调递增时(诸如,在ID对应于时间戳或者标识符单调递减的实例中),新传入数据可以定向到单个服务器,因为分配的标识符都可以是在单个服务器的键范围内。因此,单个服务器可能会负担处理任务,而其他服务器仍未得到充分利用或未利用。当同时请求特定键值范围内的数据时,可能会对单个服务器造成类似的负担。

为了解决这个问题,可以将标识符值随机化。在这方面,可以使用随机数生成器来生成落入两个或更多个键范围内的数字。这些随机数可以在作为数据表中的标识符键(ID)输入到分布式存储系统中时分配给数据。通过在键范围内分配标识符,可以在多个服务器之间分散处理任务。例如,如图7所示,第一服务器710可以具有1-10的键范围,而第二服务器712可以具有11-20的键范围。数据表701内的数据可以由分布式存储系统接收,并且处理器(诸如控制器190(未示出))可以基于数据的ID向服务器分配数据的一部分以进行处理。例如,可以将与ID 1相关联的数据分配给第一服务器710,因为1落在第一服务器的键范围1-10内。还可以将与ID 3关联的数据分配给第一服务器710。因为ID 14和12落入11-20的键范围内,所以也可以将与ID 14和12相关联的数据分配给第二服务器712。尽管图7图示了两个键范围,但是任何数量的键范围都是可能的。另外,随机数可能不限于任何特定的键范围,而是可以随机生成,使它们很好地分布在较大的整数空间(诸如整个整数64位空间)上。

可以将具有的数据表801中的数据索引到每行具有多个键的索引表中。例如,分别将与图8的数据表801中的ID 1,Time1相关联的数据索引到索引表803的键‘a,Time1’、‘b,Time1’和‘c,Time1’的行813、815和823中。可以分别将与ID 14,Time2相关联的数据索引到键‘b,Time2’和‘c,Time2’的行817和825中。可以将与ID 12,Time3相关联的数据索引到键‘b,Time3’的行819中,并且可以将与ID 3,Time4相关联的数据索引到键‘b,Time4’的行821中。与索引表中的每个键相关联的数据可以对应于指示被索引到索引表的键中的数据所在的数据表的标识符键的数据。

可以通过分配给数据表801的随机标识符键对索引进行共同分片。例如,如图9所示,可以将对应于具有与表801的ID 1对应的数据的键‘a’、‘b’和‘c’的行分片成裂片1,并且将对应于具有与ID 3、14和12对应的数据的键‘b’和‘c’的行分片成裂片2。

在一些实例中,每个裂片可以以特定顺序排列,诸如通过标识符键或时间戳的值。例如,如图9进一步所示,可以通过存储在索引表数据中并且与数据表801中的数据的时间戳相对应的“时间”标识符键来排列裂片的行。

通过按顺序排列裂片数据的行,可以更快地执行检索、搜索和/或访问索引表的各个部分,因为可能仅需要遍历裂片的一部分。例如,如果对索引表803中具有与“Time2”相关联的数据的键进行查询,则分布式存储系统可以在到达与键‘b’相对应并且具有时间“Time3”的行之后停止遍历第二裂片,因为具有与Time2相关联的数据的键被分组在一起。类似地,分布式存储系统可以遍历与键‘c’相对应的行,一旦找不到更多条目或到达另一个时间(例如,Time3)就停止。

图10图示了用于在分布式存储系统内对表进行共同分片的方法的流程图1000。在这方面,在框1002中,一个或多个处理器(诸如处理器120)可以接收包括一个或多个行的数据表,其中每个行包括标识符键和数据段。如框1004所示,可以将数据表中的每个数据段索引到索引表的单独行中,其中索引表中的每个行都包括与从中索引了相应行中的该数据段的数据表的标识符键相关联的数据。如框1006所示,可以将索引表分片成裂片,其中该分片包括基于从中索引了相应行中的该数据段的数据表的标识符键将索引表的每个行分配给裂片中的一个裂片。可以将裂片存储到分布式存储系统的两个或更多个部分中,如框1008所示。

本文所述的特征允许改进分散在裂片中的数据的检索速度。在这方面,可以通过按源将索引分片成裂片来在本地执行耗时的连接操作,以便在单个裂片中找到与一个源相对应的所有数据。本文所述的特征还避免了在数据的输入和检索期间在特定服务器上形成热点,同时保持了所需的磁盘上的排序顺序。

除非另有说明,否则前述替代示例不是互相排斥的,而是可以以各种组合实现以实现独特的优点。由于可以在不背离权利要求所限定的主题的情况下利用以上讨论的特征的这些和其他变形和组合,因此,对实施例的前述描述应当通过说明的方式而不是通过限制权利要求所限定的主题的方式来进行。另外,本文所述的示例的提供以及用短语表达为“诸如”、“包括”等的用语不应被解释为将权利要求的主题局限于特定示例;相反,这些示例仅旨在说明许多可能的实施例之一。此外,不同附图中的相同附图标记可以标识相同或相似的元件。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号