CN117520387A - 检测违反约束的函数链 - Google Patents
检测违反约束的函数链 Download PDFInfo
- Publication number
- CN117520387A CN117520387A CN202211302322.2A CN202211302322A CN117520387A CN 117520387 A CN117520387 A CN 117520387A CN 202211302322 A CN202211302322 A CN 202211302322A CN 117520387 A CN117520387 A CN 117520387A
- Authority
- CN
- China
- Prior art keywords
- udf
- chain
- function
- key
- functions
- 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
Links
- 230000006870 function Effects 0.000 title claims abstract description 159
- 238000000034 method Methods 0.000 claims abstract description 146
- 230000008569 process Effects 0.000 claims abstract description 142
- 230000004044 response Effects 0.000 claims abstract description 30
- 230000000903 blocking effect Effects 0.000 claims description 8
- 238000012545 processing Methods 0.000 claims description 6
- 238000012544 monitoring process Methods 0.000 claims description 2
- 230000000875 corresponding effect Effects 0.000 description 30
- 238000010586 diagram Methods 0.000 description 7
- 230000001960 triggered effect Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
-
- 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/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
- G06F16/2448—Query languages for particular applications; for extensibility, e.g. user defined types
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24547—Optimisations to support specific applications; Extensibility of optimisers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3006—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system is distributed, e.g. networked systems, clusters, multiprocessor systems
-
- 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/24—Querying
- G06F16/242—Query 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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
-
- 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
-
- 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/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
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)
- Computational Linguistics (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开涉及检测违反约束的函数链。在一些示例中,系统基于以下各项来确定函数的链是否违反约束:在执行数据库操作期间启动的相应服务器进程调用函数时访问填充有条目的跟踪结构,其中,所述跟踪结构的条目中的每个条目都标识与对应程序实例相关联的相应被调用函数;以及使用所述跟踪结构来检测形成所述链的有关的函数,如果所述有关的函数与同一程序实例相关联,则所述有关的函数被标识为有关。响应于确定所述函数的链违反所述约束,所述系统阻断调用要添加到所述链中的另外的函数。
Description
技术领域
本公开一般涉及数据库领域。
背景技术
可以将数据库查询提交到数据库系统以对数据库系统的关系表执行操作。数据库查询的示例包括结构化查询语言(SQL)查询。
发明内容
本公开的示例性方面之一涉及一种非暂态机器可读存储介质,包括指令,所述指令在执行时使系统进行以下操作:基于以下各项来确定函数的链是否违反约束:在执行数据库操作期间启动的相应服务器进程(process)调用所述函数时访问填充有条目(entry)的跟踪结构,其中,所述跟踪结构的条目中的每个条目都标识与对应程序实例相关联的相应被调用函数,以及使用所述跟踪结构来检测形成所述链的有关的函数,如果所述有关的函数与同一程序实例相关联,则所述有关的函数被标识为有关;以及响应于确定所述函数的链违反所述约束,阻断调用要添加到所述链中的另外的函数。
附图说明
关于以下附图描述了本公开的一些实施方式。
图1是根据一些示例的分布式系统的框图,所述分布式系统包括数据库管理程序、用于执行相应用户定义的函数(UDF)的UDF服务器进程以及监测器进程。
图2图示了根据一些示例的违反长度约束的UDF嵌套链。
图3图示了根据一些示例的UDF循环链。
图4是根据一些示例的检测违反约束的过程的流程图。
图5是根据一些示例的存储机器可读指令的存储介质的框图。
图6是根据一些示例的分布式系统的框图。
图7是根据进一步示例的过程的流程图。
在所有附图中,相同的附图标记指代相似但不一定相同的要素。附图不一定是按比例绘制的,并且一些部分的尺寸可以被放大以更清楚地图示所示的示例。此外,附图提供了与描述一致的示例和/或实施方式;然而,描述不限于附图中提供的示例和/或实施方式。
具体实施方式
提交给数据库系统处理的数据库查询可以调用各种函数以执行相应的指定任务。在一些示例中,可以被触发的函数可以包括用户定义的函数(user defined functionUDF)。“UDF”可以指由用户(或用户组)或如程序或机器等另一实体开发的函数,所述函数不是数据库编程语言(例如,结构化查询语言(SQL))的一部分,但是可以定制以执行关于数据的特定动作。
在其他示例中,可以被触发的函数可以包括数据库编程语言(例如,SQL)的本机函数。本机函数可以执行预定义任务,如将值求和的函数、计算值的平均数的函数等。
数据库查询可以调用第一函数(例如,第一UDF),所述第一函数进而可以调用第二函数(例如,第二UDF),所述第二函数进而可以调用第三函数(例如,第三UDF),以此类推。一个函数被另一个函数调用被称为函数的嵌套调用。函数的嵌套调用的长度可以为任意长度。
在一些情况下,函数嵌套链可以包括函数循环,其中函数嵌套链开始于第一函数并且具有调用第一函数的另一个函数。包括函数循环的函数嵌套链被称为函数循环链。
在执行函数的系统中,存在冗长的函数嵌套链或函数循环链可能导致资源争用。因执行函数嵌套链而经受争用的资源的示例包括以下各项中的任一项或某种组合:处理资源(例如,硬件处理器、多个硬件处理器、多核处理器的核心、多核处理器的多个核心等)、存储资源(例如,存储器、基于磁盘的存储装置、固态驱动器等)和/或通信资源(网络接口控制器、交换机或路由器等)。另外,资源可以包括虚拟资源,如虚拟机、容器等。
另外,响应于数据库查询而执行的数据库操作可以修改表中的数据,所述表可以包括行。当修改表中的行时(例如,插入行、删除行或更新行),可以在正在被修改的行上放置锁。执行导致在行上放置锁的行修改的函数循环链可能产生死锁,其中置于表行上的锁可能阻止函数循环链中的函数进行进一步处理。
根据本公开的一些实施方式,提供了用于检测冗长的函数嵌套链(“冗长的”函数嵌套链是包括多于指定数量的函数的链)和/或函数循环链的存在的技术或机制。响应于检测到冗长的函数链或函数循环链,系统可以阻止进一步添加要添加到链中的函数。
与函数嵌套链相关的进一步问题在于与包相关联的数据成员可能无法通过函数嵌套链中的函数共享。“包(package)”可以由包数据来定义,所述包数据标识作为包的一部分的数据成员以及包中的UDF。包数据呈具有指定格式的数据结构的形式。“数据成员”可以指任何变量或参数。如果包的数据成员(或更具体地,数据成员的最新的值)对包中的任何UDF都不可用,则UDF嵌套链中的UDF可能会产生错误的结果,如当基于数据成员的旧版本进行计算时。根据本公开的一些实施方式,包的有关的函数(related functions)可以共享对作为包的一部分的数据成员的访问。在一些示例中,包的数据成员可以存储在缓存中以供有关的函数共享。
图1是其中可以执行数据库操作的分布式系统102的框图。“分布式系统”是指具有多个计算节点的系统,其中每个“计算节点”可以指计算机、处理器、多核处理器的核心或任何其他类型的处理电路。分布式系统102是能够响应于数据库查询而访问数据的分布式数据库系统。
分布式系统102包括可以处理如SQL查询等数据库查询的数据库管理系统(DBMS)程序104。SQL是指允许管理保存在关系数据库管理系统(RDBMS)中的数据的数据库编程语言。在其他示例中,可以采用根据其他语言的数据库查询。
DBMS程序104包括可以将数据库查询108解析到查询计划110中的数据库查询编译器106。例如,数据库查询可以包括SQL语句,所述语句可以由请求者单独提交或者可以是SQL语句的包的一部分。由数据库查询编译器106产生的查询计划110可以包括描述针对由数据库查询108调用的数据库操作执行的各种任务的一组指令。
在一些示例中,可以在分布式系统102中发起协调器进程112以根据查询计划110执行数据库操作。例如,协调器进程112可以用于协调分布式系统102的资源使用。资源可以包括处理资源、存储资源和/或通信资源。协调器进程112可以启动各种辅助进程113以执行与查询计划110的数据库操作相关联的特定任务。
“辅助进程(helper process)”可以指分布式系统102中执行由协调器进程112委派给辅助进程的任务的进程。多个辅助进程113可以并联执行,如在各自不同的处理器或处理器核心上执行。在其他示例中,协调器进程112不使用辅助进程。
在一些示例中,可以触发函数作为查询计划(query plan)110的一部分来执行相应动作。在一些示例中,被触发的函数可以包括UDF或本机函数。
包括UDF和/或本机函数的函数可以对数据执行任何各种不同类型的动作,如计算数据值的数学计算、基于各种输入数据值生成输出值、确定数据值是否满足标准等。
在一些情况下,可以存在函数的嵌套调用。例如,第一UDF可以由作为数据库查询的一部分的触发器(trigger)调用,第一UDF可以调用第二UDF,第二UDF可以调用第三UDF等。图2示出了在UDF嵌套链中7个UDF被一个接一个地调用的示例。在图2的示例中,数据库查询中的触发器(trigger)202调用第一UDF 204,所述第一UDF调用第二UDF 206,所述第二UDF调用第三UDF 208,所述第三UDF调用第四UDF 210,所述第四UDF调用第五UDF 212,所述第五UDF调用第六UDF 214,并且所述第六UDF调用第七UDF 216。UDF的嵌套调用的长度可以为任意长度。在图2的示例中,UDF嵌套链的长度为7(调用了7个UDF)。
数据库查询中的“触发器(trigger)”可以指数据库查询的调用如UDF或本机函数等函数的任何部分(如子句、述语等)。
图3示出了UDF循环链的示例。在图3的示例中,触发器302调用第一UDF 304,所述第一UDF调用第二UDF 306,所述第二UDF调用第三UDF 308,并且所述第三UDF调用第一UDF304。由于第三UDF 308调用第一UDF 304,因此在图3所示的UDF嵌套链中形成了UDF循环。
在分布式系统102中,存在冗长的函数嵌套链(长度超出长度阈值的函数链)或函数循环链可能导致资源争用。在一些示例中,启动UDF服务器进程以执行相应UDF。例如,图1示出了用于执行UDF A的UDF服务器进程116-A、用于执行UDF B的UDF服务器进程116-B…以及用于执行UDF X的UDF服务器进程116-X。多个UDF服务器进程116-A至116-X可能会竞争分布式系统102的资源114。资源114可以包括处理资源、存储资源、通信资源、虚拟资源等中的任一项或某种组合。
每个UDF服务器进程116-A、116-B…116-X定义了执行相应UDF的隔离的计算环境。因此,例如,在UDF服务器进程116-A中执行的UDF A与在UDF服务器进程116-B中执行的UDFB隔离。每个UDF服务器进程可以实施为Java虚拟机(JVM)、容器或任何其他虚拟环境。给定UDF的每次调用(无论是由数据库查询中的触发器还是另一个UDF进行调用)都会导致对应UDF服务器进程对给定UDF的另一次调用。
UDF服务器进程116-A至116-X间的资源争用可能导致涉及相应的UDF A至X的执行的数据库操作的低效执行。例如,如果第一UDF服务器进程所请求的资源不可用或者由于执行第二UDF服务器进程而被大量利用,则第一UDF服务器进程可能无法及时执行其相应UDF。
根据本公开的一些实施方式,为了支持检测冗长的UDF嵌套链或UDF循环链,UDF链跟踪结构122可以存储在缓存120中。“缓存(cache)”可以使用存储器设备集合(单个存储器设备或多个存储器设备)来实施。在一些示例中,缓存120可以包括远程字典服务器(Redis),所述远程字典服务器根据提供存储器内键值对的存储器内数据结构存储的开源协议。在其他示例中,缓存120可以根据其他格式或协议存储数据。
UDF链跟踪结构122包括各自标识UDF嵌套链中的相应UDF的条目。UDF链跟踪结构122与对应程序实例相关联,所述对应程序实例是如应用程序、实用程序或另一类型的程序等程序的实例。如果分布式系统102正在对多个程序实例执行数据库操作(所述多个程序实例可以是同一程序的不同实例或不同程序的实例),则缓存120可以存储与各自不同的程序实例相关联的多个UDF链跟踪结构。在其他示例中,一个UDF链跟踪结构122可以用于存储多个程序实例的条目。
UDF链跟踪结构122的条目随着UDF被调用而被填充,并且其相应的UDF服务器进程(例如,116-A至116-X)在执行数据库操作期间启动。UDF链跟踪结构122包含有关的UDF的信息,其中UDF如果与同一程序实例相关联(例如,响应于同一程序实例被调用),则所述UDF是有关的(related)。
在一些示例中,监测器进程124(包括机器可读指令)能够监测UDF链跟踪结构122,以确定UDF嵌套链是否违反约束。
在一些示例中,监测器进程124与UDF服务器进程116-A至116-X、协调器进程112和辅助进程113分离。在其他示例中,监测器进程124(或监测器进程124的多个实例)可以是UDF服务器进程116-A至116-X中的任何一个或多个和/或协调器进程112和/或辅助进程113中的任何一个或多个的一部分。
如果存在以下之一或两者都存在,则UDF嵌套链将违反约束:(1)UDF嵌套链的长度超出了指定长度(其中函数嵌套链的“长度”等于函数嵌套链中的函数有多少),或(2)UDF嵌套链(或更一般地,函数嵌套链)是循环的。
在上文中,约束包括长度约束和循环约束。如此处所使用的,术语“约束”可以指单个约束或多个约束。
监测UDF嵌套链对约束的违反
参考图1和图4,描绘了由分布式系统102的部件执行的过程。
响应于由UDF服务器进程(116-A至116-X之一)调用给定UDF(“UDF k”,其中k是A、B…X之一),UDF服务器进程可以记录(在402处)UDF链跟踪结构122中调用的UDF k的键值对。UDF服务器进程可以响应于由数据库查询进行的调用或另一个UDF中的调用而调用UDFk。
UDF链跟踪结构122具有多个条目,所述多个条目包含对应的键值对,如图1中描绘的KV1、KV2…KVN(N≥2)。尽管图1示出了包含相应键值对的UDF链跟踪结构122的条目,但在其他示例中,UDF链跟踪结构122的条目可以包含与不同形式的UDF有关的数据。
UDF链跟踪结构122的条目中的键值对包含键和有关的值。键包含标识与UDF的调用相关联的程序实例的程序实例值。程序实例值可以呈进程ID的形式。作为示例,程序P可以在UDF嵌套链中发布数据库查询,所述数据库查询触发第一UDF的调用,所述第一UDF进而调用第二UDF,所述第二UDF进而调用第三UDF,以此类推。以上示例中的UDF k可以是UDF嵌套链中的UDF之一。
键还可以包含UDF标识值,用于标识调用UDF k的UDF k-1。键值对的值是UDF标识值,用于标识调用的UDF k。
作为示例,响应于调用UDF k而添加到UDF链跟踪结构122的键值对可以呈以下形式:
{键=100INT(k-1),值=INT(k)}。
在以上示例键值对中,INT(k)是被调用的UDF k的UDF标识值,100是程序实例的进程ID,并且INT(k-1)是调用UDF k的UDF k-1的UDF标识值。在一些示例中,进程ID(如100)可以是随机数字或可以唯一地标识程序实例的任何其他值。UDF标识值也可以是随机数字或可以唯一地标识UDF的任何其他值。
注意,如果UDF k被数据库查询中的触发器而非另一个UDF调用,则为了调用UDF k而添加的键值对的键可以包括表明调用实体是触发器而非另一个UDF的某个预定义值。
因为UDF被与具有进程ID 100的程序实例相关联的相应UDF服务器进程调用,所以对应键值对被添加到UDF链结构122的条目中,其中键值对中的每个键都跟踪包含进程ID100。
监测器进程124可以确定(在404处)UDF嵌套链是否违反长度约束。在一些示例中,监测器进程124可以定期(例如,每指定时间间隔一次)或响应于另一事件(例如,检测到资源使用量高、检测到分布式系统102的数据库操作放慢等)来分析UDF链跟踪结构122的条目中的键值对。在这种示例中,监测器进程124确定由UDF链跟踪结构122的条目中的键值对集合表示的UDF嵌套链是否违反长度约束。
监测器进程124可以确定由键值对集合表示的UDF嵌套链的长度是否违反长度约束(即,长度处于或大于长度阈值)。监测器进程124可以从包含具有公共进程ID的键的UDF链跟踪结构122取得条目(用于标识给定程序实例)。监测器进程124可以根据取得的条目中的键值对确定UDF嵌套链的长度,所述长度是通过标识哪些UDF调用其他UDF根据键值对来确定的。以下提供了从UDF链跟踪结构122取得的示例键值对集合:
{键=100INT(1),值=INT(2)},
{键=100INT(2),值=INT(3)},
{键=100INT(3),值=INT(4)},
{键=100INT(4),值=INT(5)},
{键=100INT(5),值=INT(6)},
{键=100INT(6),值=INT(7)}。
以上键值对集合表明UDF标识值为INT(1)的UDF调用了UDF标识值为INT(2)的UDF,UDF标识值INT(2)调用了UDF标识值为INT(3)的UDF,以此类推。
基于UDF链跟踪结构122的条目中的键值对,监测器进程124可以确定UDF链(从INT(1)至INT(7))的长度为7。如果长度阈值为6(例如),则监测器进程124可以检测到以上示例中的UDF嵌套链处于长度阈值,以及因此,UDF嵌套链违反长度约束。
注意,即使在以上示例中长度阈值为7,监测器进程124也仍将确定长度为7的UDF嵌套链违反长度约束,因为向UDF嵌套链添加另外的UDF会导致超出长度阈值。
响应于确定UDF嵌套链违反长度约束,监测器进程124向UDF链跟踪结构122的条目添加(在406处)“哨兵(sentine)”键值对126。哨兵键值对126提供表明UDF嵌套链违反约束的违反指示。哨兵键值对126的键包括程序实例值(例如,以上示例中的100),并且哨兵键值对126的值包括表明UDF嵌套链违反约束的指定值(例如,某个预定义数字或字符串)。
在一些示例中,在调用新的UDF之前,UDF服务器进程可以通过读取UDF链跟踪结构122来检查哨兵键值对126。UDF服务器进程可以在UDF链跟踪结构122中搜索哨兵键值对126的存在,如通过搜索指定值或者搜索标志或指示包含哨兵键值对的条目的其他特殊标头。
如果UDF服务器进程确定存在哨兵键值对126,则UDF服务器进程可以阻断调用与同一程序实例(例如,具有进程ID 100的程序实例)相关联的另一个UDF。
尽管图1示出了具有一个哨兵键值对126的UDF链跟踪结构122,但在其他示例中,监测器进程124可能已经向UDF链跟踪结构122添加了多个哨兵键值对以指示违反约束的相应UDF嵌套链。
前述内容提到了监测器进程124定期或响应于另一事件来分析UDF链跟踪结构122的条目的示例。在一些情况下,有可能在跟踪监测器进程124分析UDF链结构122的条目时,UDF嵌套链的长度可能就已经大于长度阈值。
在其他示例中,监测器进程124可以响应于为程序实例(例如,具有进程ID 100的程序实例)调用另外的UDF的请求而确定(在404处)UDF嵌套链是否违反长度约束。在这种示例中,监测器进程124可以是UDF服务器进程的一部分,并且UDF服务器进程中的监测器进程124可以响应于调用另外的UDF的请求(并且在调用另外的UDF之前)而检查UDF链跟踪结构122的条目,以确定向UDF嵌套链添加另外的UDF是否将违反长度约束。如果没有,则UDF服务器进程可以允许调用另外的UDF。然而,如果向UDF嵌套链添加另外的UDF将违反长度约束,则UDF服务器进程将阻断调用另外的UDF。另外,如果向UDF嵌套链添加另外的UDF将违反长度约束,则监测器进程124向UDF链跟踪结构122添加(在406处)哨兵键值对126。
类似地,UDF服务器进程中的监测器进程124可以防止出现UDF循环链。监测器进程124确定(在408处)响应于调用UDF的请求而添加另外的UDF是否违反循环约束。为此,监测器进程124从UDF链跟踪结构122取得键值对,并且确定现有的UDF嵌套链。
以下提供了从UDF链跟踪结构122取得的另一个示例键值对集合:
{键=100INT(1),值=INT(2)},
{键=100INT(2),值=INT(3)}。
该示例中的现有的UDF嵌套链为INT(1)->INT(2)->INT(3)。
另外的UDF可能具有UDF标识值INT(1),并且可以被UDF标识值为INT(3)的UDF调用。向UDF嵌套链添加该另外的UDF将导致UDF循环,因为UDF链将开始于INT(1)并且结束于INT(1),这违反了循环约束。
如果向现有的UDF嵌套链添加另外的UDF将导致循环,则监测器进程124会提供(在410处)循环约束违反指示,这使得UDF服务器进程阻断调用另外的UDF。UDF的循环调用可以在发生之前被UDF服务器进程检测到,因为UDF服务器进程已知将要调用的UDF的UDF标识值,并且基于重建的现有UDF嵌套链,UDF服务器进程可以检测到循环。
如果既不违反长度约束也不违反循环约束,则允许调用另外的UDF。
包数据成员的共享访问
根据本公开的一些实施方式,与同一程序实例相关联的UDF嵌套链中的UDF可以共享对包的数据成员的访问,所述包还标识作为包的一部分的有关的UDF。由包的任何UDF修改的包的数据成员对于包的其他(多个)UDF都可以是可见的。
图1示出了存储在缓存120中的包数据结构130。在一些示例中,包数据结构130包括具有与包的数据成员相对应的键值对的条目。数据成员包括数据成员DM1、DM2…DMP(P≥2)。更一般地,包可以包括仅单个数据成员或多个数据成员。
包数据结构130的每个键值对都包括包含数据成员的名称的键以及作为由键标识的数据成员的当前值的值。键还可以包括包的标识符。因此,在示例中,包数据结构130中的每个键值对中的键都包括包的标识符和对应数据成员的名称。在包数据结构130中,KV-DM1是数据成员DM1的键值对,KV-DM2是数据成员DM2的键值对,并且KV-DMP是数据成员DMP的键值对。
在示例中,由UDF服务器进程116-A执行的UDF A可以修改包数据结构130中的数据成员DMP的值,并且一旦数据成员DMP的值被UDF A修改,UDF B和UDF X就可以访问该修改后的值。
执行相应UDF的UDF服务器进程可以在分布式系统102的不同计算节点上运行。缓存120是分布式缓存,UDF服务器进程可跨不同计算节点访问所述分布式缓存。
当调用包的新UDF导致创建新的UDF服务器进程时,包的有关的数据成员DM1至DMP可被新的UDF访问。
如果包不包括大量数据成员(例如,数据成员的数量少于数量阈值,如少于50、或少于40、或少于30、或少于20、或少于10、或少于5等),则包数据结构130可以包括与数据成员一样多的键值对。当修改数据成员时,也对应地修改对应的键值对,使得包的所有有关的UDF能够看到最新的数据成员值。
在一些情况下,数据成员仅更新一次,并且在一次更新后变成只读的。在这种情况下,数据成员的键值对保持未变,并且可以使用键值对中的键进行查找。
在其他示例中,包可以包括大量数据成员(例如,数据成员的数量大于数量阈值,如大于100、或大于50、或大于40、或大于30、或大于20、或大于10、或大于5等)。在这种示例中,可以将数据成员序列化为数据表示,这允许与在包数据结构130的单个条目中单独存储单独的键值对相比,以更有效的方式取得数据成员。
例如,可以将数据成员序列化为数据成员阵列、序列化为数据成员树等。数据成员阵列或数据成员树是包数据结构130的示例。数据成员阵列的不同条目可以由阵列中的不同偏移量来指示。在这种示例中,阵列的每个条目都包括相应数据成员的值。访问条目的“键”可以是条目的偏移量。在进一步示例中,如果包数据结构130包括数据成员树,则树的节点包含对应数据成员的值,并且“键”是节点的索引。
在其他示例中,数据成员可以包括大型对象。大型对象的大小可以大于大小阈值,例如,大于1百万字节(MB)、或大于5MB、或大于10MB、或大于50MB、或大于100MB等。更新大型对象的UDF可以仅更新大型对象的一小部分(例如,少量字节)。UDF可以仅将更新的一小部分发送到缓存120,以更新缓存120中包数据结构130的对应部分。以这种方式,大型对象可以在缓存120中高效地进行适当的更新,使得更新大型对象的UDF不必将整个更新的大型对象发送到缓存120中的包数据结构130。
进一步示例
图5是存储有机器可读指令的非暂态机器可读或计算机可读存储介质500的框图,所述机器可读指令在执行时使系统(例如,图1的分布式系统102)执行各种任务。
机器可读指令包括约束违反确定指令502,用于确定函数链是否违反约束,所述约束包括长度约束和/或循环约束。
约束违反确定指令502包括跟踪结构访问指令504,用于在执行数据库操作期间启动的相应服务器进程调用函数时访问填充有条目的跟踪结构。跟踪结构的条目中的每个条目都标识与对应程序实例相关联的相应调用函数。跟踪结构的示例是图1的UDF链跟踪结构122。函数可以是UDF和/或本机函数。
约束违反确定指令502包括有关的函数检测指令506,用于使用跟踪结构来检测形成函数链的有关的函数,如果有关的函数与同一程序实例相关联,则相关函数被确定为有关。
机器可读指令包括另外的函数调用阻断指令508,用于响应于确定函数链违反约束而阻断调用要添加到链中的另外的函数。例如,约束可以是长度约束和/或循环约束。如果包括跟踪结构所指示的有关的函数的链处于或超出长度阈值,则另外的函数调用阻断指令508可以阻断调用另外的函数。如果添加另外的函数将导致函数链超出长度阈值,则另外的函数调用阻断指令508可以阻断调用另外的函数。如果添加另外的函数将导致函数链中的函数循环,则另外的函数调用阻断指令508可以阻断调用另外的函数。
在一些示例中,跟踪结构的条目中的每个条目都包括标识对应程序实例的程序实例值(例如,进程ID),其中使用跟踪结构中的程序实例值将有关的函数标识为有关。
在一些示例中,跟踪结构中的不同程序实例值标识为其调用函数的不同程序实例。
在一些示例中,响应于确定形成链的有关的函数的长度处于或大于长度阈值而向跟踪结构添加违反指示条目(例如,图1的哨兵键值对126)。
在一些示例中,有关的函数是包的一部分,所述包进一步包括可被有关的函数访问的数据成员。
在一些示例中,机器可读指令将数据成员存储在缓存中的包数据结构中,以在对应服务器进程中执行的有关的函数间共享数据成员。
在一些示例中,数据成员作为键值对存储在包数据结构中,包数据结构中的键值对中的每个键值对都包括包含包的标识符的键以及表示数据成员中的相应数据成员的值。
在一些示例中,包数据结构中的键值对被布置为缓存中的节点树,并且树的每个节点都用索引标识并表示对应的数据成员值。
在一些示例中,包数据结构中的键值对被布置为缓存中的阵列,并且阵列的每个条目都用偏移量标识并表示对应的数据成员值。
图6是根据进一步示例的分布式系统602的框图。分布式系统602包括用于存储跟踪结构606的缓存604。跟踪结构606的示例是图1的UDF链跟踪结构122。
分布式系统602包括多个计算节点608,用于执行为数据库操作调用相应函数612、622的相应服务器进程610、620。服务器进程610的示例包括图1的UDF服务器进程116-A至116-X。函数612可以是UDF和/或本机函数。
响应于第一服务器进程610调用第一函数612,第一服务器进程610向缓存604中的跟踪结构606添加第一条目614。第一条目614标识与第一函数612相关联的程序实例,并且包括第一函数612的标识符。
分布式系统602包括监测器进程616,用于分析跟踪结构606的条目,以确定为程序实例调用的函数链是否违反约束。条目包括第一条目614和第二条目618,所述第二条目标识与第二函数622相关联的程序实例,并且包括第二函数622的标识符。
图7是根据一些示例的过程700的流程图,所述过程可以由分布式系统(例如,图1中的102或图6中的602)执行。
过程700包括调用(在702处)用于在多个服务器进程(例如,图1中的UDF服务器进程116-A至116-X)中的相应服务器进程中执行的UDF。第一服务器进程中的第一UDF可以调用用于在第二服务器进程中执行的第二UDF。多个服务器进程中的每个相应服务器进程定义了用于执行相应UDF的隔离的计算环境。
过程700进一步包括,当UDF被服务器进程调用并执行时,向缓存(例如,图1中的120)中跟踪结构(例如,图1的UDF链跟踪结构122)的条目添加(在704处)键值对,其中键值对中的每个相应键值对包括标识与对应UDF相关联的程序实例的键以及标识对应UDF的值。键可以包括程序实例的进程ID,以及UDF的标识符。向跟踪结构添加键值对包括第一服务器进程响应于调用第一UDF而向跟踪结构的第一条目添加第一键值对,以及第二服务器进程响应于调用第二UDF而向跟踪结构的第二条目添加第二键值对。
过程700包括由监测器进程(例如,图1中的124)基于键值对确定(在706处)UDF链是否违反约束。在一些示例中,约束是长度约束,并且如果UDF链的长度处于或超出长度阈值,则UDF链违反长度约束。在其他示例中,约束是循环约束,并且如果链中存在UDF循环,则UDF链违反循环约束。
过程700包括响应于确定UDF链违反约束而由服务器进程阻断(在708处)调用另外的UDF。阻断调用另外的UDF的服务器进程可以是响应于在数据库操作期间调用另外的UDF的请求而启动以执行另外的UDF的服务器进程。
存储介质(例如,图5中的500)可以包括以下各项中的任一项或某种组合:半导体存储器设备,如动态或静态随机存取存储器(DRAM或SRAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)和闪速存储器;磁盘,如固定盘、软盘和可移动盘;另一种磁介质,包括磁带;光学介质,如光盘(CD)或数字视频盘(DVD)等;或另一类型的存储设备。注意,上文讨论的指令可以在一个计算机可读或机器可读存储介质上提供,或者可替代地,可以在分布在具有可能多个节点的大型系统中的多个计算机可读或机器可读存储介质上提供。这种一个或多个计算机可读或机器可读存储介质被认为是物品(或制品)的一部分。物品或制品可以指任何制造的单个部件或多个部件。一个或多个存储介质可以位于运行机器可读指令的机器中、或者位于远程站点处,可以通过网络从所述远程站点下载机器可读指令以供执行。
在本公开中,除非上下文另外明确指示,否则使用术语“一个(a)”、“一种(an)”或“所述(the)”旨在同样包括复数形式。同样地,当在本公开中使用时,术语“包括(includes/including/comprises/comprising)”、“具有(have/having)”指明存在所述元件,但不排除存在或添加其他元件。
在前述描述中,阐述了许多细节以提供对本文中所公开的主题的理解。然而,可以在没有这些细节中的一些细节的情况下实践实施方式。其他实施方式可以包括上文所讨论的细节的修改和变化。所附权利要求旨在覆盖这样的修改和变化。
Claims (20)
1.一种非暂态机器可读存储介质,包括指令,所述指令在执行时使系统进行以下操作:
基于以下各项来确定函数的链是否违反约束:
在执行数据库操作期间启动的相应服务器进程调用所述函数时访问填充有条目的跟踪结构,其中,所述跟踪结构的条目中的每个条目都标识与对应程序实例相关联的相应被调用函数,以及
使用所述跟踪结构来检测形成所述链的有关的函数,如果所述有关的函数与同一程序实例相关联,则所述有关的函数被标识为有关;以及
响应于确定所述函数的链违反所述约束,阻断调用要添加到所述链中的另外的函数。
2.如权利要求1所述的非暂态机器可读存储介质,其中,所述跟踪结构的条目中的每个条目都包括标识所述对应程序实例的程序实例值,并且其中,使用所述跟踪结构中的所述程序实例值将所述有关的函数标识为有关。
3.如权利要求2所述的非暂态机器可读存储介质,其中,所述跟踪结构中的不同程序实例值标识函数为其被调用的不同程序实例。
4.如权利要求1所述的非暂态机器可读存储介质,其中,所述函数是在处理触发了所述数据库操作的数据库查询时被调用的用户定义的函数(UDF)。
5.如权利要求1所述的非暂态机器可读存储介质,其中,所述服务器进程中的每个服务器进程要在单独的计算环境中执行所述函数中的相应函数。
6.如权利要求1所述的非暂态机器可读存储介质,其中,所述指令在执行时使所述系统进行以下操作:
响应于确定形成所述链的所述有关的函数的长度具有或大于长度阈值,确定所述函数的链违反所述约束;以及
响应于确定形成所述链的所述有关的函数的所述长度具有或大于所述长度阈值,向所述跟踪结构添加违反指示条目。
7.如权利要求1所述的非暂态机器可读存储介质,其中,所述指令在执行时使所述系统进行以下操作:
响应于确定向所述链中的所述有关的函数添加所述另外的函数将在所述链中形成函数的循环,确定所述函数的链违反所述约束。
8.如权利要求1所述的非暂态机器可读存储介质,其中,所述跟踪结构的条目中的每个条目都包括键值对,所述键值对包括标识调用了所述相应被调用函数的实体的键以及标识所述相应被调用函数的值。
9.如权利要求8所述的非暂态机器可读存储介质,其中,所述键进一步包括所述对应程序实例的标识符。
10.如权利要求8所述的非暂态机器可读存储介质,其中,调用了所述相应被调用函数的所述实体包括数据库查询中的触发器或另一个函数。
11.如权利要求1所述的非暂态机器可读存储介质,其中,所述有关的函数是包的一部分,所述包进一步包括能够被所述有关的函数访问的数据成员。
12.如权利要求11所述的非暂态机器可读存储介质,其中,所述指令在执行时使所述系统进行以下操作:
将所述数据成员存储在缓存中的包数据结构中,以在对应服务器进程中执行的有关的函数间共享所述数据成员。
13.如权利要求12所述的非暂态机器可读存储介质,其中,所述数据成员作为键值对被存储在所述包数据结构中,所述包数据结构中的所述键值对中的每个键值对都包括包含所述包的标识符的键以及表示所述数据成员中的相应数据成员的值。
14.如权利要求13所述的非暂态机器可读存储介质,其中,所述包数据结构中的所述键值对被布置为所述缓存中的节点的树,并且所述树的每个节点都用索引标识并表示对应的数据成员值。
15.如权利要求13所述的非暂态机器可读存储介质,其中,所述包数据结构中的所述键值对被布置为所述缓存中的阵列,并且所述阵列的每个条目都用偏移量标识并表示对应的数据成员值。
16.一种分布式系统,包括:
缓存,所述缓存用于存储跟踪结构;
多个计算节点,所述多个计算节点用于执行为数据库操作调用相应函数的相应服务器进程,
其中,响应于所述服务器进程中的第一服务器进程调用第一函数,所述第一服务器进程用于向所述缓存中的所述跟踪结构添加第一条目,所述第一条目标识与所述第一函数相关联的程序实例并且包括所述第一函数的标识符;以及
监测器进程,所述监测器进程用于分析所述跟踪结构的条目,以确定为所述程序实例调用的函数的链是否违反约束,所述条目包括所述第一条目和第二条目,所述第二条目标识与第二函数相关联的程序实例并且包括所述第二函数的标识符。
17.如权利要求16所述的分布式系统,其中,所述监测器进程用于分析所述跟踪结构的条目,以确定所述函数的链是否违反长度约束。
18.如权利要求16所述的分布式系统,其中,所述监测器进程用于分析所述跟踪结构的条目,以确定所述函数的链是否违反循环约束。
19.一种包括多个计算节点和由所述多个计算节点执行的多个服务器进程的分布式系统的方法,所述方法包括:
调用用于在所述多个服务器进程中的相应服务器进程中执行的用户定义的函数(UDF),其中,第一服务器进程中的第一UDF调用用于在第二服务器进程中执行的第二UDF,其中,所述多个服务器进程中的每个相应服务器进程包括虚拟环境,所述虚拟环境定义用于执行相应UDF的隔离的计算环境,并且其中,UDF包括由实体开发并且不是数据库编程语言的一部分的函数;
当所述UDF被所述相应服务器进程调用并执行时,向缓存中的跟踪结构的条目添加键值对,其中,所述键值对中的每个相应键值对包括标识与对应UDF相关联的程序实例的键以及标识所述对应UDF的值,其中,所述添加包括第一服务器进程响应于调用第一UDF而向所述跟踪结构的第一条目添加第一键值对,以及第二服务器进程响应于调用第二UDF而向所述跟踪结构的第二条目添加第二键值对;
由监测器进程基于所述跟踪结构中的所述键值对确定UDF的链是否违反约束,其中,所述监测器进程包括用于监测所述跟踪结构的机器可读指令;以及
响应于确定所述UDF的链违反所述约束,由服务器进程阻断调用另外的UDF。
20.如权利要求19所述的方法,其中,所述相应键值对中的键进一步标识调用了所述对应UDF的触发器或另一个UDF。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/815,369 | 2022-07-27 | ||
US17/815,369 US11907222B1 (en) | 2022-07-27 | 2022-07-27 | Detecting chains of functions that violate a constraint |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117520387A true CN117520387A (zh) | 2024-02-06 |
Family
ID=89508369
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211302322.2A Pending CN117520387A (zh) | 2022-07-27 | 2022-10-24 | 检测违反约束的函数链 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11907222B1 (zh) |
CN (1) | CN117520387A (zh) |
DE (1) | DE102022126864A1 (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112286633A (zh) * | 2020-10-28 | 2021-01-29 | 平安科技(深圳)有限公司 | 基于CloudStack平台的虚拟机创建方法、装置、设备及存储介质 |
CN112363779A (zh) * | 2020-11-25 | 2021-02-12 | 王志平 | 一种动态链接程序的安全控制方法 |
CN113778648A (zh) * | 2021-08-31 | 2021-12-10 | 重庆理工大学 | 分层边缘计算环境中基于深度强化学习的任务调度方法 |
US20220108007A1 (en) * | 2020-10-02 | 2022-04-07 | Vdoo Connected Trust Ltd. | Firmware Protection |
US20220114009A1 (en) * | 2020-10-13 | 2022-04-14 | BedRock Systems, Inc. | Formally Verified Trusted Computing Base with Active Security and Policy Enforcement |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8473922B2 (en) * | 2001-09-19 | 2013-06-25 | Hewlett-Packard Development Company, L.P. | Runtime monitoring in component-based systems |
US8856151B2 (en) | 2011-01-25 | 2014-10-07 | Hewlett-Packard Development Company, L.P. | Output field mapping of user defined functions in databases |
US10515075B2 (en) | 2017-05-15 | 2019-12-24 | Microsoft Technology Licensing, Llc | Method for optimization of imperative code executing inside a relational database engine |
US11243820B1 (en) | 2021-04-30 | 2022-02-08 | Snowflake Inc. | Distributed deadlock detection and resolution in distributed databases |
-
2022
- 2022-07-27 US US17/815,369 patent/US11907222B1/en active Active
- 2022-10-14 DE DE102022126864.0A patent/DE102022126864A1/de active Pending
- 2022-10-24 CN CN202211302322.2A patent/CN117520387A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20220108007A1 (en) * | 2020-10-02 | 2022-04-07 | Vdoo Connected Trust Ltd. | Firmware Protection |
US20220114009A1 (en) * | 2020-10-13 | 2022-04-14 | BedRock Systems, Inc. | Formally Verified Trusted Computing Base with Active Security and Policy Enforcement |
CN112286633A (zh) * | 2020-10-28 | 2021-01-29 | 平安科技(深圳)有限公司 | 基于CloudStack平台的虚拟机创建方法、装置、设备及存储介质 |
CN112363779A (zh) * | 2020-11-25 | 2021-02-12 | 王志平 | 一种动态链接程序的安全控制方法 |
CN113778648A (zh) * | 2021-08-31 | 2021-12-10 | 重庆理工大学 | 分层边缘计算环境中基于深度强化学习的任务调度方法 |
Also Published As
Publication number | Publication date |
---|---|
US11907222B1 (en) | 2024-02-20 |
US20240037100A1 (en) | 2024-02-01 |
DE102022126864A1 (de) | 2024-02-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Arulraj et al. | Bridging the archipelago between row-stores and column-stores for hybrid workloads | |
CN105989194B (zh) | 表数据比较的方法和系统 | |
US6978271B1 (en) | Mechanism for continuable calls to partially traverse a dynamic general tree | |
EP3748515B1 (en) | Policy driven data placement and information lifecycle management | |
US7194451B2 (en) | Database monitoring system | |
US6321235B1 (en) | Global caching and sharing of SQL statements in a heterogeneous application environment | |
Cahill et al. | Serializable isolation for snapshot databases | |
US20070226177A1 (en) | Evaluating a current partitioning of a database | |
CA3137857A1 (en) | Multi-language fusion query method and multi-model database system | |
US9171036B2 (en) | Batching heterogeneous database commands | |
US7801882B2 (en) | Optimized constraint and index maintenance for non updating updates | |
US9239858B1 (en) | High-concurrency transactional commits | |
US9424323B2 (en) | Application tier data dictionary | |
Felber et al. | On the support of versioning in distributed key-value stores | |
Camacho-Rodríguez et al. | Building large XML stores in the Amazon cloud | |
US7752181B2 (en) | System and method for performing a data uniqueness check in a sorted data set | |
Kvet et al. | Analysis of current trends in relational database indexing | |
US11176314B2 (en) | XML schema description code generator | |
US11907222B1 (en) | Detecting chains of functions that violate a constraint | |
Bachman | Graphaware: Towards online analytical processing in graph databases | |
US7974955B2 (en) | Inhibiting non-critical access based on measured performance in a database system | |
Binder et al. | Multiversion concurrency control for the generalized search tree | |
Kuhn et al. | Locks, Latches, and Mutexes | |
Forfang | Evaluation of High Performance Key-Value Stores | |
Kuhn et al. | Locking and Latching |
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 |