技术领域
[0001] 本公开总体上涉及数据库技术,并且尤其涉及动态地更新和定制数据库分区。
相关背景技术
[0002] 诸如通过生成对数据请求的响应而必须由数据库处理的增长的数据量增加了数据库必须执行的评估次数,从而增加了数据库必须承担的计算负载。此外,为请求的客户端计算响应所需的时间正在增加,从而导致客户端必须为接收其响应等待更长的时间。
[0003] US 9317577 B2描述了一种用于动态划分数据库的系统和方法,并且具体地涉及动态地更新和定制数据库分区的概念。在查询执行之后提供反馈,该反馈确定频繁查询的数据项。反馈还包括每个数据查询命中了哪些数据项和每个分区的查询次数的统计。另外,基于数据库中的数据查询频率对数据分区规则进行更新。根据新的数据分区规则,最频繁的信息被分组并且被重新分配在一个数据库分区中。另外,在处理用户查询时,对该用户查询进行解析,并且确定是否可以通过搜索至少一个分区而不是所有分区来完成该查询。如果数据查询请求与至少一个分区匹配,则在某些匹配的分区内进行搜索。
[0004] US 8972403 B2描述了一种系统和方法,用于将数据记录划分为不同的物理分区,从而允许有效地存储数据记录,以及提高缓冲池的命中率,而不影响数据记录的聚类属性。该方法为多个数据记录创建索引,其中每个索引包括计数器。然后,该方法为经受随机访问的数据记录更新计数器的数值。频繁经受随机访问的数据记录被存储在相同的数据页或连续的数据页中,以便在将它们一起加载到缓冲池中时可以有效地提高缓冲池的命中率。该方法基于多个计数器的数值重新组织多个数据记录。因此,经受更频繁的随机访问的数据记录被存储在频繁使用的分区中。
[0005] 普遍需要使数据库请求处理更加高效的系统。
具体实施方式
[0024] 本公开涉及数据库技术,并且尤其涉及动态地更新和定制数据库分区。例如通过生成对数据请求的响应而必须由数据库处理的不断增长的数据量导致计算系统的计算负载的显著增加。另外,为请求的客户端计算响应所需的时间正在增加,从而导致客户端必须为接收其响应等待更长的时间。
[0025] 本公开通过在诸如数据库系统之类的计算环境的不同分区上分离地分布数据量来解决上述方面。由于每个分区存储了整个数据的一部分,因此对于特定的数据请求只需处理较少的数据量,并且通过一个分区或少量分区来计算响应,而不是通过整个数据库来计算响应。
[0026] 图1示出了根据一些实施例的分布式计算环境。计算机实现的引擎1可以访问具有多个数据库分区10‑1、10‑2和10‑3的数据库系统10。图1中所示的分区10‑1、10‑2和10‑3仅具有示例性质。术语“数据库”在本文中用于涵盖任何种类、类型和模型的数据库(诸如关系数据库、noSQL数据库、分布式数据库系统、规则引擎、知识库、推理引擎、数据仓库、云数据库等),而不管所保持的数据的内容或任何特定应用如何。
[0027] 数据可以由数据记录组成,这些数据记录可以被布置在(诸如图3中的)表中。为了生成跨分区的数据记录的分离分布,包括数据记录的表可以被水平地划分为若干更小的表。这些更小的表没有共享任何公共的数据记录,并且因此是分离的,以及将被分布在诸如分区10‑1、10‑2和10‑3之类的分区中。因此,当接收到对数据的请求时,不需要搜索所有的分区10‑1、10‑2和10‑3,而只需要搜索其上存储有与生成响应相关的数据记录的那些分区。
[0028] 数据库10可以具有任意数量的分区。计算机实现的引擎1和数据库10位于任何地方,并且是单独计算机器,诸如个人计算机、移动站(诸如膝上型计算机或平板计算机)、智能电话等,以及在一些实施例中是更强大的机器,诸如数据库应用服务器、分别包括多个互连的机器的分布式数据库系统、数据中心等。在一些实施例中,数据库10可能是与计算机实现的引擎1类似的机器,而在其他实施例中,数据库10比计算机实现的引擎1更强大。在一些实施例中,计算机实现的引擎1和数据库10是可以在全世界分布的数据中心。
[0029] 取决于性能要求,计算机实现的引擎1和数据库10可以由若干硬件机器构成。计算机实现的引擎1和数据库10两者例如体现为包括如图11中所示的计算机器40的固定或移动硬件机器,和/或体现为专用系统(诸如为特定技术目的而布置的嵌入式系统),和/或体现为在通用或专用计算硬件机器(诸如网络(web)服务器和网络(web)客户端)上运行的软件组件。
[0030] 计算机实现的引擎1和数据库10通过通信接口11互连。每个接口11采用有线或无线的局域网(LAN)、或者有线或无线的城域网(MAN)、或者有线或无线的广域网(WAN)(诸如因特网)、或者上述网络技术的组合,并通过任何合适的通信和网络协议来实现。
[0031] 在一些实施例中,分区10‑1、10‑2和10‑2是驻留在一个服务器上的同一数据库系统内的分区。然而,在其他实施例中,分区10‑1、10‑2和10‑3分布在驻留在若干服务器上的单独数据库(例如分片(shard))上。
[0032] 计算机实现的引擎1被布置为识别和检索适于生成对请求的响应的数据记录的编号。引擎1可以访问至少两个分区,即第一分区和第二分区,每个分区维持多个数据记录。作为示例,第一分区和第二分区可以对应于图1的前述分区10‑1和10‑2。
[0033] 如图2的流程图中所示,在活动20中,引擎1被布置为在多个识别和检索过程期间生成分区统计,该分区统计指示数据记录之间的相关性。
[0034] 图3是根据一些实施例的数据记录的示例性说明。数据记录被列出在表中。该表包括用于数据记录的标识号的列。该表包括用于内容数据的其他列,在图3中示例性地标记为“内容A”、“内容B”和“内容C”。将内容数据用符号表示为“A1、A2、…、A8、B1、B2、…、B8、C1、C2、…、C8”。
[0035] 图4以示例性方式图示了由计算机实现的引擎1在活动20中生成的分区统计。数据记录之间的相关性由如下次数来描述,该次数指示在某一时间段内请求数据记录组合的频率。除了在任意时间单位内对单独数据记录的请求外,图4还在表的右列中示出了数据记录的某个组合(集群)已被请求了多少次。通过监视和记录由数据库系统10接收和处理的实际请求以及返回的相应的一个或多个数据记录来建立和维持这些分区统计。作为示例,包含ID为0000和0014的数据记录的集群在每个任意时间单位已被请求了700000次,而包含ID为0000和0001的数据记录的集群在每个任意时间单位已被请求了600000次。另外,图4的统计示出了数据记录的集群(0010,0011)、(0010,0012)、(0011,0012)、(0000,0002)和(0002,
0013)已经分别被请求了60000次、70000次、50000次、30000次和25000次。
[0036] 如图4中所示的分区统计和数据记录之间的相关性仅用作说明性示例并且不是旨在是限制性的。在其他实施例中,建立和维持具有数据记录之间的任何类型的相关性的任何类型的统计。
[0037] 计算机实现的引擎1还被布置为在图2的活动22中基于分区统计来更新分区。更新包括响应于基于分区统计确定(图2的流程图的活动21)第二分区包括与第一分区中的其他数据记录相比具有与第一数据记录的更高相关性的第二数据记录而将第一数据记录从第一分区重定位到第二分区。
[0038] 图5和图6在说明性示例中示出了ID为0014的数据记录从分区10‑2到分区10‑1的重定位。重定位是基于分区统计来进行的,诸如定期分析分区统计,并且确定是否存在彼此之间具有显著相关性(响应于请求而被定期地一起返回)但是当前位于不同的分区中的数据记录。如图5中所示,数据记录0014响应于每个任意时间单位(诸如一天)80000次请求而被单独识别和检索,并且最初与响应于类似范围内的请求(每个任意时间单位在10000和100000次请求之间)而被识别和检索的数据记录0010、0011、0012和0013一起存储在分区
10‑2中。图4的统计进一步图示了数据记录0014与存储在分区10‑1中的数据记录0000一起被更经常地请求——即750000次。因此,数据记录0014与存储在分区10‑1中的数据记录的相关性高于与分区10‑2的任何数据记录的相关性。如图6中所示地执行数据记录0014到分区10‑1的重定位。另外,数据记录0002被单独请求了700000次,而与数据记录0013相组合,请求的次数减少到25000次。因此,数据记录0002与存储在分区10‑2中的数据记录的相关性高于与分区10‑1的任何数据记录的相关性。如图6中所示地执行数据记录0002到分区10‑2的重定位。
[0039] 前面说明的示例指的是两个数据记录之间的相关性,即每个任意时间单位对两个数据记录(数据记录#1,数据记录#2)的集群的请求的次数。其他相关性被设想到并且在本公开的范围内,诸如多于两个数据记录之间的相关性。例如,诸如(0010,0011)之类的两个数据记录的集群(其根据图4在每个任意时间单位被请求60000次)可以是诸如(0000,(0010,0011))之类的更大集群的子集群部分。该更大的集群本身可以在每个任意时间单位被请求45000次。子集群(0010,0011)可以作为单独的数据记录存储在那些分区上,这些分区存储具有与子集群(0010,0011)的最强相关性的数据记录。数据记录的集群的另一个示例是诸如(数据记录#1,数据记录#2,数据记录#3)之类的三个数据记录的相关性。在一些实施例中,相关性包括四个数据记录或多于四个数据记录的集群。
[0040] 计算机实现的引擎1还被布置为在图2的后续活动23中基于更新后的分区来确定用于生成对新请求的响应的数据记录的编号。该请求包括搜索参数(例如键值)或搜索数据,其使得计算机实现的引擎1能够计算哪些数据记录满足该请求并且将成为响应的一部分。通常,计算机实现的引擎在响应中包括与请求中的搜索参数相对应的所有数据记录,即,请求被穷尽地回答。该确定包括识别适于生成响应的第一数据记录和第二数据记录(活动24)以及从第二分区中检索第一数据记录和第二数据记录(活动25)。进一步调用当前示例,引擎1识别数据记录0000和0014以穷尽地满足搜索参数并且从分区10‑1中检索这些数据记录。由于数据记录0014先前已从分区10‑2(第一分区)重定位到分区10‑1(第二分区),因此分区10‑1是为了识别所请求的数据记录0000和0014而被搜索的唯一分区。不需要搜索其他分区。数据库系统10上的计算负载因此显著降低(与由图5所示的先前情况相比)。
[0041] 以此方式,数据记录的重定位是以这样的方式执行的,即在计算出的对请求的响应只需包括适于生成该响应的所有可能的数据记录的情况下,将搜索最小数量的分区。
[0042] 与现有技术参考文献US 9317577 B2和US 8972403 B2相比,如图2所示的实施例的方法基于建立在过去的请求和所返回的响应上的统计并且独立于数据记录的内容来执行数据记录的分区和重定位。分区统计例如通过键值(例如图5和图6的ID)的方式来指示过去(例如在任意时间段(诸如最近一天)内)已经单独和一起返回了哪些数据记录(即所有数据记录的幂集的元素)。另外,由该方法所采用的统计使得能够识别响应于单独请求而被定期地一起返回的多个数据记录(例如两个数据记录、三个数据记录或更多个数据记录)之间的相关性。
[0043] 在一些实施例中,计算机实现的引擎1还被布置为基于所生成的对请求的响应将关于检索到的第一数据记录和第二数据记录的信息添加到统计,从而生成更新后的分区统计。图7示出了图4的分区统计的更新后的版本的示例。如前面针对当前示例提到的,由引擎1再一次检索到数据记录0000和0014的集群。结果,对数据记录0000和0014的集群的请求的次数通过该附加请求而递增,从而将表的右列中的次数从700000增加到700001,如图7中所示。更新后的分区统计可以被认为是在图2的活动20中生成的新生成的分区统计,其用作分区10‑1、10‑2和10‑3的下一次更新的基础。
[0044] 在一些实施例中,所实现的引擎1还被布置为基于更新后的分区统计来定期地更新分区。如上所述,更新后的分区统计可以用作分区10‑1、10‑2和10‑3的更新的基础。如图2的箭头27中所示,取决于具体的用例,定期(诸如例如每小时)执行该更新。在具有高度动态数据结构的数据库系统(诸如在快速时间尺度上形成、重新排列和解散的数据记录的集群以及在快速时间尺度上新添加、修改或删除的数据记录)中,分区的定期更新确保:对于每个新请求,只需搜索最少数量的分区,以便识别对应的数据记录(活动24)。因此,即使在高度动态的数据环境中,系统上的计算负载也降低。分区统计的更新周期取决于数据记录及其关联发生变化的时间尺度。因此,可以在任何给定时间段(诸如秒、分钟、小时和天)的尺度上执行更新。
[0045] 在一些实施例中,数据记录之间的相关性指示在给定时间段期间针对各个请求而识别和检索的至少两个数据记录的子集。进一步参考本示例,最初,在数据记录0000和0014之间不存在相关性。然后,对于例如一个月的持续时间,这两个数据记录已被组合地请求。因此,通过将数据记录0000和0014聚类在(0000,0014)中,建立了这两个数据记录之间的新相关性。
[0046] 在一些实施例中,分区统计指示在给定时间段期间针对各个请求而识别和检索单独数据记录和子集的频率。作为示例,图4和图7的数据记录和数据记录组合被请求的前述任意时间单位可以是一个小时、一个星期、一个月等。
[0047] 在一些实施例中,分区统计包括:具有单元的矩阵,指示至少两个数据记录的子集在给定时间段期间被识别和检索的次数;和/或有序列表,指示至少两个数据记录的子集在给定时间段期间被识别和检索的次数。有序列表的示例在图4和图7中示出,其中表根据每个任意时间单位的请求的次数进行排序。图8示出了对应的矩阵,其字段或元素a[i][j]指示数据记录的相关性在诸如一天之类的时间段内已被请求了多少次。例如,图8的矩阵的第二列和第三行的字段(元素a[数据记录#3][数据记录#2])指示集群(0000,0001)在每个任意时间单位已被请求了600000次。一旦分区统计被更新,矩阵的字段就被更新。参考将对集群(0000,0014)的请求的次数从700000更新为700001的前述示例,将第二列和第九行的矩阵字段从700000更新为700001。
[0048] 图8的矩阵可以表示同现矩阵,其中矩阵a[数据记录#i][数据记录#j]的每个元素表示数据记录#i和数据记录#j之间的同现的次数。图8的矩阵可被解释为链接图。该链接图的每个节点代表数据记录,其中同现因子代表数据记录之间的距离。本领域中存在如何确定分区的最佳数量以及作为结果的每个分区的数据记录的数量的已知方法,诸如结合肘部方法(elbow method)的k均值算法。分区内的数据记录的相关性可以通过例如以下方式来测量:
[0049] ·惯性的确定,其中惯性指示分区内的数据记录相距多远。因此,以小的惯性为目标。
[0050] ·确定轮廓分数,其中轮廓分数指示跨分区相关性,即一个分区中的数据记录与另一个分区中的数据记录的相关性。轮廓分数的范围是从‑1到1。轮廓分数应该比‑1更接近于1。
[0051] 一旦知道了分区的数量,就可以将数据记录分布在各分区中。在一些实施例中,图8中的矩阵的同现可以表示数据记录之间的相似性。在分区中定位数据记录可以通过本领域中已知的方法(诸如谱聚类方法)来执行。谱聚类是用于基于连接节点的边来识别图中的节点社区(诸如当前数据记录)的技术。上述机制可以用来设定分区的数量并且初始地将数据记录分布在各分区中,以及还用于调整分区,包括如上所述地将数据记录从一个分区重定位到另一个分区。
[0052] 在一些实施例中,计算机实现的引擎1另外被布置为通过被布置为在分区之间重定位数据记录的编号以平衡分区上的计算负载来更新分区。进一步参考本示例,对图4的表的分析得出:图1的分区10‑1、10‑2和10‑3之间的负载分布是分区10‑1承载了大约75%的总计算系统负载,而分区10‑2和10‑3分别承载了大约25%和0%的总计算系统负载。为了更均匀地平衡分区10‑1、10‑2和10‑3之间的计算负载,可能将最初存储在分区10‑1上的一些数据记录重定位到分区10‑2和10‑3。
[0053] 数据记录0002和0014的上述重定位已经导致更均匀的负载分布。分区10‑1现在承担61%的总计算负载,而分区10‑2现在承担39%的总计算负载。
[0054] 对图4的表的分析例如可以提示引擎1进一步将在每个任意时间单位被请求1000000次的数据记录0000重定位到分区10‑3。结果,大约170万个请求从分区10‑1转移到分区10‑3,从而导致分区之间的更均匀分布的计算负载,即分区10‑1有28%的总负载、分区
10‑2有39%的总负载并且分区10‑3有33%的总负载。
[0055] 在一些实施例中,计算机实现的引擎1被布置为默认将新数据记录存储在第三分区,并且响应于共同地识别和检索来自第三分区的新数据记录和来自第二分区的第二数据记录来更新分区统计,以生成对相应次数的进一步请求的进一步响应的次数。计算机实现的引擎1被布置为基于更新后的分区统计进一步更新分区,包括响应于基于更新后的分区统计确定新数据记录与第二数据记录的相关性高于与第一分区中的其他数据记录的相关性而将新数据记录从第三分区重定位到第二分区。
[0056] 图9示出了将三个新数据记录0020、0021和0022添加到已经位于分区10‑1和10‑2中的现有数据记录。新数据记录0020、0021和0022被默认存储在分区10‑3中,如图10中所示。在随后的请求中,这些新数据记录0020和0020分别与数据记录0010和0000相组合地被请求。数据记录0021在没有组合的情况下被请求。图11示出了对应的更新后的分区统计。组合(0000,0022)在每个任意时间单位被请求700000次,而组合(0010,0020)在每个任意时间单位被请求70000次。数据记录0021在每个任意时间单位被请求600次。基于该更新后的分区统计,分区10‑1、10‑2和10‑3得到更新,如图12中所示。数据记录0020被重定位到分区10‑2,因为它与存储在该分区上的数据记录具有最强的相关性。另外,数据记录0022被重定位到分区10‑1,这是由于它与该对应分区的数据记录的相关性最强。因此,已经以这样的方式重定位了新数据记录0020、0021和0022,以便在新请求的情况下只需搜索最少的分区。
[0057] 图13是实现计算机实现的引擎1和/或数据库10的功能的计算机器40的内部组件的图解表示。计算机器40包括指令集,该指令集当由计算机器40执行时使计算机器40执行本文中讨论的任何方法。计算机器40包括经由总线44相互通信的至少一个处理器41、主存储器46和网络接口设备43。可选地,计算机器40还可以包括静态存储器45和盘驱动单元。显示器、字母数字输入设备和光标控制设备可以被提供作为用户接口42的示例。网络接口设备43将实现计算机实现的引擎1的计算机器40与数据库10连接。另外,网络接口设备43还将实现数据库10的计算机器40与计算机实现的引擎1连接。
[0058] 计算机器40包括存储器46,诸如主存储器、随机存取存储器(RAM)和/或任何其他易失性存储器。存储器46可以存储临时数据和用于促进计算机实现的引擎1和/或数据库10的功能的程序数据47,包括用于实现分区统计的生成和更新以及数据记录的存储、定位和重定位的程序数据。存储器46还可存储临时数据,诸如请求和响应数据49。
[0059] 体现本文中描述的任何一个方法或所有方法的计算机可执行指令集完全或至少部分地驻留在机器可读存储介质中或机器可读存储介质上,例如驻留在静态存储器45中,或者,当被加载和执行时,驻留在主存储器46中。例如,指令可以包括实现计算机实现的引擎1和/或数据库10的数据库请求处理功能的软件处理。指令还可以通过网络接口设备43经由因特网或经由用户接口42作为传播信号来发送或接收。计算机器40内的通信经由总线44来执行。计算机器40的基本操作由操作系统控制,该操作系统也位于存储器46、至少一个处理器41和/或静态存储器45中。
[0060] 一般而言,为了实现实施例而执行的例程,无论是被实现为操作系统的一部分还是被实现为特定应用、组件、程序、对象、模块或指令序列或者甚至其子集,在本文中可以被称为“计算机程序代码”或简称为“程序代码”。程序代码通常包括计算机可读指令,这些指令在不同时间驻留在计算机中的各种存储器和存储设备中,并且当由计算机中的一个或多个处理器读取和执行时使该计算机执行为执行体现本发明的实施例的各个方面的操作和/或元素所需的操作。用于执行本发明的实施例的操作的计算机可读程序指令可以例如是汇编语言或以一种或多种编程语言的任意组合编写的源代码或目标代码。
[0061] 在某些替选实施例中,在流程图、序列图和/或框图中指定的功能和/或动作可以被重新排序、串行处理和/或并发处理。此外,流程图、序列图和/或框图中的任何一个可以包括比符合实施例和示例示出的那些块更多或更少的块。
[0062] 本文中使用的术语是为了描述特定实施例和示例的目的,而不是旨在是限制性的。将进一步理解,当在本说明书中使用时,术语“包括”和/或“包含”指定了所述的特征、整体、步骤、操作、元素和/或组件的存在,但是不排除一个或多个其他特征、整体、步骤、操作、元素、组件和/或其组的存在或添加。另外,就在详细描述或权利要求中使用术语“包括”、“具有”、“拥有”、“带有”、“由...组成”或其变体来说,这样的术语旨在以类似于术语“包含”的方式是包含性的。
[0063] 虽然对各种实施例的描述已经说明了所有的发明,并且虽然已经相当详细地描述了这些实施例,但是不是旨在将所附权利要求的范围限制或以任何方式限制到这样的细节。对于本领域技术人员来说,附加的优点和变型将很容易出现。因此,本发明在其更广泛的方面不限于所示出和描述的具体细节、代表性装置和方法以及说明性示例。因此,可以偏离这样的细节。