CN108431766B - 用于访问数据库的方法和系统 - Google Patents
用于访问数据库的方法和系统 Download PDFInfo
- Publication number
- CN108431766B CN108431766B CN201680076832.9A CN201680076832A CN108431766B CN 108431766 B CN108431766 B CN 108431766B CN 201680076832 A CN201680076832 A CN 201680076832A CN 108431766 B CN108431766 B CN 108431766B
- Authority
- CN
- China
- Prior art keywords
- database
- builder
- access command
- new
- database access
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/51—Source to source
-
- 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/21—Design, administration or maintenance of databases
- G06F16/215—Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
-
- 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/23—Updating
-
- 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
-
- 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
- G06F16/24554—Unary operations; Data partitioning operations
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开涉及用于访问数据库的方法和系统。在具有终止操作和源操作的操作的流水线中,建立与终止操作对应的构建器。该构建器还可以与一个或更多个中间操作对应。生成与该构建器对应的数据库查询并将其发送到数据库或数据源,以对数据库进行高效访问。
Description
相关申请的交叉引用
本申请要求2015年12月2日提交的标题为Method and Apparatus for MappingObject Oriented/Functional Languages to Database Languages的美国第62/261,978号临时专利申请的优先权和权益,此处以引证的方式将该申请的整个内容并入。
技术领域
本公开总体涉及用于通信网络中的消息交换的方法和设备。更具体地,各种实施方式涉及一种通信系统,该通信系统连接到私有或公共数据通信网络(诸如因特网),并且允许应用以适于现代编程语言的方式检索、更新和/或删除数字对象(诸如数据库对象)。
背景技术
大量信息提供者存在于提供各种各样服务的通信网络(诸如因特网)上。许多组织在诸如SQL数据库或NoSQL数据库这样的数据库中具有关键任务数据。这些数据库的大小常常每年极大地增大,同时所服务事务的数量根据甚至更陡峭的曲线以加速速率增长。此外,数据库及其关系的复杂度经常加深。由于交互性的提高和越来越多的用户(例如,因特网用户),存在不断增加的对更多数据库容量和能力的需求。然而,当前,现有解决方案具有包括它们缺乏性能在内的多个缺点。
许多较大的组织面临维持现有等级数据库性能或提供较高等级的数据库性能的挑战。例如,组织经常具有与SQL数据库通信的大量传统工具和应用。此外是可用于直接SQL使用的多个第三方应用。因此,从技术角度,对于一些组织部署除了SQL之外的数据库既不期望也不可行。然而,SQL标准相对较老且不支持面向对象和/或函数式编程方案。性能有时会受由SQL采用的面向行的方案以及经常在请求信息元素时发生的信息元素之间的动态关系限制。
容量和性能是涉及到组织底线时的关键因素。缓慢网站或不良执行的查询经常导致较少的流量、不满意的客户或负面的用户体验,因此最后伤害底线。问题是普遍的,而与行业的类型(诸如零售、财政、保险、政府、游戏、保健)无关。这些行业中的组织随着竞争飞跃向前而迟早将面临问题。
IT部门面临多种方式的问题:外部网站、内部数据库或复杂关系查询。例如,为了控制数据库需求,IT部门被迫通过部署较强大的服务器来增加数据库容量。有时数据库执照的成本随着所用CPU的数量线性增加。
应用开发者在他们处理数据源中的数字对象时面临许多问题。例如,应用供应商需要人工编写反映存储在数据源中的对象的代码。他们经常需要编写通信适配器,以从基础数据源变换成现代程序语言对象/函数式和编程范例。
近来,已经将函数式编程模型添加到面向对象语言(诸如Java编程语言)。这些函数式添加使得应用开发者可以表达他们想做什么,并且没有那么多地表达它如何做。然而,用于许多数据库(例如,SQL数据库)的编程模型与任意函数式视图从根本上不同,因此没有从函数式视图到由许多数据库使用的编程模型的明显映射。
申请人已经识别到:由于以上和以下描述的多个原因,在处理通信网络中的对象和函数、搜索、插入、改变或删除特定数字对象且随后获得它们的目前方式中存在多个问题。鉴于上述内容,可以理解,存在与用于获得并存储数字对象的现有方案关联的大量问题和缺点。
发明内容
已经设计多个新颖解决方案来克服各种问题。公开了用于将面向对象/函数式语言映射到数据库语言的方法和设备,借此,应用开发者可以在保持在面向对象和/或函数式编程模型中,同时仍然访问诸如SQL数据库或NoSQL数据库这样的数据库中的内容,后者使用根本不同的编程模型。
各种实施方式还允许使用代理对象或数据库中的信息对象的代理表示的数据库访问的无缝加速。代理对象/表示可以为缓存数据的形式。应用程序接口(API)可以独立于哪里和何时数据被访问。在一些实施方式中,可以使得数据访问比使用普通数据库访问方案快超过100倍。在其他实施方式中,可以使得数据访问比使用普通数据库方案快超过10000倍。
根据一些实施方式,应用可以从内存储器存储直接获得数字对象,而不是查询可能远程的数据源。在一些实施方式中,同时部署多个内存储器节点。这允许几乎线性地缩放容量,而同时在一个或多个内存储器存储变得不可用时提供冗余。一些实施方式可以在将实际数据仍然保持在现有数据库(例如,SQL数据库)中的同时加速组织的数据库。此外,多个实施方式利用现代编程语言范例,并且可以通过使用基础数据库的定义来自动生成无误代码。
这里所描述的系统和方法的一个技术效果是它们促进较高效的数据库访问,并且可以提高因特网或网络应用的性能和用户体验。这里所描述的系统和方法的另一技术效果在于包括数据库代码的自动化生成的改进的数据库管理。
一些实施方式已经成功部署在从大服务器集群下至具有非常有限的存储和CPU性能的小嵌入式服务器(例如,Raspberry Pi)的范围内的各种平台上。在非常有限资源可用的小服务器部署中,这里所描述的实施方式中的一些可以决定成败。
各种实施方式并不限于因特网或其当前状态。所有方法和设备可以应用于其他数据通信网络中,促进两个或更多个不同位置之间的通信以及单个节点内的内部通信。在一些实施方式中,Java流被映射到SQL命令,使得应用开发者可以在与SQL数据库通信的同时继续使用他们的面向对象/函数式范式。
因此,在一个方面,提供了一种用于将使用通用编程语言描述的操作序列转换成使用数据库访问语言的一个或更多个数据库访问命令的方法。方法包括以下步骤:生成与操作序列中的原始终止操作对应的初始构建器。初始构建器包括与原始终止操作对应的初始数据库访问命令。方法还包括以下步骤:确定是否可将序列中的第一中间操作转换成与初始数据库访问命令和第一中间操作这两者对应的经修改的数据库访问命令。
另外,方法包括以下步骤:如果第一中间操作可转换,则更新初始构建器。该更新包括根据第一中间操作将初始数据库访问命令修改成经修改的数据库访问命令。如果确定第一中间操作不可转换,则方法包括以下步骤:将操作序列分成包括原始终止操作的第一子序列和包括被指定为新终止操作的中间操作以及上游操作(若有的话)的第二子序列。方法可以包括以下步骤:通过从操作序列去除第一中间操作来更新操作序列。
在一些实施方式中,确定一中间操作不可转换,并且方法还包括以下步骤:生成与新终止操作对应的新构建器。新构建器可以包括与新终止操作对应的新初始数据库访问命令。方法还可以包括以下步骤:确定另一中间操作(例如,第二子序列中的中间操作)是否可转换成与新初始数据库访问命令和第二子序列中的中间操作这两者对应的新经修改的数据库访问命令。
如果根据方法确定第二子序列中的中间操作可转换,则方法可以包括以下步骤:通过根据第二子序列中的中间操作将新初始数据库访问命令修改成新经修改的数据库访问命令来更新新构建器。否则,方法可以包括以下步骤:将第二子序列分成包括新终止操作的第一子子序列和包括被指定为另一终止操作的在第二子序列中的中间操作在内的第二子子序列。方法还可以包括以下步骤:将新构建器的输出配置为与初始构建器对应的查询的源。另外或另选地,方法可以包括以下步骤:向数据库发送与新构建器对应的查询。
在一些实施方式中,方法包括以下步骤:确定是否可将操作序列中的第二中间操作转换成与经修改的数据库访问命令和第二中间操作对应的进一步修改的数据库访问命令。如以上所讨论的,经修改的数据库访问命令可以与初始数据库访问命令和第一中间操作对应。方法还可以包括以下步骤:通过根据第二中间操作将经修改的数据库访问命令进一步修改成进一步修改的数据库访问命令来更新初始构建器。
在一些实施方式中,方法包括以下步骤:确定到达序列的源;以及向数据库发送与初始构建器对应的查询。数据库可以包括结构化查询语言(SQL)数据库和/或非结构化查询语言(NoSQL)数据库。初始构建器可以包括插入构建器、更新构建器、删除构建器以及选择构建器中的一个或更多个。在一些实施方式中,第一中间操作包括将第一数据库元素(例如,表、集合、向量、数据结构、阵列、列表等)映射到第二数据库元素(例如,另一表、集合、向量、数据结构、阵列、列表等)。经修改的数据库访问命令可以包括与第一数据库元素和第二数据库元素这两者关联的命令、子命令或类型连接(type join)的命令修改。
第一中间操作可以包括基于条件过滤第一数据库元素,并且经修改的数据库访问命令可以包括基于该条件选择第一数据库元素的记录的子集。在一些实施方式中,第一中间操作包括根据参数更新第一数据库元素;并且经修改的数据库访问命令可以包括根据参数修改第一数据库元素的记录的至少一部分。更新第一数据库元素可以包括向第一数据库元素添加新记录;并且修改第一数据库元素的记录的至少一部分可以包括将新记录插入到第一数据库元素中。要从数据库传送到适于在不使用基于构建器(例如,初始构建器、新构建器等)的数据库访问命令的情况下执行操作序列的处理器的记录的数量大于经由初始数据库访问命令和/或与一个或更多个新创建构建器关联的另外数据库访问命令访问的记录的数量。
在另一方面中,一种计算机系统包括第一处理器和耦合到第一处理器的第一存储器。第一存储器包括指令,这些指令在由包括第一处理器和/或第二处理器的处理单元执行时,将与包括第一存储器和/或第二存储器的存储模块电子通信的处理单元编程以:将使用通用编程语言描述的操作序列转换成使用数据库访问语言的一个或更多个数据库访问命令。为此,该指令将处理单元编程以:生成与操作序列中的原始终止操作对应的初始构建器。初始构建器包括与原始终止操作对应的初始数据库访问命令。指令还将处理单元编程以:确定是否可将序列中的第一中间操作转换成与初始数据库访问命令和第一中间操作这两者对应的经修改的数据库访问命令。
另外,指令将处理单元编程以:如果第一中间操作可转换,则更新初始构建器。为此,指令将处理单元编程以:根据第一中间操作将初始数据库访问命令修改成经修改的数据库访问命令。指令还将处理单元编程以:如果确定第一中间操作不可转换,则将操作序列分成包括原始终止操作的第一子序列和包括被指定为新终止操作的中间操作以及上游操作(若有的话)的第二子序列。在各种实施方式中,指令可以将处理单元编程以执行以上所描述的方法步骤中的一个或更多个。
现在将参照附图更详细地描述各种实施方式。应理解,本发明的不同方面不限于这些实施方式。访问这里的示教的本领域普通技术人员将认识到在如这里所描述的本发明的范围内且本发明可以具有重要实用性所关于的另外实施、修改和实施方式以及其他使用领域。
附图说明
为了促进本发明的更完全理解,现在对附图进行参照,在附图中,类似的元件用类似的附图标记来参照。这些附图不应被解释为限制本发明,而是旨在仅为示例性的。
图1例示了现有技术通信系统,其中对数据源的一系列操作将产生结果。
图2例示了来自图1且经由从数据源开始的流水线从终止操作拉拽数据的现有技术通信系统。
图3例示了根据一个实施方式的对数据源进行的一系列操作的分析,其中,分析在终止操作处开始且朝向数据源前进,并且已经确定了终止操作的一些特性。
图4例示了根据图1但消耗了第二中间操作的一系列操作的分析。
图5例示了根据图1但消耗了第三中间操作且到达数据源的一系列操作的分析。
图6例示了根据各种实施方式的处理的流程图。
图7例示了根据一些实施方式的、中间操作无法由构建器直接消耗的对数据源的一系列操作的分析。
图8例示了终止操作改变数据库的状态的、根据一些实施方式的对数据源的一系列操作的分析。
图9例示了根据一个实施方式的对数据源的一系列操作的分析,其中终止操作改变数据库的状态且第一中间操作被构建器消耗。
图10例示了根据一个实施方式的根据图9对数据源的一系列操作的分析,但其中第二中间操作也被构建器消耗。
图11例示了根据一些实施方式的对数据源的一系列操作的分析,其中需要连接多个表。
图12例示了根据一些实施方式的根据图11的对数据源的一系列操作的分析,但其中第二中间操作已经被构建器消耗。
图13例示了根据一些实施方式的根据图12的对数据源的一系列操作的分析,但其中第三合并中间操作已经被构建器消耗。
图14例示了根据一些实施方式的根据图13的对数据源的一系列操作的分析,但其中第四中间操作已经被构建器消耗且已经到达数据源。
图15例示了根据一些实施方式的、从而终止操作对标量值操作的对数据源的一系列操作的分析。
图16例示了根据一些实施方式的根据图15的对数据源的一系列操作的分析,但其中第一中间操作已经被构建器消耗。
图17例示了根据一些实施方式的根据图16的对数据源的一系列操作的分析,但其中第二中间操作已经被构建器消耗且已经到达数据源。
图18例示了根据各种实施方式的不同构建器的集合。
图19例示了根据一些实施方式的将构建器渲染成SQL代码的方式。
图20示出了根据一些实施方式的表1,该表1例示了可以在从SQL数据库选择项时进行的映射。
图21示出了根据一些实施方式的表2,该表2例示了可以在SQL数据库中插入项时进行的映射。
图22示出了根据一些实施方式的表3,该表3例示了可以在更新SQL数据库中的项时进行的映射。
图23示出了根据一些实施方式的表4,该表4例示了可以在从SQL数据库去除项时进行的映射。
具体实施方式
为了简化以下的描述,本公开在这里一般地称为数据存储,并且将结构化查询语言(SQL)数据库用作示例。数据存储通常为使得能够存储和检索数字对象的应用,这些数字对象包括但不限于SQL数据库、宽列存储、列族、文档存储、密匙/值存储、元组存储、图形数据库、多模型数据库、对象数据库、网格和云数据库、XML数据库、多维数据库、多值数据库、NoSQL数据库、XML文件和/或电子数据表和文件。SQL数据库可以为部分或完全遵守任一种结构化查询语言(SQL)标准的任何数据库。常用的SQL数据库(诸如Apache DerbyTM、AmazonAuroraTM、IBM DB2TM、HadoopTM、SAP Sybase IQTM等)在各种实施方式的范围内。应理解的是,这里所陈述的数据库仅是一些示例,并且各种其他数据库在各种实施方式的范围内。还应注意,各种实施方式不仅限于SQL数据库。另外或另选地,一些实施方式可以连接到多个不同数据源以及访问这种数据源的应用或对于数据源以及应用来实施。编程和数据库领域技术人员通常将理解对于另一种数据库类型可以如何写用于一种数据库类型的代码。
另外或另选地,一些实施方式还可以用于NoSQL数据库类型,包括但不限于:MongoDB、Cassandra、Riak、Oracle NoSQL Database、Neo4J、Hazelcast、MonetDB、Hadoop、Hadoop/HBase。
以下,使用术语“集合”和“子集”。集合是对象的集合。集合可以为空。如果集合A不包含任何对象,则可以说它为空。在下文中,如果B“被包含在”C内部,则集合B是集合C的子集。B和C可以重合。
在下文中,将描绘多个示例。示例用编程语言Java来示出,但各种实施方式并不限于该特定编程语言。实际上,许多其他编程语言(包括但不限于:Ada、BASIC、C、C++、C#、Clojure、D、Erlang、Haskel、Java Script、Kotlin、PHP、Visual BASIC和/或任何其他编程语言)可以用于实施不同实施方式。编程领域技术人员通常将理解可以如何将使用一种编程语言的代码用另一种编程语言来写。
在下文中,将公开从面向对象/函数式视图和/或流水线向SQL转换的多个方法。存在可以示出的示例的大量组合。这里,将仅示出这些可能示例的小的子集。然而,这不应限制各种实施方式的范围。本领域技术人员通常应理解:也可以使用其他示例。
本专利申请与美国第2014/0149365号专利申请公开“Method and Apparatus forHandling Digital Objects in a Communication Network”有关,该申请要求2010年11月4日提交的美国第61/410201号临时专利申请的优先权。此处以引证的方式将该公报和该临时专利申请中的每个的整个公开全文并入。
概述
串行计算机程序可以被视为将产生单个结果的、对源数据的集合的一系列操作。在该操作流水线的起点处,存在源,并且在终点处,存在末端操作。在源与末端操作之间的是一系列中间操作。这些操作例如可以为从流水线排除一些元素的过滤器、将数据从一种类型变换成另一种类型的映射器、用一系列内元素代替各元素的扁平化映射、改变元素顺序的排序器或将多个元素融合成一个单个数据元素的缩小。还可以存在流控制操作,例如仅允许特定量的元素穿过或跳过在使剩余元素穿过之前扔掉特定量的元素的指令的限制。
对于示例性串行计算机程序,参见图1。在执行操作序列的该程序中,从数据库访问数据结构“a”(例如,列表、表、树、集合等)。数据结构“a”的至少一部分被映射到另一数据结构“b”,然后根据一个或更多个准则选择数据结构“b”的记录中的一个或更多个记录。排除不满足准则的记录。可以对所选择或所过滤的记录执行另外的操作。这些另外的操作可以包括一个或更多个另外的过滤/选择操作、一个或更多个映射操作和/或一个或更多个修改操作。在完成操作序列之后,在终止操作中选择一个或更多个记录。
在程序被调用时,首先调入末端操作。该末端操作请求来自之前操作的元素,并且之前操作请求来自其前任的元素,以此类推,直到到达源为止。然后,通过流水线回传元素,这潜在地修改针对所通过的各操作的数据。末端操作继续要求元素,直到它具有足够的元素来能够终止为止,或直到源已经彻底变空为止。
对于信息元素的示例性流动,参见图2。在访问数据库结构(例如,列表、集合、表、树等)之后,可以执行一个或更多个映射操作、一个或更多个过滤操作和/或一个或更多个修改(例如,更新、添加、和/或删除操作)。图2示出了后面是过滤操作的映射操作,但这仅是例示性的。一个或更多个过滤操作后面可以是一个或更多个映射操作和/或一个或更多个更新操作,并且映射、过滤以及更新操作可以一个在另一个后面。
流水线分析
在下文中,描述了根据一些实施方式的处理(还被称为算法)。处理描述了一种在执行之前解析给定的操作集合以在运行程序之前确定完成程序将需要哪个数据的方法。这使得可以将外部数据(例如在远程主机上的数据库)用作流水线的源。因为可以仅需要发送相关的数据,所以这可以显著减少从数据库向应用发送数据所花费的时间。
参照图3,在一个实施方式中,在程序被执行时,算法将开始着眼于终止操作,以确定使其终止所需的数据。存在我们可以从此得到的两个变量。第一个是数据的类型,并且另一个是它是否是期望的一个或许多实例。给定这两个变量,我们创建用于该特定终止运算符的构建器对象。在参照图3例示的示例中,选择数据库元素“b”的一个记录。通常,数据库元素可以为任何结构,诸如表、阵列、列表、向量、堆、树等。终止操作被转换成数据库命令“select(b);limit(1)”,并且这些命令被包括在所选类型的构建器对象中。算法然后转到之前的操作。
具体地,参照图3,在第一步骤中,选择表“a”(其中,表“a”例如具有类型A)的多个行。然后,在第二步骤中,将类型A的所有实例映射到表“b”中的不同类型B,使得将存在类型B的实例的对应流。在映射处理中,字段B.id依赖于对应A实例的零或更多个场。在一些实施方式中,映射还可以依赖于其他外部参数。在第三步骤中,仅向下游传播具有大于100的id字段的这些B实例。在最后一个步骤中,我们选择在过滤中留下的任选(例如,第一个、最后一个、随机选择的等)B实例,并且该B是整个操作的结果。
这些步骤可以被如下描述为命令式程序:
现在,如图4描绘的,在分析中间操作时,算法尝试使得构建器消耗该操作。如果关于程序在做什么存在足够的数据可用来完全代替它,则从流水线去除该操作并由构建器消耗它。在前面的示例中,从数据库元素“b”的记录选择一个记录限于具有小于100的“id”值的那些记录。该操作被转换成另一数据库命令(实际上充当用于另一命令的条件)“Where(id,LESS THAN,100).”。
现在,如图5描绘的,如果操作从一个数据类型映射到另一个,则用组合类型的另一构建器代替该构建器。这里,表“a”如上所述的被映射到表“b”。该映射可以被转换成数据库命令(该命令可以与另一数据库命令集成为一体)“Join(a,b)on(a.bColumn,b.id)”。在到达流水线的源时,构建器可以被完成并用于产生数据库查询。为此,所生成的所有数据库命令被包括在该构建器中。查询的结果然后可以向下游发送到剩余的运算符,或者在所有操作被消耗时直接发送到终止操作。
在传统的程序化的实现方案中,从数据库访问整个所需的数据库元素,然后由处理器执行所指定的操作。在前面的示例中,在传统系统中,将访问表“a”,并且将由通常为远程处理器的处理器执行映射、过滤以及选择操作。表“a”可以包括一百万个记录,并且仅这些记录中的一百个可以具有小于100的“id”值。然而,因为过滤由处理器来执行,所以所有记录可以在传统系统中发送到处理器。
在这里所描述的各种实施方式中,构造构建器,该构建器包括与如上所述分析的操作对应的数据库命令。这些数据库命令查询数据库并仅访问一个或更多个数据库元素的完整记录中的由终止操作需要的那些部分。通常,该数量小于由所指定操作处理的一个或更多个数据库元素中的记录的总数。
在前面的示例中,终止操作仅需要“id”小于100的一个记录,并且仅一个这种记录可以从数据库发送到处理器以供其随后使用。注意,使用图3至图5所描述的构建器访问的数据流较高效,因为凭借该数据流,处理器不必如执行命令式算法的处理器将需要的那样评价所有A和B。如果第一B通过了过滤器,则仅一个A总是从数据库读取。在其他情况下,可以发送超过一个记录,但通常,通过使用构建器,该构建器包括与已分析的在程序中指定的操作对应的数据库命令,可以使得需要在处理器与数据库之间来回交换的记录的数量最小化。凭借根据各实施方式生成的流,对象被按需拉拽到流水线中。
如图6所描绘的,在转换处理中,接收与一个或更多个数据库元素关联的操作序列(还被称为流水线),其中,序列使用编程语言来描述。编程语言可以为Ada、BASIC、C、C++、C#、Clojure、D、Erlang、Haskel、Java Script、Kotlin、PHP、Visual BASIC和/或任何其他编程语言。识别流水线的终止操作,并且分析由终止操作执行的动作。该终止操作还被称为原始终止操作。
如果动作被识别为一个或更多个新记录可以被创建并添加到一个或更多个数据库元素的插入操作,则创建类型“插入(insert)”的构建器。如果动作被识别为可以修改一个或更多个数据库元素的一个或更多个记录的值的更新操作,则创建类型“更新(update)”的构建器。如果动作被识别为可以删除一个或更多个数据库元素的一个或更多个记录的删除操作,则创建类型“删除(delete)”的构建器。否则,创建类型“选择”的构建器。对应地,在构建器中包括类型“插入”、“更新”、“删除”或“选择”的数据库访问命令。数据库访问命令通常依赖于要访问的数据库的类型。数据库可以为SQL数据库(诸如Apache DerbyTM、AmazonAuroraTM、IBM DB2TM、HadoopTM、SAP Sybase IQTM等)或NoSQL数据库。
然后分析终止操作之前的操作(其中,这种之前操作还可以被称为中间操作)。中间操作的常见类型包括过滤操作、映射操作以及修改一个或更多个数据库元素的一个或更多个记录的值的操作。过滤操作可以包括基于条件的成败选择一个或更多个记录,条件诸如将记录的相应特定分量的值与指定值进行比较。映射操作通常包括将一种类型的记录或一种类型的记录的部分指定为另一种类型的记录。修改一个或更多个记录的值的操作可以包括增大或减小值、设置或重设值等。
如果可以分析在之前操作中指定的动作,则该操作被识别为可消耗。该动作然后被转换成对数据库命令的修改,该数据库命令诸如与终止操作对应的初始生成的数据库访问命令和/或根据一个或更多个中间操作修改了的命令。修改可以充当由另一命令所用的条件。构建器被修改为包括修改或更新后的数据库访问命令,并且可以从流水线去除该之前操作。其后,如上所述的处理下一之前操作,直到到达数据库源为止。此时,使用在构建器中包括的更新后数据库访问命令组建数据库查询。因为常使用SQL数据库,所以查询通常为SQL查询,但还可以为NoSQL查询。
在一些情况下,由之前操作(例如,中间操作)执行的动作不可分析。在这种情况下,该操作被认为是新终止操作,并且该操作的结果被当作针对以前被分析且被构造了构建器的下游操作的新数据源。初始创建的构建器将通常为原始终止操作和所有已去除的中间操作的合成体。对于新终止操作生成类型选择(Select)的新构建器,并且重复以上所描述的处理。
使用在初始创建的构建器中包括的数据库命令来组建数据库查询,并且该查询应用于新数据源,该新数据源将为新构建器的输出。使用在新构建器中包括的数据库命令组建的数据库查询可以提供给数据库。通常,该查询的结果可以提供给流水线中的第一终止操作,该操作可以为新创建的终止操作或原始终止操作。如果终止操作是新创建的终止操作,则基于下一构建器的另一数据库查询应用于该终止操作,并且该查询的结果发送到流水线中的下一终止操作,该下一终止操作可以为另一新创建的终止操作或原始终止操作。
如图7所描绘的,如果存在无法消耗的中间操作,则采取另一动作流。如果中间操作因为未识别实现方案而无法被消耗,则流水线将在此时被割裂成两部分,其中,中间操作现在被认为是用于剩余流水线的终止操作,并且来自该操作的结果被认为是已经被解析部分的源。类型Select的构建器用于实现方案未被识别的新创建终止操作。在到达源时,当前构建器将被解析成SQL并发送到数据库。然后将如上所述的由流的剩余部分解析结果。
如图8和图9所描绘的,如果中间操作改变通过它的实体的状态,则这些变化必须也被反映回数据库。在识别了改变的终止动作时,将创建特殊更新构建器。在到达之前的中间操作时,它被识别为改变通过它的元素的状态的操作,这将各项的价格(price)提高20。因为终止动作可以消耗改变操作,所以其可以从流安全地去除。如图9所描绘的,下一中间操作是仅使价格低于100的项通过的过滤器。该下一中间操作也可以由终止动作消耗,因此可以从流去除。
如图10所描绘的,在到达流水线的源时,事务将被建立并发送到数据库。此时,因为更新操作不需要实际看到已改变的元素但可以在早期终止,所以应用不必等待响应。假定表“项(item)”在处理器的本地存储器中是非(NOT)。在不具有这里所描述的构建器的传统系统中,将必要的是制作整个表“item”的本地副本,选择性地更新具有低于100的价格的项的价格,然后将整个本地副本传送回数据库。
假设表“item”具有1000个记录,但这些项中的仅50个具有低于100的价格。通过以下处理可以使得上述传送高效:仅将具有低于100的价格的那50项复制到处理器的本地存储器,更新这些价格,然后仅将更新后的50项写回到数据库。“更新”构建器使用具有INCRESE的设置数据库命令,并且甚至避免初始具有低于100的价格的50项的来回传送。由此可见,根据各种实施方式的构建器可以使存储数据库的服务器与消耗数据的客户端处理器之间的数据传送最小化甚至完全消除。由此可见,在各种实施方式中,客户端流水线可以部分或完全在服务器端操作,这使客户端流水线与服务器端之间的数据传送最小化,这例如可以通过以下中的一个或更多个来提高整个系统的性能:使处理时间最小化,使所需的存储器和处理资源方面的处理成本最小化,和/或使在处理期间消耗的能量/功率最小化。
如可以在图11中看到的,在较高级用户的情况下,对数据库的改变可能跨越多个表。在该示例中,程序滤除具有超过1000的id的用户,找到这些用户所拥有的项,并且如果项价格低于100,则将其提高20。算法的第一方面与之前示例中大体相同。终止操作被识别为更新,该操作前的操作被识别为改变操作,并且改变操作前的操作被识别为过滤。在已经解析了这三个操作时,构建器可以看起来像图12中的构建器。
如可以在图13中看到的,在到达下一中间操作时,它被识别为将需要消耗连接(join)语句的实体图中的路径。它的签名与“user”和“id”列上的“item”列之间的连接匹配,因此用来自最后一个构建器的细节在该已连接的表上构造新构建器。在解析流的剩余部分时,期望的类型也被设置为“用户(user)”,而不是“item”。
如可以在图14中看到的,下一中间操作是另一过滤器,但这次是在用户表上。因为我们的构建器当前是用户与项表之间的连接构建器,所以这不是问题,而是可以被安全地消耗。现在到达流的源,并且构建器可以被解析成SQL,以发送到数据库。
参照图15,正如可以选择整行,特定列也可以用于流水线中。如果终止操作未消耗全部实体,而是消耗单值,则创建主选择终止器。根据图16,之前中间操作是仅包括90与110之间的值的过滤器。该操作可以被构建器消耗,因此其从流水线去除并将其添加到构建器。
根据图17,在解析中间操作mapToInt时,数据库实体“item”被识别为输入类型,并且方法getCost被识别为成本列上的得到器。因此,用用于项表但具有仅加载成本列的另外修改器的的构建器代替构建器。在到达源时,构建器将被建立成SQL语句并发送到数据库。结果在被发送到终止操作时将被加载为一系列主(primitive)整数值。
构建器
算法的第一步骤是确定要使用哪一个构建器来表示要执行的动作。在一些实施方式中,存在四种不同类型的构建器。插入(insert)、更新(update)、删除(delete)以及选择(select)构建器。前三种构建器使用被传递到终止动作的对象来识别。如果该对象是更新对象,则这意味着它是将创建的更新构建器(UpdateBuilder)。如果对象被传递到不是插入、更新或删除的终止动作,则将创建选择构建器(SelectBuilder)。图18例示了映射如何工作。
各构建器实施允许多个不同修改器应用于它们的接口。各构建器还具有将用于从终止操作期望的数据库结果产生对象的结果类型。可用的修改器是这些:On、Set、Where、Column、Skip、Limit。
On修改器从被假设对于要解决的连接具有相同值的两个不同实体取两个字段。这通常在使用“map”或“flatMap”中间操作在外键上合并两个表时使用。Set修改器取字段、修改运算符以及常数值或表达式。这用于插入和更新语句这两者中来设置受影响行的新值。
Where修改器取字段、比较运算符以及常数值或表达式。这用于指定哪些元素应受语句影响且将导致最后SQL串中的WHERE语句。Column修改器取单个字段。指定特定列应包括在“选择”操作的结果中。这对于减少通过网络发送的数据量是有用的。如果未指定Column修改器,则将发送每一个列值。Skip修改器取用于应忽视多少元素的的数量。Limit修改器取用于结果中应至多包括多少元素的的数量。
将查询模型渲染成SQL
在到达流水线的源时,构建器必须在被发送到数据库管理器之前解析为可执行SQL串。存在构建器接口的多个实现方案,一个用于选择操作,一个用于更新操作,一个用于删除操作,并且一个用于插入操作。构建器的实现方案确定应如何解释附着到构建器的不同修改器。例如,如果如图19所描绘的使用MySQL数据库,则来自上述“合并多个表”示例的构建器将产生以下SQL串。
其他流水线分析方法
在其他实施方式中,整个表被选择为源。在又一些实施方式中,使用较简单的映射器,在该映射器中,分析由终止操作来开始,但流水线从源向下朝向终止操作来检查。该分析允许紧跟在源之后的filter()操作用作渲染SQL where语句时的输入,其中,两个或更多个filter()谓词将对应于与SQL“AND”语句分离的SQL布尔表达式。
示例
在下文中,将示出可以如何根据多个实施方式将使用Java 8TM的流API作为函数式程序流水线分析并解析为SQL。首先是如何结构化示例数据库的描述,然后跟着具有数字代码示例的表。
示例性表“item”具有列;是主键的id(整数)、对表“user”的列“id”和价格(整数)是外键的用户(整数)。
示例性表“user”具有列;是主键的id(整数)、姓名(可变长字符串)以及年龄(整数)。
在下文中,变量“user”与用户表中的所有用户的抽象对应,并且变量“item”与项表中的所有项的抽象对应。它们都实施管理员接口。
从SQL数据库选择项
图20中的表1示出了:根据一些实施方式,在从SQL数据库选择项时可以进行以下映射。在示例中,使用通配符(*),但在真正实现方案中,相反应使用显性列名称。存在合并的多个变体,并且它们可以依赖于什么最高效来选择。
注意在Item#16上:因为我们可以检索满足流水线要求的任意行,所以可以安全去除sort()/ORDER BY操作。如果存在极限大于或等于1的limit()操作,则也可以去除它们。
注意在Item#21上:对于支持MULTISET命令的数据库,存在对于各项不重复用户数据列的较高效映射。SELECT user.*,MULTISET(SELECT item.*FROM item WHEREitem.user=user.id)AS item FROM user`user`.`id`>4.。
在表1所示的示例中,通常由传统系统实施的一个选项是访问来自数据库的整个数据流,然后对数据流执行一个或更多个操作。这在数据传送方面(所需带宽、访问延迟等)可能是低效的。另选地,根据这里所描述的各种实施方式,SQL查询通过以下方式来形成:分析操作,使得可以使传送到远程数据库的数据量和从远程数据库传送的数据量最小化。
这可以允许开发者仅使用一种编程语言(例如,JavaTM、C++等)工作,并且仍然受益于服务器端操作,这些服务器端操作否则将需要开发者用两种语言(例如,编程语言和数据库命令语言)工作。另一优点是:因为流可以独立于源类型(例如,数据库)来表达,所以可以从数据库或某一其他优化的储存器(诸如内存储器存储)二者之一推入数据。开发者可以确切地使用同一流句法,但构建器可以将流渲染成SQL或NoSQL(例如,直接从存储器检索和/或更新数据的指令)。
在SQL数据库中创建项
图21中的表2示出了:根据一些实施方式,在创建SQL数据库中的项时可以进行以下映射。注意在Item#103上:createNewUsers()方法创建新用户的集合。在一些实施方式中,多个插入物可以一起分组到单个插入语句中,以提高数据库性能。如果存在要插入到数据库中的许多对象,则可以达到SQL命令的最大长度。在这种情况下,可以在复合事务内使用多个插入物。当在单个事务中进行插入时,可以丢弃源的任意排序。
更新SQL数据库中的项
图22中的表3示出了:根据一些实施方式,在更新SQL数据库中的项时可以进行以下映射。
从SQL数据库删除项
图23中的表4示出了:根据一些实施方式,在从SQL数据库删除项时可以进行以下映射。
数据库域参数
数据库域参数(下文中为DDP)包括与数据库及其结构有关的一个或多个参数。DDP包括但不限于:数据库名、模式名、目录名、SID、表(名称、排序规则)、视图(名称、排序规则)、列(名称、序数位置、类型、可空、排序规则)、索引(名称、序数位置、列列表)、外键(名称、序数位置、外键表、外键列、列)。
在下文中,将描述操作及其相关数据库域参数的确定。在一些实施方式中,有时需要使操作(例如过滤器中的谓词)与一个或多个DDP有关。一些语言支持这种关系,而一些语言不支持。例如,Java不提供从对象的取得器(例如,user.getId())到实际字段(例如,整数id(int id))的映射。然而,根据各种实施方式,如果该映射不直接可用,则存在获得该映射的许多方式。
反向编译:可以反向编译可以由流使用的谓词、取得器、设置器、找到器、比较器以及其他对象,以确定一个或多个DDP。例如,可以反向编译谓词e(User u)->u.getId(),以揭示使用实体用户(这暗示表“user”的使用),并且在用户对象内使用字段id(这暗示将列“id”用于表“user”)。在一些实施方式中,因为结果对于同一输入对象将总是相同,所以这种反向编译仅必须发生一次。
方法引用:方法引用可以用作可以由流使用的谓词、取得器、设置器、找到器、比较器以及其他对象。方法引用在应用的生命周期期间保持相同,并且可以使用恒等函数检查来检测这种引用(例如,如果对象具有相同引用或“地址”,那么实际上,方法相同)。在一些实施方式中,在运行时间之前(例如,在bean生成和/或编译期间)分析这种潜在引用,借此,存储它们对应的DDP,以进行稍后的检索。
反射:可以使用反射来分析可以由流使用的谓词、取得器、设置器、找到器、比较器以及其他对象。在一些实施方式中,反射用于从这些对象提取数据库域参数。
支持字段:可以为可以由流使用的谓词、取得器、设置器、找到器、比较器以及其他对象引入构建器或预定对象。这些构建器可以通过被包括在用于临时申请本身的beansSPE-003图中或通过被包括在代码中的别处来与beans有关。在一些实施方式中,一些构建器和/或预定对象可以承载关于它们与一个或多个数据库域参数的关系的一个或多个信息元素。
注释:在一些实施方式中,Beans例如使用JPA标准来注释,以指示一个或多个DDP。在一些实施方式中,使用JPA标准注释:@实体、@列、@表、@Id(@Entity,@Column,@Table,@Id)。存在其他保持标准,并且本领域技术人员将容易地认识到:也可以使用其他对应或等效的注释。
提取DDP的不同方法的组合:在一些实施方式中,组合获得DDP的两个或更多个手段来检索DDP。可以使用动作的任意组合:反向编译、方法引用、反射、支持字段以及注释。在一个实施方式中,如果sort()方法的比较器自变量是由标准库函数Comparator.comparing()返回的比较器,则检查该自变量。已知该对象,并且其参数可以使用反射来分析。使用方法引用一致性检查,可以检索字段名,并且可以检索对象字段。来自该字段的注释最终可以揭示DDP表和列。应注意:在该子句中列出的动作的组合可以被包括在复合组合中零次或更多次。作为示例,复合组合可以由动作反射(Reflection)、反向编译(De-compilation)、反射(Reflection)、反射(Reflection)以及方法引用(MethodReferences)构成。
组合变体(Combinatorial Variants):应注意,流操作出现在对于各种实施方式示出的示例中的顺序是示例性的。存在各种实施方式可以处理的许多其他有效组合。实际上,组合变体快速地接近无限,并且因为如此,这里无法示出所有组合。
其他方面
优化:对于一些类型的终止操作,可以优化掉流水线的一个或多个步骤。例如,可以示出:流水线“users.stream().filter(u->u.getId()>4).map().sorted().count()”等效于流水线“users.stream().filter(u->u.getId()>4).count()”。因为中间操作(map()和count())不影响将由终止操作计数的项的数量。由此,可以将第一流水线转换成以下SQL代码“从id>3的用户选择计数(*)”。
假使在不影响项的数量的任何中间操作与终止操作之间不存在其他操作,则可以减少这些中间操作。
并行性:目前IT行业内的趋势之一是线程和/或CPU核心的数量越来越多,而不是各线程/核心的性能越来越高。流API允许查询的无缝并行化。
根据一个实施方式,ResultSet(或等同物)由单个线程读取,但然后被送到并行流中,到达多个线程。这将在从数据库读取的时间与处理流元素花费的时间相比较少时导致更佳的性能。
在另一实施方式中,单个查询被分成转而返回来自数据库的多个结果集的多个查询。这些结果集(或等同物)随后由流内的多个线程处理。在一些实施方式中,向初始流提供并行划分键函数,该键函数表示要如何使流并行化。在存在用数字表示的至少一个列(但优选地不是必须为主键)的又一个实施方式中,结果集使用模函数stream#=field%(线程的数量)来划分。
例如,如果存在具有随着用户插入在数据库中而对于各用户自动设置为1、2、3...N的auto_increment字段id的表“user”,那么将存在具有id 1、2、3、4的N个用户。
调入:“user.stream().parallel().forEach(doOperation())”可以被渲染成多个SQL子查询:可以被渲染成多个SQL子查询:“start transaction;select*from userwhere(id%N=0);select*from user where(id%N=1);…;select*from user where(id%N=(N-1));commit;
其中所选的并行性等级为N(例如,存在N个执行线程)。随后将由单独线程处理各子查询ResultSet,其中,单独N个线程被组合成聚合并行流。在一些实施方式中,所组合的流由各与其关联的子查询对应的多个子流和/或分离器(Spliterator)组成。在一些实施方式中,子查询如上所示的在同一事务中执行,这保证表的一致并行视图。在另一实施方式中,可以为了性能跳过并交换事务。
在较复杂的示例中,流水线“user.stream().parallel().filter(User.ID.greaterThen(10)).forEach(doOperation())”的调用可以被渲染到多个SQL子查询:对于线程1、2...N,“start transaction;select*from user where(id>10)AND(id%N=0);select*from user where(id>10)AND(id%N=1);select*from user where(id>10)AND(id%N=(N-1));commit;”。本领域技术人员通常将理解:并行化可以与其他方面且与不同实施方式组合。
缓存:如在此处以引证的方式全文并入的US 2014/0149365所描述的,可以检测数据库的变化。根据一些实施方式,这种变化事件可以被使得可用于使用订阅的应用和/或收听器。在一些实施方式中,数据库的变化使用标准Java Streams 8来使得可用。多个实施方式决不限于Java。实际上,本领域技术人员可以使用其他语言来实施等效解决方案。
在一个实施方式中,可以使得对数据库的改变可用于如这里所示的应用:
这可以产生在由任何应用更新数据库时且在用户id大于4的情况下恒定更新的并发图。在不同实施方式中,如下示出了可以实施收听器的方案:
Consumer<User>listener=System.out::println;//示例性听众
users.subscribe().forEach(listener);
可回收流:在SQL编程模型中,可以使用准备语句,如果准备语句被使用多次,则它们是具有更佳性能的可重用语句。它们仅需要被编译一次,然后它们可以被调用多次。
在一些实施方式中,流可以被重复使用(或重复利用)多次。在一些实施方式中,状态完全中间操作在流的各再进入时用新状态完全中间操作代替,而无状态中间操作可以被保持并反复应用。这意味着流水线的分析必须仅进行一次。这可以提高性能。
在另一实施方式中,构建器用于将流流水线建立一次且对于包括末端操作的所有操作建立。在调用构建器的建立方法之后和/或在调用末端操作时,返回可以重复调用同一流水线的供应器,这在重复调用同一流水线时潜在地提高性能。
在一些实施方式中,可重复利用流可以采取以下外型:
清楚的是,存在构造这里所描述的装置和/或系统部件、接口、通信链路以及方法的许多方式。所公开的方法、装置以及系统可以部署在方便的处理器平台上,包括网络服务器、个人和便携计算机、和/或其他处理平台。其他平台可以被预期为处理能力改善,包括个人数字助理、计算机化表、蜂窝电话和/或其他便携装置。所公开的方法和系统可以与已知的网络管理系统和方法集成。所公开的方法和系统可以作为SNMP代理操作,并且可以用运行适型管理平台的远程机器的IP地址来构造。因此,所公开方法和系统的范围不受这里给出的示例限制。
这里所描述的方法、装置以及系统不限于特定硬件或软件构造,并且可以在许多计算或处理环境中找到应用。方法、装置以及系统可以在硬件或软件或硬件和软件的组合中实施。方法、装置以及系统可以在一个或更多个计算机程序中实施,其中,计算机程序可以被理解为包括一个或更多个处理器可执行指令。计算机程序可以在一个或更多个可编程处理元件或机器上执行,并且可以存储在可由处理器读取的一个或更多个存储介质(包括易失性和非易失性存储器和/或存储元件)、一个或更多个输入装置、和/或一个或更多个输出装置上。由此,处理元件/机器可以访问一个或更多个输入装置来获得输入数据,并且可以访问一个或更多个输出装置来传输输出数据。输入和/或输出装置可以包括以下内容中的一个或更多个:随机存取存储器(RAM)、独立磁盘冗余阵列(RAID)、软盘驱动器、CD、DVD、磁盘、内置硬盘、外接硬盘、记忆棒、或能够由如这里所提供的处理元件访问的其他存储装置,其中,这种前面提及的示例不是穷尽的,并且是为了例示而不是限制。
计算机程序可以使用一个或更多个高级过程式或面向对象编程语言来实施,以与计算机系统通信;然而,程序可以用汇编或机器语言来实施(如果期望)。可以编译或解释语言。
由此,如这里所提供的,处理器和/或处理元件可以嵌入在组网环境中独立或一起操作的一个或更多个装置中,在组网环境中,网络例如可以包括局域网(LAN)、广域网(WAN),和/或可以包括内联网和/或因特网和/或另一网络。网络可以为有线的或无线的或其组合,并且可以使用一个或更多个通信协议来促进不同处理器/处理元件之间的通信。处理器可以被构造为分布式处理,并且在一些实施方式中可以按需使用客户-服务器模型。因此,方法、装置以及系统可以使用多个处理器和/或处理器装置,并且处理器/处理元件指令可以在这种单个或多个处理器/装置/处理元件中划分。
与处理器/处理元件集成的装置或计算机系统例如可以包括个人计算机、工作站(例如,戴尔、惠普)、个人数字助理(PDA)、手持装置(诸如蜂窝电话)、膝上型电脑、掌上电脑、或能够与可以如这里所提供的操作的处理器集成的另一装置。因此,这里所提供的装置不是穷尽的,并且是为了例示且不限制而提供。
对“处理器”或“处理元件”、“所述处理器”以及“所述处理元件”的引用可以被理解为包括可以在独立和/或分布式环境中通信且由此可以被构造为经由有线或无线通信与其他处理器通信的一个或更多个微处理器,其中,这种一个或更多个处理器可以被构造为在可以为类似或不同装置的一个或更多个处理器/处理元件控制的装置上操作。由此,这种“微处理器”、“处理器”或“处理元件”术语的使用还可以被理解为包括中央处理单元、算术逻辑单元、专用集成电路(IC)、和/或任务引擎,这种示例为了例示且不限制而提供。
此外,除非另外指定,否则对存储器的引用可以包括一个或更多个处理器可读且可访问存储元件和/或部件,这些元件和/或部件可以在处理器控制装置之内,在处理器控制装置之外,和/或可以使用各种通信协议经由有线或无线网络访问,并且除非另外指定,可以被设置为包括外部和内部存储装置的组合,其中,这种存储器可以连续的和/或基于应用分区。例如,存储器可以为闪存盘、计算机盘、CD/DVD、分布式存储器等。对结构的引用包括链路、队列、曲线图、树,并且这种结构为了例示且不限制而提供。这里对指令或可执行指令的引用根据上述内容可以被理解为包括可编程硬件。
虽然已经关于方法和系统的特定实施方式描述了方法和系统,但它们不如此受限。由此可见,许多修改例和变型例可以鉴于上述示教而变得显而易见。本领域技术人员可以进行这里所描述并例示的零件的细节、材料以及设置的许多另外变化。因此,将理解,这里所提供的方法、装置以及系统不限于这里所公开的实施方式,可以包括除专门描述之外的实践,并且应以法律允许的最宽范围来解释。
Claims (17)
1.一种用于将使用通用编程语言描述的操作序列转换成用数据库访问语言写的数据库访问命令的方法,所述方法包括以下步骤:
生成与所述操作序列中的原始终止操作对应的初始构建器,所述初始构建器包括与所述原始终止操作对应的初始数据库访问命令;
确定第一中间操作是否能够转换成与所述初始数据库访问命令和所述第一中间操作对应的经修改的数据库访问命令,其中,能够转换包括分析所述第一中间操作以确定是否所述初始构建器消耗该第一中间操作;
如果所述第一中间操作能够转换,则通过根据所述第一中间操作将所述初始数据库访问命令修改成经修改的数据库访问命令来更新所述初始构建器;以及
否则,将所述操作序列划分成包括所述原始终止操作的第一子序列和包括被指定为新终止操作的所述第一中间操作的第二子序列,其中,所述划分是使用划分函数实现的;
其中,确定所述第二子序列中的中间操作是否能够转换成与新初始数据库访问命令和所述第二子序列中的所述中间操作对应的新经修改的数据库访问命令;并且如果所述第二子序列中的所述中间操作能够转换,则通过根据所述第二子序列中的所述中间操作将所述新初始数据库访问命令修改成新经修改的数据库访问命令来更新新构建器。
2.根据权利要求1所述的方法,所述方法还包括以下步骤:
通过从所述操作序列去除所述第一中间操作来更新所述操作序列。
3.根据权利要求1所述的方法,其中,所述第一中间操作不能够转换,所述方法还包括以下步骤:
生成与所述新终止操作对应的新构建器,所述新构建器包括与所述新终止操作对应的新初始数据库访问命令;以及
否则,将所述第二子序列划分成包括所述新终止操作的第一子子序列和包括被指定为另一终止操作的所述第二子序列中的所述中间操作在内的第二子子序列。
4.根据权利要求3所述的方法,所述方法还包括以下步骤:
将所述新构建器的输出配置为与所述初始构建器对应的查询的源。
5.根据权利要求1所述的方法,所述方法还包括以下步骤:
确定第二中间操作能够转换成与所述经修改的数据库访问命令和所述第二中间操作对应的进一步修改的数据库访问命令;以及
通过根据所述第二中间操作将所述经修改的数据库访问命令进一步修改成进一步修改的数据库访问命令来更新所述初始构建器。
6.根据权利要求1所述的方法,所述方法还包括以下步骤:
确定到达所述操作序列的源;以及
向数据库发送与所述初始构建器对应的查询。
7.根据权利要求1所述的方法,其中,
所述第一中间操作包括将第一数据库元素映射到第二数据库元素;并且
所述经修改的数据库访问命令包括与所述第一数据库元素和所述第二数据库元素这两者关联的连接。
8.根据权利要求1所述的方法,其中,
所述第一中间操作包括以下各项中的一项或多项:
基于条件过滤第一数据库元素;和
根据参数更新第一数据库元素,如果需要则该更新包括向所述第一数据库元素添加新记录;并且
所述经修改的数据库访问命令包括以下各项中的一项或多项:
基于所述条件选择所述第一数据库元素的记录的子集;和
根据所述参数修改所述第一数据库元素的记录的至少一部分,如果需要则该修改包括向所述第一数据库元素插入所述新记录。
9.根据权利要求1所述的方法,其中,
要从数据库传送到执行所述操作序列的处理器的记录的数量大于经由所述初始数据库访问命令访问的记录的数量。
10.一种用于将使用通用编程语言描述的操作序列转换成使用数据库访问语言写的数据库访问命令的系统,该系统包括:
第一处理器;和
第一存储器,该第一存储器与该第一处理器通信,所述第一存储器包括指令,当所述指令在由包括所述第一处理器和第二处理器中的至少一个的与包括所述第一存储器和第二存储器中的至少一个的存储模块通信的处理单元执行时,将所述处理单元编程以:
生成与所述操作序列中的原始终止操作对应的初始构建器,所述初始构建器包括与所述原始终止操作对应的初始数据库访问命令;
确定第一中间操作是否能够转换成与所述初始数据库访问命令和所述第一中间操作对应的经修改的数据库访问命令其中,能够转换包括分析所述第一中间操作以确定是否所述初始构建器消耗该第一中间操作;
如果确定所述第一中间操作能够转换,则通过根据所述第一中间操作将所述初始数据库访问命令修改成经修改的数据库访问命令来更新所述初始构建器;并且
否则,将所述操作序列划分成包括所述原始终止操作的第一子序列和包括被指定为新终止操作的所述第一中间操作的第二子序列,其中,所述划分是使用划分函数实现的;以及
其中,确定所述第二子序列中的中间操作是否能够转换成与新初始数据库访问命令和所述第二子序列中的所述中间操作对应的新经修改的数据库访问命令;并且如果所述第二子序列中的所述中间操作能够转换,则通过根据所述第二子序列中的所述中间操作将所述新初始数据库访问命令修改成新经修改的数据库访问命令来更新新构建器。
11.根据权利要求10所述的系统,其中,所述指令还将所述处理单元编程以:
通过从所述操作序列去除所述第一中间操作来更新所述操作序列。
12.根据权利要求10所述的系统,其中,所述第一中间操作不能够转换,并且所述指令还将所述处理单元编程以:
生成与所述新终止操作对应的新构建器,所述新构建器包括与所述新终止操作对应的新初始数据库访问命令;并且
否则,将所述第二子序列划分成包括所述新终止操作的第一子子序列和包括被指定为另一终止操作的、所述第二子序列中的所述中间操作的第二子子序列。
13.根据权利要求12所述的系统,其中,所述指令还将所述处理单元编程以:
将所述新构建器的输出配置为与所述初始构建器对应的查询的源。
14.根据权利要求10所述的系统,其中,所述指令还将所述处理单元编程以:
确定第二中间操作能够转换成与所述经修改的数据库访问命令和所述第二中间操作对应的进一步修改的数据库访问命令;
通过根据所述第二中间操作将所述经修改的数据库访问命令进一步修改成进一步修改的数据库访问命令来更新所述初始构建器;
确定到达所述操作序列的源;并且
向数据库发送与所述初始构建器对应的查询。
15.根据权利要求10所述的系统,其中,
所述第一中间操作包括以下各项中的一项或多项:
将第一数据库元素映射到第二数据库元素;
基于条件过滤第一数据库元素;以及
根据参数更新第一数据库元素;并且
所述经修改的数据库访问命令包括以下各项中的一项或多项:
与所述第一数据库元素和所述第二数据库元素这两者关联的连接;
基于所述条件选择所述第一数据库元素的记录的子集;以及
根据所述参数修改所述第一数据库元素的记录的至少一部分。
16.根据权利要求15所述的系统,其中,
为了更新所述第一数据库元素,所述指令将所述处理单元编程以向所述第一数据库元素添加新记录;并且
为了修改所述第一数据库元素的所述记录的至少一部分,所述指令将所述处理单元编程以将所述新记录插入到所述第一数据库元素中。
17.根据权利要求10所述的系统,其中,要从数据库传送到执行所述操作序列的处理器的记录的数量大于经由所述初始数据库访问命令访问的记录的数量。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201562261978P | 2015-12-02 | 2015-12-02 | |
US62/261,978 | 2015-12-02 | ||
PCT/US2016/064607 WO2017096155A1 (en) | 2015-12-02 | 2016-12-02 | Methods and systems for mapping object oriented/functional languages to database languages |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108431766A CN108431766A (zh) | 2018-08-21 |
CN108431766B true CN108431766B (zh) | 2022-05-17 |
Family
ID=57570620
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680076832.9A Active CN108431766B (zh) | 2015-12-02 | 2016-12-02 | 用于访问数据库的方法和系统 |
Country Status (4)
Country | Link |
---|---|
US (2) | US10621152B2 (zh) |
EP (1) | EP3384385B1 (zh) |
CN (1) | CN108431766B (zh) |
WO (1) | WO2017096155A1 (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017096155A1 (en) * | 2015-12-02 | 2017-06-08 | Speedment, Inc. | Methods and systems for mapping object oriented/functional languages to database languages |
CN110019298B (zh) * | 2017-10-31 | 2021-07-30 | 北京国双科技有限公司 | 数据处理方法和装置 |
CN110659271B (zh) * | 2019-08-29 | 2022-07-26 | 福建天泉教育科技有限公司 | 一种数据删除的优化方法及终端 |
EP4200698A1 (en) * | 2020-08-20 | 2023-06-28 | Speedment AB | Method and apparatus for mapping java streams to jpa commands |
CN112910980B (zh) * | 2021-01-27 | 2022-11-15 | 中国银联股份有限公司 | 一种数据库访问系统和方法 |
CN114579190B (zh) * | 2022-02-17 | 2022-10-14 | 中国科学院计算机网络信息中心 | 基于流水线机制的跨中心协同计算的编排方法与系统 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101751469A (zh) * | 2004-02-10 | 2010-06-23 | 微软公司 | 用以支持用户定义类型的继承的系统和方法 |
Family Cites Families (48)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5230049A (en) * | 1988-11-29 | 1993-07-20 | International Business Machines Corporation | Program source code translator |
GB2253500A (en) * | 1990-08-23 | 1992-09-09 | Data General Corp | Object oriented-data bases |
US5338976A (en) * | 1991-06-20 | 1994-08-16 | Ricoh Company, Ltd. | Interactive language conversion system |
US5485618A (en) * | 1993-12-15 | 1996-01-16 | Borland International, Inc. | Methods and interface for building command expressions in a computer system |
US5999737A (en) * | 1994-03-01 | 1999-12-07 | Digital Equipment Corporation | Link time optimization via dead code elimination, code motion, code partitioning, code grouping, loop analysis with code motion, loop invariant analysis and active variable to register analysis |
US5777876A (en) * | 1995-12-29 | 1998-07-07 | Bull Hn Information Systems Inc. | Database manufacturing process management system |
US6986101B2 (en) * | 1999-05-06 | 2006-01-10 | International Business Machines Corporation | Method and apparatus for converting programs and source code files written in a programming language to equivalent markup language files |
US7542885B1 (en) * | 1999-05-07 | 2009-06-02 | The United States Of America As Represented By The Administrator Of The National Aeronautics And Space Administration | Method and apparatus for predicting unsteady pressure and flow rate distribution in a fluid network |
US6470354B1 (en) * | 1999-08-05 | 2002-10-22 | International Business Machines Corporation | Implementing persistent object services (POS) on top of a relational database |
US6629313B1 (en) * | 2000-06-29 | 2003-09-30 | Microsoft Corporation | In-line database access statements without a pre-compiler |
US6889227B1 (en) * | 2000-07-21 | 2005-05-03 | Sun Microsystems, Inc. | Database access bridge system and process |
US7099350B2 (en) * | 2001-04-24 | 2006-08-29 | Atitania, Ltd. | Method and apparatus for converting data between two dissimilar systems |
US7028028B1 (en) * | 2001-05-17 | 2006-04-11 | Enosys Markets,Inc. | System for querying markup language data stored in a relational database according to markup language schema |
US6912539B1 (en) * | 2002-03-29 | 2005-06-28 | Serena Software, Inc. | Method and apparatus for verifying converted database commands |
US7676407B2 (en) * | 2004-04-26 | 2010-03-09 | General Electric Company | Method and apparatus for account payable matching for an online purchasing system |
US20060282470A1 (en) * | 2005-06-10 | 2006-12-14 | Hong-Lee Yu | Determining compliance of a database architecture to an enterprise data standard |
US7992140B2 (en) * | 2005-07-29 | 2011-08-02 | Microsoft Corporation | Compiler supporting programs as data objects |
US20070027905A1 (en) * | 2005-07-29 | 2007-02-01 | Microsoft Corporation | Intelligent SQL generation for persistent object retrieval |
TWI289759B (en) * | 2005-10-07 | 2007-11-11 | Via Tech Inc | Controller and operation method thereof of a disk array |
US7548907B2 (en) * | 2006-05-11 | 2009-06-16 | Theresa Wall | Partitioning electrical data within a database |
CA2652115C (en) * | 2006-05-12 | 2015-11-17 | Goldengate Software, Inc. | Apparatus and method for read consistency in a log mining system |
CN100456237C (zh) * | 2007-01-31 | 2009-01-28 | 华为技术有限公司 | 数据库访问方法和装置 |
US7991794B2 (en) * | 2007-12-18 | 2011-08-02 | Oracle International Corporation | Pipelining operations involving DML and query |
US8972433B2 (en) * | 2008-04-18 | 2015-03-03 | Travelport Operations, Inc. | Systems and methods for programmatic generation of database statements |
US8713048B2 (en) * | 2008-06-24 | 2014-04-29 | Microsoft Corporation | Query processing with specialized query operators |
US8407184B2 (en) * | 2010-06-07 | 2013-03-26 | Salesforce.Com, Inc. | Maintaining applications that are occasionally connected to an online services system |
EP2580692B1 (en) * | 2010-06-10 | 2019-02-13 | EntIT Software LLC | Query pipeline |
US11256666B2 (en) | 2010-11-04 | 2022-02-22 | Speedment, Inc. | Method and apparatus for handling digital objects in a communication network |
US8612600B2 (en) * | 2010-12-07 | 2013-12-17 | Nec Laboratories America, Inc. | Negotiation tool and method for cloud infrastructure data sharing |
US9182962B2 (en) * | 2010-12-09 | 2015-11-10 | Todd Bradley KNEISEL | Method for translating a cobol source program into readable and maintainable program code in an object oriented second programming language |
US8996463B2 (en) * | 2012-07-26 | 2015-03-31 | Mongodb, Inc. | Aggregation framework system architecture and method |
US9262462B2 (en) * | 2012-07-26 | 2016-02-16 | Mongodb, Inc. | Aggregation framework system architecture and method |
EP2602678B1 (de) * | 2011-12-07 | 2014-08-13 | Siemens Aktiengesellschaft | Verfahren zum Übersetzen eines in einer Automatisierungssprache vorliegenden Steuerungsprogramms in eine Zwischensprache |
US20140143761A1 (en) * | 2012-04-18 | 2014-05-22 | Natalio Fridman | Method and system for database conversion |
US9218405B2 (en) * | 2012-10-10 | 2015-12-22 | Apple Inc. | Batch processing and data synchronization in cloud-based systems |
CA2908130C (en) * | 2013-03-27 | 2020-07-21 | Netfective Technology Sa | Method for transforming first code instructions in a first programming language into second code instructions in a second programming language |
US9367806B1 (en) * | 2013-08-08 | 2016-06-14 | Jasmin Cosic | Systems and methods of using an artificially intelligent database management system and interfaces for mobile, embedded, and other computing devices |
CA2929716C (en) * | 2013-12-06 | 2021-08-31 | Ab Initio Technology Llc | Source code translation |
JP6308042B2 (ja) * | 2014-06-18 | 2018-04-11 | 富士ゼロックス株式会社 | 情報処理システム |
US10053112B2 (en) * | 2014-09-04 | 2018-08-21 | GM Global Technology Operations LLC | Systems and methods for suggesting and automating actions within a vehicle |
US10073899B2 (en) * | 2015-05-18 | 2018-09-11 | Oracle International Corporation | Efficient storage using automatic data translation |
US9996595B2 (en) * | 2015-08-03 | 2018-06-12 | Palantir Technologies, Inc. | Providing full data provenance visualization for versioned datasets |
US9934272B2 (en) * | 2015-10-22 | 2018-04-03 | International Business Machines Corporation | Processing a database query in a database system |
US10346162B2 (en) * | 2015-11-17 | 2019-07-09 | International Business Machines Corporation | Selective instruction replacement for assembly language programs |
US10169601B2 (en) * | 2015-11-18 | 2019-01-01 | American Express Travel Related Services Company, Inc. | System and method for reading and writing to big data storage formats |
US11023468B2 (en) * | 2015-11-20 | 2021-06-01 | Sap Se | First/last aggregation operator on multiple keyfigures with a single table scan |
WO2017096155A1 (en) * | 2015-12-02 | 2017-06-08 | Speedment, Inc. | Methods and systems for mapping object oriented/functional languages to database languages |
US10909119B2 (en) * | 2016-07-06 | 2021-02-02 | Micro Focus Llc | Accessing electronic databases |
-
2016
- 2016-12-02 WO PCT/US2016/064607 patent/WO2017096155A1/en active Application Filing
- 2016-12-02 EP EP16813293.4A patent/EP3384385B1/en active Active
- 2016-12-02 US US15/367,723 patent/US10621152B2/en active Active
- 2016-12-02 CN CN201680076832.9A patent/CN108431766B/zh active Active
-
2020
- 2020-02-25 US US16/800,341 patent/US11514009B2/en active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101751469A (zh) * | 2004-02-10 | 2010-06-23 | 微软公司 | 用以支持用户定义类型的继承的系统和方法 |
Also Published As
Publication number | Publication date |
---|---|
EP3384385A1 (en) | 2018-10-10 |
CN108431766A (zh) | 2018-08-21 |
US20200265028A1 (en) | 2020-08-20 |
US11514009B2 (en) | 2022-11-29 |
US20170161307A1 (en) | 2017-06-08 |
WO2017096155A1 (en) | 2017-06-08 |
EP3384385B1 (en) | 2020-11-18 |
US10621152B2 (en) | 2020-04-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108431766B (zh) | 用于访问数据库的方法和系统 | |
US11544623B2 (en) | Consistent filtering of machine learning data | |
US10915544B2 (en) | Transforming and loading data utilizing in-memory processing | |
EP3594821B1 (en) | Managing data profiling operations related to data type | |
US8396852B2 (en) | Evaluating execution plan changes after a wakeup threshold time | |
US11132366B2 (en) | Transforming directed acyclic graph shaped sub plans to enable late materialization | |
US20160342646A1 (en) | Database query cursor management | |
US10417058B1 (en) | Method and system for executing application programming interface (API) requests based on parent-child object relationships | |
WO2016177027A1 (zh) | 批量数据查询方法和装置 | |
EP3293645B1 (en) | Iterative evaluation of data through simd processor registers | |
Näsholm | Extracting data from nosql databases-a step towards interactive visual analysis of nosql data | |
US11847121B2 (en) | Compound predicate query statement transformation | |
CN116964571A (zh) | 对rdbms中存储的聚合存储数据全面支持多值、多字段、多级别、多位置功能索引的技术 | |
Rafique | Evaluating NOSQL Technologies for Historical Financial Data | |
US20240020302A1 (en) | Method and apparatus for mapping java streams to jpa commands | |
Choksuchat et al. | Experimental framework for searching large RDF on GPUs based on key-value storage | |
Marx et al. | Towards an efficient RDF dataset slicing | |
Seeger | Building blocks of a scalable web crawler | |
CN117421277A (zh) | 一种文件管理方法及相关设备 | |
Navarro | Distributed storage and queryng techniques for a semantic web of scientific workflow provenance | |
Dimitrov et al. | D5. 1.2 Architecture for Distributed Text Annotation and Trend Mining Over Media Streams (v. 1) |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |