数据库访问方法和装置与流程

文档序号:12719787阅读:233来源:国知局
数据库访问方法和装置与流程
本申请涉及数据库
技术领域
,尤其涉及一种数据库访问方法和装置。
背景技术
:SQL(StructuredQueryLanguage,结构化查询语言)谓词通常是指where分句中的条件表达式,SQL谓词通过返回真或假的值判定一行数据是否需要返回给用户。在处理一个数据库访问请求时,通常需要执行多个谓词。相关技术中,各数据库通常会预定义有谓词的分类,并依据预设的分类顺序依次执行各类谓词。比如:在IBM数据库中,可以将谓词分为stage1和stage2两类,在执行时,首先执行stage1谓词,然后再执行stage2谓词。而针对某一类中的多个谓词,可以按照用户定义的顺序(where条件中出现的先后顺序)先后执行。然而,在这样的实现方案中,谓词的执行顺序依赖数据库预定义的规则,对执行算子本身的代价(比如:执行耗时等)并不敏感,在一些情况下无法达到代价最低的执行顺序。另一方面,谓词的执行顺序还会依赖用户的输入顺序,当用户想要修改谓词的执行顺序时,需要修改访问请求本身,技术门槛高。此外,谓词的执行顺序一旦确定,在执行的过程中无法改变,当数据库中存储的数据分布发生变化或数据倾斜时,不能确保谓词的执行代价始终较低。技术实现要素:有鉴于此,本申请提供一种数据库访问方法和装置。具体地,本申请是通过如下技术方案实现的:一种数据库访问方法,所述方法包括:为与数据库访问请求相关的谓词确定当前执行顺序;在基于所述当前执行顺序执行所述谓词的过程中,根据预设的采样周期采集各谓词的执行结果参数;根据所述执行结果参数判断所述谓词是否满足顺序更新条件;当所述谓词满足顺序更新条件时,基于采集得到的执行结果参数更新所述谓词的当前执行顺序,并在基于所述当前执行顺序执行所述谓词的过程中,继续执行根据预设的采样周期采集各谓词的执行结果参数的过程。一种数据库访问方法,所述方法包括:为与数据库访问请求相关的谓词确定当前执行顺序;在基于所述当前执行顺序执行所述谓词的过程中,根据预设的更新周期采集各谓词的执行结果参数;基于采集到的所述执行结果参数更新所述谓词的当前执行顺序,并在基于所述当前执行顺序执行所述谓词的过程中,继续执行根据预设的采样周期采集各谓词的执行结果参数的过程。一种数据库访问装置,所述装置包括:第一确定单元,为与数据库访问请求相关的谓词确定当前执行顺序;第一采样单元,在基于所述当前执行顺序执行所述谓词的过程中,根据预设的采样周期采集各谓词的执行结果参数;更新判断单元,根据所述执行结果参数判断所述谓词是否满足顺序更新条件;第一更新单元,当所述谓词满足顺序更新条件时,基于采集得到的执行结果参数更新所述谓词的当前执行顺序,并通知所述第一采样单元处理。一种数据库访问装置,所述装置包括:第二确定单元,为与数据库访问请求相关的谓词确定当前执行顺序;第二采样单元,在基于所述当前执行顺序执行所述谓词的过程中,根据预设的更新周期采集各谓词的执行结果参数;第二更新单元,基于采集到的所述执行结果参数更新所述谓词的当前执行顺序,并在基于所述当前执行顺序执行所述谓词的过程中,继续执行根据预设的采样周期采集各谓词的执行结果参数的过程。由以上描述可以看出,本申请在基于所述当前执行顺序执行所述谓词的过程中,可以周期性地采集各谓词在实际执行时的执行结果参数,并在基于采集到的执行结果参数确定所述谓词满足顺序更新条件时,更新谓词的当前执行顺序,从而可以根据真实的执行总代价动态调整谓词的执行顺序,自适应数据分布的变化,使得谓词在整个执行的过程中,始终保持执行总代价最低,提高数据访问的效率,节省系统的处理资源。附图说明图1是本申请一示例性实施例示出的一种数据库访问方法的流程图。图2是本申请一示例性实施例示出的一种根据执行结果参数判断各谓词是否满足顺序更新条件的流程图。图3是本申请一示例性实施例示出的另一种数据库访问方法的流程图。图4是本申请一示例性实施例示出的一种用于数据库访问装置的一结构框图。图5是本申请一示例性实施例示出的一种数据库访问装置的框图。图6是本申请一示例性实施例示出的另一种数据库访问装置的框图。具体实施方式这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。图1是本申请一示例性实施例示出的一种数据库访问方法的流程图。请参考图1,所述数据库访问方法可以应用在运行有数据库服务端程序的服务器中,包括有以下步骤:步骤101,为与数据库访问请求相关的谓词确定当前执行顺序。在本实施例中,一个数据库访问请求通常对应有多个SQL谓词(在本申请后续的描述中,简称谓词)。在本步骤中,在接收到数据库访问请求后,可以先确定所述数据库访问请求对应的多个谓词,然后可以根据各谓词缺省的执行结果确定当前执行顺序,也就是确定各谓词的初始执行顺序。其中,所述执行结果通常包括两个参考维度:选择率和代价。其中,所述选择率为执行对应谓词后返回执行结果参数是真的比率,可以理解的是,某个谓词的选择率越低说明该谓词的过滤性越强。所述代价通常为对应谓词的执行耗时等。在本实施例中,在确定各谓词的初始执行顺序时,可以依据合取范式以及析取范式确定所述初始执行顺序。举例来说,假设所述数据库访问请求对应有n个谓词,分别为P1,P2,…,Pn,这N个谓词的选择率分别为F1,F2,…,Fn,代价分别为C1,C2,…,Cn。则可以将合取范式P1andP2and…andPn的执行总代价的计算公式设置为:N×(C1+F1×C2+F1×F2×C3+…+F1×F2×…×Fn-1×Cn)将析取范式的执行总代价的计算公式设置为:N×(C1+(1-F1)×C2+(1-F1)×(1-F2)×C3+…+(1-F1)×(1-F2)×…×(1-Fn-1)×Cn)上述公式中,各谓词的缺省代价C通常为预设的代价,各谓词的缺省选择率F通常是基于系统针对不同谓词的全局统计值(NDV或直方图)得到。在本步骤中,可以遍历各谓词的所有可能执行顺序,然后根据上述公式,确定一个执行总代价最小的执行顺序,作为初始执行顺序。步骤102,在基于所述当前执行顺序执行所述谓词的过程中,根据预设的采样周期采集各谓词的执行结果参数。在本实施例中,在确定各谓词的当前执行顺序后,可以基于所述当前执行顺序依次执行所述谓词。在本步骤中,在执行所述谓词的过程中,可以根据预设的采样周期采集各谓词的执行结果参数。其中,所述采样周期可以由开发人员进行设置,比如:1分钟等,本申请对此不作特殊限制。所述执行结果参数可以包括两个维度:执行代价和取值真假。其所述执行代价通常为对应谓词的执行耗时。所述取值真假为执行对应谓词后得到的取值结果,包括:真值(T)和假值(F)。举例来说,假设某谓词的条件为C=100,则当执行该谓词时,如果数据库某行存储的数据为100,则该谓词执行后的取值为真。在本步骤中,可以在到达所述预设的采样周期时,针对所有访问行,根据预设的采样比例确定是否对各谓词在所述访问行的执行结果参数进行采集。其中,所述访问行为本次访问请求所要访问的数据库行,所述采样比例可以由开发人员进行设置,比如:10%,15%等,本申请对此不作特殊限制。举例来说,假设本次数据库访问请求需要访问10000行访问行,所述采样比例为10%,则在到达预设的采样周期时,可以从某访问行开始,针对接下来的100行访问行或者200行访问行中每个访问行,可以按照10%的比例确定是否对该访问行进行采样,即是否对各谓词在该访问行的执行结果参数进行采集。也就是说,这100或200行访问行中每个访问行被采样到的概率是10%。在本实施例中,为便于描述,可以将采集执行结果参数的行称为采样行。可以理解的是,针对100行访问行,如果按照10%的采样比例进行采样,那么最终采集执行结果参数的采样行的数量可能为10行,也可能为8行、9行、11行、12行等。在本步骤中,在基于所述采样周期采集到各谓词的执行结果参数后,还可以基于该执行结果参数更新各谓词缺省的执行结果,以提高初始执行顺序确定的准确性。步骤103,根据所述执行结果参数判断所述谓词是否满足顺序更新条件。基于前述步骤102,在采集得到执行结果参数后,可以根据所述执行结果参数计算对应采样周期各谓词的执行结果样本,然后针对每个谓词,计算连续N个采样周期的执行结果样本的均值作为参考执行结果,并所述参考执行结果与缓存的执行结果的变化超过预设的阈值时,确定所述谓词满足顺序更新条件。步骤104,当所述谓词满足顺序更新条件时,基于采集得到的执行结果参数更新所述谓词的当前执行顺序,并返回步骤102。基于前述步骤103的判断结果,当所述谓词满足顺序更新条件时,可以基于采集得到的执行结果参数更新所述谓词的当前执行顺序。比如:可以根据最新采集得到的执行结果参数计算对应的执行结果样本,并根据该执行结果样本,采用前述步骤101中提供的两个执行总代价的计算公式,重新确定各谓词的当前执行顺序。当然,也可以根据前述步骤103中计算得到的参考执行结果,采用前述步骤101中提供的两个执行总代价的计算公式,重新确定各谓词的当前执行顺序,本申请对此不作特殊限制。在本实施例中,在更新各谓词的当前执行顺序后,可以基于更新后的执行顺序继续执行各谓词,并返回步骤102,继续进行采样判断的过程,直至本次数据库访问完毕。由以上描述可以看出,本申请在基于所述当前执行顺序执行所述谓词的过程中,可以周期性地采集各谓词在实际执行时的执行结果参数,并在基于采集到的执行结果参数确定所述谓词满足顺序更新条件时,更新谓词的当前执行顺序,从而可以根据真实的执行总代价动态调整谓词的执行顺序,自适应数据分布的变化,使得谓词在整个执行的过程中,始终保持执行总代价最低,提高数据访问的效率,节省系统的处理资源。图2是本申请一示例性实施例示出的一种根据执行结果参数判断谓词是否满足顺序更新条件的流程图。请参考图2,该实施例在前述图1所示的实施例的基础上,根据执行结果参数判断各谓词是否满足顺序更新条件可以包括以下步骤:步骤201,根据采集到的执行结果参数计算对应采样周期各谓词的执行结果样本。在本实施例中,基于前述图1所示的实施例,所示执行结果参数包括两个维度:执行代价和取值真假。下面分别针对这两个维度进行描述:一、执行代价。在本实施例中,假设所述执行代价为执行耗时,则某个采样周期,在采集得到各谓词在每个采样行的执行耗时后,针对每个谓词,可以计算采样行的执行耗时的均值,作为所述执行结果样本中代价参考维度的取值。举例来说,假设本次采样采集到各谓词在9个采样行的执行耗时,那么针对每个谓词,可以分别计算其在这9个采样行的执行总耗时,然后除以9以得到每行在执行平均耗时,作为该谓词在“代价”这个参考维度的执行结果样本。二、取值真假。在本实施例中,在采集得到各谓词在各采样行的取值真假时,可以根据所述取值真假生成真值表。举例来说,仍假设在某采样周期采集到各谓词在9个采样行的取值真假,则可以生成表1所示的真值表。采样行谓词1谓词2谓词3…谓词n行1TFF…F行2TTT…F………………行9TTF…T表1请参考表1,其中采样行为行1至行9,需要说明的是,行1至行9并不是这些采样行在数据库中的行号,而是为了便于描述为各采样行从1开始顺序设置的编号。表中的“T”表示真值,“F”表示假值。在本实施例中,在生成所述真值表后,可以根据所述真值表计算该采样周期各谓词的选择率,作为所述谓词在“选择率”这个参考维度的执行结果样本。仍以表1为例,针对谓词1,假设在9个采样行中,有6个采样行的取值为真,3个采样行的取值为假,则谓词1的选择率为6/9,等于66.7%,即谓词1在该采样周期在“选择率”这个参考维度的执行结果样本为66.7%。同样,可以计算出其他谓词在该采样周期的选择率,本申请在此不再一一赘述。需要说明的是,表1仅为示例性的说明,在实际应用中,也可以不生成表1所示的真值表,本申请对此不作特殊限制。在步骤201中,针对每个采样周期,在采集得到各谓词的执行结果参数后,都可以基于上述方式计算该采样周期中各谓词的在“代价”和“选择率”这两个参考维度的执行结果样本。步骤202,针对每个谓词,计算连续N个采样周期的执行结果样本的均值作为参考执行结果。基于前述步骤201,在计算得到对应采样周期各谓词的执行结果样本后,可以计算连续N个采样周期的执行结果样本的均值,作为这些采样时段的参考执行结果。举例来说,假设,在本步骤中,N的取值为5,则针对采样周期1至5,可以计算这5个采样周期的执行结果样本的均值作为第一个参考执行结果。接着,还可以针对采样周期2至6,可以计算这5个采样周期的执行结果样本的均值作为第二个参考执行结果。同样,针对采样周期3-7,可以计算这5个采样周期的执行结果样本的均值作为第三个参考执行结果,依次类推,本申请在此不再一一赘述。当然,在实际应用中,在计算N个采样周期的执行结果样本均值时,也可以不对采样周期进行重复计算,比如:在针对采样周期1至5,计算出这5个采样周期的执行结果样本的均值作为第一个参考执行结果后,可以针对采样周期6至10,计算这5个采样周期的执行结果样本的均值作为第二个参考执行结果,依次类推。本申请对此不作特殊限制。需要说明的是,在本步骤中,在计算连续N个采样周期执行结果样本的均值的时候,基于代价和选择率这两个参考维度分别计算,即所述参考执行结果也包括两个参考维度:代价和选择率。步骤203,当所述参考执行结果与缓存的执行结果的变化超过预设的阈值时,确定所述谓词满足顺序更新条件。基于前述步骤202,在计算得到所述参考执行结果后,可以判断所述参考执行结果与缓存的执行结果的变化程度,当变化程度超过预设的阈值时,可以确定所述谓词满足顺序更新条件。在本实施例中,所述缓存的执行结果为确定所述谓词当前执行顺序的执行结果。举例来说,请参考前述步骤101,在接收到数据库访问请求后,基于各谓词缺省的执行结果确定各谓词的初始执行顺序后,可以缓存所述缺省的执行结果。也就是说,在一次数据库访问的过程中,初始缓存的执行结果为确定各谓词初始执行顺序的缺省执行结果。后续,在基于某执行结果更新所述谓词的执行顺序后,用该执行结果更新已缓存的执行结果。在本实施例中,所述参考执行结果与缓存的执行结果的变化程度可以为差值、增长或下降的比率等,本申请对此不作特殊限制。需要说明的是,本申请参考执行结果包括两个参考维度,在本步骤中,当参考执行结果与缓存的执行结果在代价和选择率中至少一个参考维度的变化超过预设的阈值时,即可确定所述谓词满足顺序更新条件。此外,由于每个参考维度的参考执行结果均包括所有谓词的参考执行结果,在实际应用中,可以在一个或预设数量谓词的参考执行结果与缓存的对应谓词的执行结果的变化程度大于预设阈值时,确定所述维度满足顺序更新条件。举例来说,假设与访问请求相关的谓词的数量为n,其中,n为大于1的自然数,在本步骤中,当这n个谓词中存在m个谓词在代价和选择率中至少一个参考维度的参考执行结果与缓存的对应谓词的执行结果的变化超过对应的预设阈值时,可以确定所述谓词满足顺序更新条件,m为大于等于1的自然数。m的取值和所述预设的阈值均可以由开发人员进行设置,本申请对此不作特殊限制。基于图1所示的实施例,在确定谓词满足顺序更新条件时,可以基于采集得到的执行结果参数更新所述谓词的当前执行顺序。在更新搜索谓词的当前执行顺序时,除了可以采用前述步骤104中描述的方式外,还可以采用本实施例步骤202中计算得到的参考执行结果更新所述谓词的当前执行顺序,本申请对此不作特殊限制。在本实施例中,在更新所述谓词的当前执行顺序后,用确定所述当前执行顺序的执行结果更新已缓存的执行结果,以作为下次进行顺序更新条件确定的基准。在本实施例中,在确定所述谓词不满足顺序更新条件时,可以根据步骤202计算得到的下一个参考执行结果继续判断所述谓词是否满足顺序更新条件,直至本次数据库访问结束。图3是本申请一示例性实施例示出的另一种数据库访问方法的流程图。请参考图1,所述数据库访问方法可以应用在服务器中,包括有以下步骤:步骤301,为与数据库访问请求相关的谓词确定当前执行顺序。在本实施例中,可以参考前述步骤101提供的技术方案实现本步骤,本申请在此不再一一赘述。步骤302,在基于所述当前执行顺序执行所述谓词的过程中,根据预设的更新周期采集各谓词的执行结果参数。在本实施例中,在确定各谓词的当前执行顺序后,可以基于所述当前执行顺序依次执行所述谓词。在本步骤中,在执行所述谓词的过程中,可以根据预设的更新周期采集各谓词的执行结果参数。其中,所述更新周期可以由开发人员进行设置,该更新周期即为更新谓词执行顺序的周期。其中,所述采集方式、所述执行结果参数均可以参考前述图1所示实施例中的描述,本申请在此不再一一赘述。步骤303,基于采集到的所述执行结果参数更新所述谓词的当前执行顺序,并返回步骤302。基于前述步骤302,在采集得到各谓词的执行结果参数后,可以根据该执行结果参数计算对应的执行结果,计算过程可以参考前述计算执行结果样本的过程。在计算得到对应的执行结果后,可以基于所述执行结果更新所述谓词的当前执行顺序,并基于更新后的当前执行顺序继续执行各谓词,并返回步骤302,直至本次数据库访问完毕。由以上描述可以看出,本申请在基于所述当前执行顺序执行所述谓词的过程中,可以周期性地采集各谓词在实际执行时的执行结果参数,并基于采集到的执行结果参数更新谓词的当前执行顺序,从而可以根据真实的执行总代价周期性地动态调整谓词的执行顺序,确保执行总代价相对较低,提高数据访问的效率,节省系统的处理资源。与前述数据库访问方法的实施例相对应,本申请还提供了数据库访问装置的实施例。本申请数据库访问装置的实施例可以应用在服务器上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在服务器的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图4所示,为本申请数据库访问装置所在服务器的一种硬件结构图,除了图4所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的服务器通常根据该服务器的实际功能,还可以包括其他硬件,对此不再赘述。图5是本申请一示例性实施例示出的一种数据库访问装置的框图。请参考图5,所述数据库访问装置500可以应用在前述图4所示的服务器中,包括有:第一确定单元501、第一采样单元502、更新判断单元503、第一更新单元504以及缓存更新单元505。其中,所述更新判断单元503还可以包括:样本计算子单元5031、参考计算子单元5032、更新确定子单元5033。其中,所述第一确定单元501,为与数据库访问请求相关的谓词确定当前执行顺序;所述第一采样单元502,在基于所述当前执行顺序执行所述谓词的过程中,根据预设的采样周期采集各谓词的执行结果参数;所述更新判断单元503,根据所述执行结果参数判断所述谓词是否满足顺序更新条件;所述第一更新单元504,当所述谓词满足顺序更新条件时,基于采集得到的执行结果参数更新所述谓词的当前执行顺序,并通知所述第一采样单元处理。所述样本计算子单元5031,根据采集到的所述执行结果参数计算对应采样周期各谓词的执行结果样本;所述参考计算子单元5032,针对每个谓词,计算连续N个采样周期的执行结果样本的均值作为参考执行结果,N为大于1的自然数;所述更新确定子单元5033,当所述参考执行结果与缓存的执行结果的变化超过预设的阈值时,确定所述谓词满足顺序更新条件;其中,所述缓存的执行结果为确定所述谓词当前执行顺序的执行结果;所述缓存更新单元505,在基于采集得到的执行结果参数更新所述谓词的当前执行顺序后,用所述采集得到的执行结果参数确定执行结果后更新已缓存的执行结果。可选的,所述执行结果参数包括两个维度:执行代价和取值真假;所述执行结果样本和所述参考执行结果均包括两个参考维度:代价和选择率,其中,所述选择率由所述取值真假确定;所述更新确定子单元5033,在所述参考执行结果与缓存的执行结果在一个或者多个参考维度的变化超过预设的阈值时,确定所述谓词满足顺序更新条件。可选的,所述样本计算子单元5031,在所述执行结果参数为取值真假时,根据采集到的取值真假生成真值表,所述真值表中记录有各谓词在各采样行执行后的取值,并根据所述真值表计算对应采样周期各谓词的选择率;在所述执行结果参数为执行代价时,计算各谓词在各采样行的执行代价均值,作为对应采样周期各谓词的代价。可选的,所述第一确定单元501,在接收到数据库访问请求后,根据各谓词缺省的执行结果确定当前执行顺序,并缓存所述缺省的执行结果。可选的,所述第一采样单元502,在基于所述当前执行顺序执行所述谓词的过程中,在到达预设的采样周期时,针对所有访问行,根据预设的采样比例确定是否对各谓词在所述访问行的执行结果参数进行采集。图6是本申请一示例性实施例示出的另一种数据库访问装置的框图。请参考图6,所述数据库访问装置600可以应用在前述图4所示的服务器中,包括有:第二确定单元601、第二采样单元602以及第二更新单元603。其中,所述第二确定单元601,为与数据库访问请求相关的谓词确定当前执行顺序;所述第二采样单元602,在基于所述当前执行顺序执行所述谓词的过程中,根据预设的更新周期采集各谓词的执行结果参数;所述第二更新单元603,基于采集到的所述执行结果参数更新所述谓词的当前执行顺序,并在基于所述当前执行顺序执行所述谓词的过程中,继续执行根据预设的采样周期采集各谓词的执行结果参数的过程。上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1