CN115729912A - 数据库访问系统、方法、计算机设备和存储介质 - Google Patents

数据库访问系统、方法、计算机设备和存储介质 Download PDF

Info

Publication number
CN115729912A
CN115729912A CN202211391763.4A CN202211391763A CN115729912A CN 115729912 A CN115729912 A CN 115729912A CN 202211391763 A CN202211391763 A CN 202211391763A CN 115729912 A CN115729912 A CN 115729912A
Authority
CN
China
Prior art keywords
orm
database
operation request
access
execution engine
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
Application number
CN202211391763.4A
Other languages
English (en)
Inventor
谭锦志
邱炜伟
盛威锋
戴唯威
胡麦芳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou Qulian Technology Co Ltd
Original Assignee
Hangzhou Qulian Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hangzhou Qulian Technology Co Ltd filed Critical Hangzhou Qulian Technology Co Ltd
Priority to CN202211391763.4A priority Critical patent/CN115729912A/zh
Publication of CN115729912A publication Critical patent/CN115729912A/zh
Priority to PCT/CN2023/111555 priority patent/WO2024098858A1/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了一种数据库访问系统、方法、计算机设备和存储介质,属于计算机技术领域。数据库访问系统包括应用系统和ORM执行引擎,应用系统包括第一ORM框架,ORM执行引擎包括第二ORM框架,ORM执行引擎与数据库进行通信连接;第一ORM框架用于根据业务语句生成操作请求,向ORM执行引擎发送操作请求;第二ORM框架用于在获取到操作请求后,对操作请求进行解析,得到SQL语句;执行SQL语句,以访问数据库中的数据。本申请中应用系统无需直接连接数据库,因而应用系统中无需配置数据库的密码,而只需ORM执行引擎与数据库进行交互,以实现对数据库的访问,从而保证了数据库的安全性。

Description

数据库访问系统、方法、计算机设备和存储介质
技术领域
本申请涉及计算机技术领域,特别涉及一种数据库访问系统、方法、计算机设备和存储介质。
背景技术
对于一个应用系统来说,数据库中存储有大量的业务数据,一个应用系统在进行业务操作时往往需要对数据库进行访问,以实现对业务数据的读取、修改或存储。
相关技术中,在每个应用系统中配置数据库的账号密码后,应用系统就可以直接和数据库交互了。每个应用系统中集成有ORM(Object Relational Mapping,对象关系映射)框架。ORM框架可以将技术人员编写的面向对象的程序语言自动编译成数据库可以识别的数据库操作语言。这种情况下,技术人员可以在应用系统编写面向对象的业务程序,之后由ORM框架执行该业务程序,以将该业务程序自动编译为数据库可以识别的操作程序,并执行该操作程序,以对数据库进行访问。
然而,在多个应用系统均需要访问同一个数据库的情况下,该多个应用系统中的每个应用系统均需要配置数据库的账号密码,那么每个应用系统都会知道数据库的账号密码,这种隐私数据的广泛使用,会给数据库带来极大的安全隐患,从而降低数据库的安全性。
发明内容
本申请提供了一种数据库访问系统、方法、计算机设备和存储介质,可以提高数据库的安全性。所述技术方案如下:
第一方面,提供了一种数据库访问系统,所述数据库访问系统包括应用系统和关系对象映射ORM执行引擎,所述应用系统包括第一ORM框架,所述ORM执行引擎包括第二ORM框架,所述ORM执行引擎与数据库进行通信连接;
所述第一ORM框架,用于根据业务语句生成操作请求,向所述ORM执行引擎发送所述操作请求,所述操作请求用于请求对所述数据库中的数据进行操作;
所述第二ORM框架,用于在获取到所述操作请求后,对所述操作请求进行解析,得到SQL(Structured Query Language,结构化查询语言)语句;执行所述SQL语句,以访问所述数据库中的数据,得到所述SQL语句的执行结果。
在本申请中,应用系统包括第一ORM框架,ORM执行引擎包括第二ORM框架,并且ORM执行引擎与数据库进行通信连接。第一ORM框架根据业务语句生成操作请求,再将该操作请求发送给ORM执行引擎,也即是应用系统在需要访问数据库时向ORM执行引擎发送操作请求。之后ORM执行引擎中的第二ORM框架接收到该操作请求之后,对操作请求进行解析得到SQL语句,该SQL语句是数据库可以识别的语句。之后第二ORM框架执行该SQL语句,以访问数据库中的数据。如此,应用系统无需直接连接数据库,因而应用系统中无需配置数据库的密码,而只需ORM执行引擎与数据库进行交互,以实现对数据库的访问,从而保证了数据库的安全性。
第二方面,提供了一种数据库访问方法,应用于关系对象映射ORM执行引擎,所述ORM执行引擎包括第二ORM框架,所述ORM执行引擎与应用系统进行通信连接,所述ORM执行引擎与数据库进行通信连接,所述应用系统包括第一ORM框架,所述方法包括:
所述第二ORM框架获取所述第一ORM框架发送的操作请求,所述操作请求是所述第一ORM框架根据业务语句生成的,所述操作请求用于请求对所述数据库中的数据进行操作;
所述第二ORM框架在获取到所述操作请求后,对所述操作请求进行解析,得到结构化查询语言SQL语句;
所述第二ORM框架执行所述SQL语句,以访问所述数据库中的数据,得到所述SQL语句的执行结果。
在本申请中,ORM执行引擎包括第二ORM框架,ORM执行引擎与应用系统进行通信连接,并且ORM执行引擎与数据库进行通信连接,应用系统包括第一ORM框架。ORM执行引擎中的第二ORM框架获取第一ORM框架发送的操作请求,该操作请求为第一ORM框架根据业务语句生成,也即是应用系统在需要访问数据库时向ORM执行引擎发送操作请求。之后第二ORM框架对该操作请求进行解析得到SQL语句,该SQL语句是数据库可以识别的语句。第二ORM框架执行该SQL语句,以访问数据库中的数据。如此,应用系统无需直接连接数据库,因而应用系统中无需配置数据库的密码,而只需ORM执行引擎与数据库进行交互,以实现对数据库的访问,从而保证了数据库的安全性。
第三方面,提供了一种计算机设备,所述计算机设备包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述的数据库访问方法。
第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述的数据库访问方法。
第五方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述的数据库访问方法的步骤。
可以理解的是,上述第三方面、第四方面、第五方面的有益效果可以参见上述第二方面中的相关描述,在此不再赘述。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种数据库访问系统的结构示意图;
图2是本申请实施例提供的一种数据库访问方法的流程图;
图3是本申请实施例提供的一种操作请求的示意图;
图4是本申请实施例提供的一种应用系统与ORM执行引擎的交互示意图;
图5是本申请实施例提供的另一种数据库访问方法的流程图;
图6是本申请实施例提供的又一种数据库访问方法的流程图;
图7是本申请实施例提供的再一种数据库访问方法的流程图;
图8是本申请实施例提供的另一种应用系统与ORM执行引擎的交互示意图;
图9是本申请实施例提供的另一种数据库访问系统的结构示意图;
图10是本申请实施例提供的又一种数据库访问系统的结构示意图;
图11是本申请实施例提供的一种中间件模块的示意图;
图12是本申请实施例提供的再一种数据库访问系统的结构示意图;
图13是本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
应当理解的是,本申请提及的“多个”是指两个或两个以上。在本申请的描述中,除非另有说明,“/”表示或的意思,比如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,比如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,为了便于清楚描述本申请的技术方案,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。
在对本申请实施例进行详细地解释说明之前,先对本申请实施例的应用场景予以说明。
下面先对应用场景涉及的ORM框架进行说明。
业务逻辑层和用户界面层是面向对象的,当对象的信息发生变化的时候,就需要把对象的信息保存在数据库(包括但不限于关系型数据库)中,但是要对数据库中的数据进行更新不能采用面向对象的语言,如此就需要编写非常复杂的数据库语言才能对数据库中的数据进行更新。
ORM框架就是一种为了解决面向对象与数据库存在的语言互不匹配的现象的技术。具体是通过描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到数据库中,也即ORM框架是连接业务逻辑层和数据库的桥梁。一般情况下,元数据中的一个持久化类和数据库中的一个表对应,类的每个实例对应表中的一条记录,类的每个属性对应表的每个字段。
由于ORM框架提供了一个数据库和对象之间的映射,所以我们在操作数据库中的数据时,就不需要再去和复杂的数据库语言打交道,只要像平时操作对象一样操作它即可。ORM框架能够使开发更加对象化,对于技术人员来说只需编写面向对象的业务程序,使得程序编写更加方便,如此能够提高开发效率,降低开发成本。
一般情况下,基于ORM框架的应用系统是通过与数据库直接进行通信连接来实现对数据库的访问的。具体是:应用系统中的ORM框架执行技术人员编写的业务程序,以将该业务程序自动编译为数据库可以识别的操作语句(在本申请实施例中为SQL语句),并执行该操作语句,以对数据库进行访问。这种情况下会存在以下问题。
第一,访问同一数据库的每个应用系统中都要配置数据库的账号密码,这种情况下,一方面会增加应用系统的配置复杂度,另一方面每个应用系统都会知道数据库的账号密码,这会给数据库带来极大的安全隐患。
第二,数据库设置有最大TCP(Transmission Control Protocol,传输控制协议)连接数,也即数据库只允许有限数量个应用系统连接。每个应用系统与数据库的连接都会消耗数据库的TCP连接数,并且应用系统消耗的TCP连接数是自身定义的,也即应用系统可以定义自身与数据库的TCP连接数,这对数据库来说,整体的TCP连接数是不可控的。考虑一种极端情况,如果一个应用系统定义的TCP连接数就是数据库可支持的最大TCP连接数,那么这会导致其余应用系统无法连接数据库,从而影响其余应用系统的性能。
第三,这种应用系统与数据库直连的方式,无法统筹管理整个数据库访问。虽然数据库自带了一些管控配置,但无法满足所有业务需求,无法实现对整个数据库访问增加更高级的、特殊的、自定义的限制功能,例如用户体系认证、黑白名单、流量控制等。
第四,若数据库本身需要被更换(例如从MySQL数据库更换为PostgreSQL数据库),则所有应用系统都需要同步更新数据库层面相关的代码和配置。这种情况下,应用系统的复杂性较高,并且如果同步更新出现问题,那么很容易导致部署、运维、开发等方面出现问题。
第五,应用系统本身不具有数据缓存能力,并且,由于一个应用系统对数据库的表操作可能会随时被其他应用系统修改,所以即使在应用系统中对数据进行缓存也无法保证缓存的有效性。
为此,本申请实施例提供了一种数据库访问方法,在需要访问数据库时,应用系统可以向ORM执行引擎发送操作请求,之后ORM执行引擎可以对该操作请求进行处理,再由ORM执行引擎与数据库进行交互,以实现对数据库的访问。如此,应用系统无需直接连接数据库,因而应用系统中无需配置数据库的密码,从而保证了数据库的安全性。
下面对本申请实施例涉及的系统架构予以说明。
图1是本申请实施例提供的一种数据库访问系统的示意图。参见图1,该数据库访问系统包括:应用系统101和ORM执行引擎102。
应用系统101中包括第一ORM框架,第一ORM框架用于在需要对数据库103进行访问时,生成操作请求。应用系统101可以部署于终端,也可以部署于服务器,应用系统101可以与ORM执行引擎102通过有线连接或无线连接进行通信。应用系统101的数量可以为一个或多个,多个应用系统101均与ORM执行引擎102进行通信。
该数据库访问系统中可以包括一个ORM执行引擎102,也可以包括多个ORM执行引擎102,多个ORM执行引擎102整体作为一个ORM执行引擎集群来与一个或多个应用系统101进行通信,并且,多个ORM执行引擎102整体作为一个ORM执行引擎集群来与数据库103进行通信。ORM执行引擎102包括第二ORM框架,第二ORM框架用于对接收到的操作请求进行处理,并与数据库103进行交互。ORM执行引擎102可以部署于服务器,该服务器可以是一台服务器,也可以是由多台服务器组成的服务器集群。
ORM执行引擎102可以通过有线连接或无线连接与数据库103进行通信,也可以通过有线连接或无线连接与应用系统101进行通信。
例如:应用系统101需要访问数据库103中的数据时,应用系统101中的第一ORM框架生成访问数据库103的操作请求,并发送给ORM执行引擎102,ORM执行引擎102中的第二ORM框架接收到该操作请求后,对该操作请求进行处理,并与数据库103进行交互,以实现对数据库103中的数据的操作。
在本申请实施例中,由ORM执行引擎102直接与数据库103通信,应用系统101无需直接与数据库103通信,而是通过ORM执行引擎102实现对数据库103的访问,因而应用系统101中无需配置数据库103的密码,只需在ORM执行引擎102中配置数据库103的密码。在本申请实施例中,在该数据库访问系统中只存在一个ORM执行引擎102的情况下,只需在这个ORM执行引擎102中配置数据库103的密码即可;在该数据库访问系统中存在多个ORM执行引擎102的情况下,只需在由该多个ORM执行引擎102构成的ORM执行引擎集群中配置数据库103的密码即可。应用系统作为面向用户的系统,其安全等级低于ORM执行引擎102,即ORM执行引擎102的安全等级较高,因而相比于相关技术中由多个应用系统直接与数据库通信且在多个应用系统中配置数据库的密码的方案,本申请实施例提供的数据库访问系统在ORM执行引擎102中配置数据库103的密码,可以提高数据库103的安全性。
下面对本申请实施例提供的数据库访问方法进行详细地解释说明。
图2是本申请实施例提供的一种数据库访问方法的流程图。该数据库访问方法应用于上文图1实施例所述的数据库访问系统。参见图2,该方法包括以下步骤。
步骤201:第一ORM框架根据业务语句生成操作请求。
业务语句是技术人员使用面向对象的程序语言编写的语句。可选地,在应用系统中集成的第一ORM框架可以是在应用系统中部署的基于ORM的SDK(Software DevelopmentKit,软件开发工具包)。这种情况下,技术人员可以直接采用ORM的程序语法编写面向对象的业务语句。之后第一ORM框架可以根据技术人员编写的业务语句生成操作请求。该操作请求用于请求对数据库中的数据进行操作。
在本申请实施例中,第一ORM框架在应用系统调用业务语句时,对业务语句进行解析之后,对解析得到的结果进行封装,来得到操作请求。如此,该操作请求会包括与业务语句相关的信息,也即会包括对数据库的操作的相关信息。可选地,该操作请求可以包括对象标识、操作类型、对象标识所标识的对象的原始数据、对象标识所标识的对象的更新数据等信息。
对象标识为应用系统所要访问的数据库中的对象的标识,例如,该对象标识可以为数据库中的表名称,本申请实施例对此不作限定。操作类型为应用系统对数据库中的对象进行操作的类型,例如,操作类型可以包括新增(INSERT)、删除(DELETE)、更新(UPDATE)、查找(FIND)。
例如,图3为操作请求的数据示意图,图3示出的操作请求包括操作类型、表名称、原始表数据、原始SQL数据、更新数据等与数据库的操作相关的信息。
步骤202:第一ORM框架向ORM执行引擎发送该操作请求。
在本申请实施例中,第一ORM框架提供了与ORM执行引擎进行通信连接的接口。如此,应用系统中的第一ORM框架在生成该操作请求后,可以通过该接口向ORM执行引擎发送该操作请求。
作为一种示例,用户想要查看账户的订单信息,那么该用户可以在一个应用系统中点击订单信息的查询按钮,以触发访问数据库中账户的订单信息的操作。此时应用系统会调用查询订单信息的业务语句,那么第一ORM框架就可以对该业务语句进行封装,来得到对应的操作请求,将该操作请求发送给ORM执行引擎,该操作请求即是从数据库中查询这个用户的账户的订单信息的请求。ORM执行引擎接收到该操作请求后就可以进行相应的处理了,具体可以执行如下步骤203-步骤205。
步骤203:ORM执行引擎中的第二ORM框架获取该操作请求。
第二ORM框架是集成在ORM执行引擎的ORM框架,用于在获取到该操作请求后,对该操作请求进行处理,以实现对数据库的访问操作。
这种情况下,ORM执行引擎中的第二ORM框架获取到该操作请求后,可以知道应用系统想要访问数据库。
一种可能的实现方式,应用系统中的第一ORM框架可以与ORM执行引擎中的第二ORM框架直接进行通信。这种情况下,第一ORM框架发送至ORM执行引擎的操作请求可以直接被第二ORM框架接收到,也即,第二ORM框架可以直接接收到第一ORM框架发送的操作请求。
另一种可能的实现方式,ORM执行引擎包括中间件模块,中间件模块可以与应用系统进行通信连接,也即,中间件模块可以与第一ORM框架直接进行通信。这种情况下,第一ORM框架发送至ORM执行引擎的操作请求可以直接被中间件模块接收到。中间件模块可以先接收第一ORM框架发送的操作请求,在满足数据库访问条件的情况下,再向第二ORM框架发送该操作请求。
数据库访问条件可以预先进行设置,数据库访问条件可以由技术人员根据业务需求进行设置。可选地,数据库访问条件可以包括但不限于以下多项中的至少一项:
第一,数据库的访问次数小于第一次数阈值。
第一次数阈值为数据库在一定周期(比如一天、一个月等)内可以被访问的最多次数,第一次数阈值可以预先进行设置,且第一次数阈值可以由技术人员根据业务需求进行设置。
这种情况下,数据库的访问次数小于第一次数阈值,说明数据库的访问次数还未达到数据库可以被访问的最多次数,那么就可以继续访问数据库,则中间件模块可以将该操作请求发送给第二ORM框架。数据库的访问次数大于或等于第一次数阈值,说明数据库的访问次数已超过数据库可以被访问的最多次数,那么就不能继续访问数据库了,则中间件模块不能将该操作请求发送给第二ORM框架。
例如,第一次数阈值为10,当前数据库的访问次数为5,当前数据库的访问次数(5)小于第一次数阈值(10),则可以确定此次访问满足数据库访问条件,则中间件模块可以向第二ORM框架发送该操作请求。
第二,该操作请求所要访问的对象的访问次数小于第二次数阈值。
第二次数阈值为该操作请求所要访问的对象在一定周期(比如一天、一个月等)内可以被访问的最多次数。第二次数阈值可以预先进行设置,且第二次数阈值可以由技术人员根据业务需要进行设置。
这种情况下,该操作请求所要访问的对象的访问次数小于第二次数阈值,说明该操作请求所要访问的对象的访问次数还未达到该操作请求所要访问的对象可以被访问的最多次数,那么就可以继续访问数据库,则中间件模块可以将该操作请求发送给第二ORM框架。该操作请求所要访问的对象的访问次数大于或等于第二次数阈值,说明该操作请求所要访问的对象的访问次数已超过该操作请求所要访问的对象可以被访问的最多次数,那么就不能继续访问数据库,则中间件模块不能将该操作请求发送给第二ORM框架。
例如,第二次数阈值为5,当前该操作请求所要访问的对象的访问次数为3,当前该操作请求所要访问的对象的访问次数(3)小于第二次数阈值(5),那么可以确定该操作请求满足数据库访问条件,则中间件模块可以向第二ORM框架发送该操作请求。
第三,应用系统具有该操作请求所要访问的对象的访问权限。
该操作请求所要访问的对象的访问权限用于限制部分应用系统对该操作请求所要访问的对象的访问,也即,具有该操作请求所要访问的对象的访问权限的应用系统被允许访问该对象,而不具有该操作请求所要访问的对象的访问权限的应用系统不被允许访问该对象。该操作请求所要访问的对象的访问权限可以由技术人员根据业务需求进行设置。
在中间件模块接收到该操作请求后,可以先检验发送该操作请求的应用系统是否具有该操作请求所要访问的对象的访问权限。若应用系统具有该操作请求所要访问的对象的访问权限,说明应用系统被允许访问该操作请求所要访问的对象,那么就可以继续访问数据库,则中间件模块可以将该操作请求发送给第二ORM框架。若应用系统不具有该操作请求所要访问的对象的访问权限,说明应用系统不被允许访问该操作请求所要访问的对象,那么就不能继续访问数据库,则中间件模块不能将该操作请求发送给第二ORM框架。
第四,应用系统具有数据库的访问权限。
数据库的访问权限用于限制部分应用系统对数据库的访问。也即,具有数据库的访问权限的应用系统被允许访问数据库,而不具有数据库的访问权限的应用系统不被允许访问数据库。数据库的访问权限可以由技术人员根据业务需求进行设置。
在中间件模块接收到该操作请求后,可以先检验发送该操作请求的应用系统是否具有数据库的访问权限。若应用系统具有数据库的访问权限,说明应用系统被允许访问数据库,那么就可以继续访问数据库,则中间件模块可以将该操作请求发送给第二ORM框架。若应用系统不具有数据库的访问权限,说明应用系统不被允许访问数据库,那么就不能继续访问数据库,则中间件模块不能将该操作请求发送给第二ORM框架。
第五,该操作请求中的操作类型是数据库允许对该操作请求所要访问的对象进行的操作类型。
技术人员可以根据业务需求设置数据库中的对象可以被操作的操作类型,以此来限制应用系统对数据库中的对象的操作。
中间件模块接收到该操作请求后,可以先检查该操作请求中的操作类型是否为数据库允许对该操作请求所要访问的对象进行的操作类型。若该操作请求中的操作类型是数据库允许对该操作请求所要访问的对象进行的操作类型,说明该操作请求想要对该对象进行的操作类型是被允许的操作类型,那么就可以继续访问数据库,则中间件模块可以将该操作请求发送给第二ORM框架。若该操作请求中的操作类型不是数据库允许对该操作请求所要访问的对象进行的操作类型,说明该操作请求想要对该对象进行的操作类型是不被允许的操作类型,那么就不能继续访问数据库,则中间件模块不能将该操作请求发送给第二ORM框架。
当然,在本申请实施例中,在满足上述五项条件中的任意一项条件时中间件模块可以将该操作请求发送给第二ORM框架;或者,在同时满足上述五项条件中的多项条件时中间件模块才将该操作请求发送给第二ORM框架。另外,除上述五项条件之外,技术人员还可以设置其他的条件,本申请实施例对此不作限定。
本申请实施例中,在中间件模块中提前设置数据库访问条件,在满足数据库访问条件的情况下,中间件模块才将该操作请求发送给第二ORM框架,这种情况下,中间件模块能够很好的统筹管理整个数据库的访问,同时满足所有业务化需求,支持更高级的、特殊的、自定义的管控配置。
步骤204:第二ORM框架对该操作请求进行解析,得到SQL语句。
SQL语句用于对数据库中的数据进行操作。比如,该SQL语句可以是DML(DataManipulation Language,数据操纵语言)语句,具体来讲,该SQL语句可以用于对数据库中的数据进行新增、删除、更新、查找。
由于该操作请求是第一ORM框架根据面向对象的业务语句生成的,所以该操作请求中包括的是基于面向对象的操作信息。这种情况下,ORM执行引擎中的第二ORM框架可以将基于面向对象的操作请求解析成SQL语句,也即是将基于面向对象的操作请求解析成数据库可以识别的SQL语句,以实现访问数据库中的数据。
这种情况下,第二ORM框架可以得到数据库能够识别的SQL语句,之后再与数据库进行交互,如此技术人员无需编写复杂的SQL语句,这为技术人员提供了方便,从而提高开发效率。并且,本申请实施例中无需应用系统与数据库进行直接通信,也就不需要在应用系统中配置数据库的账号密码,从而保证了数据库的安全性。
第二ORM框架对该操作请求进行解析,得到SQL语句的操作与相关技术中某个设备对某个操作请求进行解析得到SQL语句的操作类似,本申请实施例对此不进行详细阐述。
步骤205:第二ORM框架执行该SQL语句,以访问数据库中的数据,得到该SQL语句的执行结果。
在本申请实施例中,第二ORM框架中提供了与数据库进行通信的接口,则第二ORM框架可以通过该接口访问数据库。
这种情况下,第二ORM框架执行该SQL语句,也即是通过第二ORM框架中提供的接口与数据库进行交互,也即是对数据库中该操作请求所要访问的对象进行操作,从而得到执行结果,该执行结果即是该操作请求的请求结果。
进一步地,第二ORM框架得到该SQL语句的执行结果后,可以将该SQL语句的执行结果作为该操作请求的请求结果返回给应用系统,以响应应用系统发送的该操作请求。
例如,图4为应用系统与ORM执行引擎的交互示意图。参见图4,图4中包括应用系统401、ORM执行引擎402。应用系统401向ORM执行引擎402发送该操作请求,ORM执行引擎402中的第二ORM框架在执行解析该操作请求得到的SQL语句,得到执行结果后,将这个SQL语句的执行结果作为该操作请求的请求结果发送给应用系统401。
可选地,ORM执行引擎还可以包括缓存模块。这种情况下,第二ORM框架在获取到该操作请求后,在该操作请求中的操作类型为除查询类型之外的其他类型的情况下,可以直接执行上述步骤204-步骤205来获得该操作请求的请求结果。而在该操作请求中的操作类型为查询类型的情况下,可以先不执行上述步骤204-步骤205,而是可以先查询缓存模块中是否具有该操作请求所要查询的数据。
缓存模块与ORM执行引擎进行通信连接,缓存模块存储了多个键值对,多个键值对中的每个键值对存储的是操作类型为查询类型的操作请求的请求结果。多个键值对中每个键值对中的key值为对操作类型为查询类型的操作请求进行哈希运算得到的哈希值,多个键值对中每个键值对中的value值为操作类型为查询类型的操作请求的请求结果。也即,对于缓存模块中存储的任意一个键值对,这个键值对中的key值为操作类型为查询类型的一个操作请求的哈希值,这个键值对中的value值为这个操作请求的请求结果,也即为这个操作请求从数据库查询到的数据。示例地,该缓存模块可以为一个key-value存储系统,例如该缓存模块可以为redis(REmote DIctionary Server,数据结构服务器)缓存系统。
具体地,第二ORM框架在获取到该操作请求后,在该操作请求中的操作类型为查询类型的情况下,第二ORM框架对该操作请求进行哈希运算,得到哈希值;从缓存模块中查询与该哈希值相同的key值;若从缓存模块中查询到与该哈希值相同的key值,则将缓存模块中与该哈希值相同的key值所在的键值对中的value值确定为该操作请求的请求结果。若从缓存模块中未查询到与该哈希值相同的key值,则执行上述步骤204-步骤205,也即,对该操作请求进行解析,得到该SQL语句,执行该SQL语句,以访问数据库中的数据,得到该SQL语句的执行结果作为该操作请求的请求结果,这种情况下,还可以生成目标键值对,将目标键值对存储至缓存模块。
目标键值对中的key值为该操作请求的哈希值。目标键值对中的value值为该SQL语句的执行结果,也即为该操作请求的请求结果,也就是在执行该SQL语句后从数据库中查询到的数据。
若从缓存模块中查询到与该哈希值相同的key值,说明缓存模块中存在该操作请求的请求结果,也即是存在应用系统所要查询的数据。则可以将缓存模块中与该哈希值相同的key值所在的键值对中的value值确定为该操作请求的请求结果,进一步地可以将该操作请求的请求结果返回给应用系统。
若从缓存模块中未查询到与该哈希值相同的key值,说明缓存模块中不存在该操作请求的请求结果,也即是不存在应用系统所要查询的数据。则第二ORM框架可以对该操作请求进行解析,得到该SQL语句,执行该SQL语句,以访问数据库中的数据,得到该SQL语句的执行结果作为该操作请求的请求结果,之后再生成目标键值对,将目标键值对存储至缓存模块,此时缓存模块中就存在了该操作请求的请求结果。进一步地,第二ORM框架可以将该操作请求的请求结果返回给应用系统。
如此,在应用系统需要频繁、大量查询数据的情况下,通过缓存模块可以减轻数据库的访问压力。且对于应用系统的用户而言,在访问数据库时不会感知到缓存模块的存在。另外,由于ORM执行引擎访问缓存模块的速度比访问数据库的速度快很多,所以在缓存模块中存在所要查询的数据的情况下,直接将缓存模块中存储的数据返回给应用系统,可以提高数据查询效率,对于应用系统而言即相当于提高了数据库访问效率。
例如,图5为操作请求中的操作类型为查询类型时访问数据库的流程图。参见图5,包括步骤501-步骤506。
步骤501:第二ORM框架对该操作请求进行哈希运算,得到哈希值。
步骤502:第二ORM框架从缓存模块中查询与该哈希值相同的key值。
步骤503:第二ORM框架若从缓存模块中查询到与该哈希值相同的key值,则将该key值所在的键值对中的value值确定为该操作请求的请求结果返回给应用系统。
步骤504:第二ORM框架若从缓存模块中未查询到与该哈希值相同的key值,则从数据库中读取该操作请求所要查询的数据。
具体地,第二ORM框架对该操作请求进行解析,得到该SQL语句,执行该SQL语句,以从数据库中读取该操作请求所要查询的数据,得到该SQL语句的执行结果。之后,第二ORM框架继续执行步骤505。
步骤505:第二ORM框架将该SQL语句的执行结果确定为该操作请求的请求结果返回给应用系统,并且,第二ORM框架执行步骤506。
步骤506:第二ORM框架生成目标键值对,将目标键值对存储至缓存模块。
本申请实施例中在一些情况下可以删除缓存模块中的键值对,具体在下面说明:
可选地,在缓存模块中存储一个键值对时可以将这个键值对与这个键值对中的value值所属的对象的对象标识进行关联存储。这种情况下,在缓存模块中与一个对象的对象标识关联存储的键值对中的value值是这个对象的数据。
例如,缓存模块中的键值对与对象标识的关联关系如表1所示,如下表1中的这三个键值对中每个键值对中的value值所属的对象的对象标识均为Table1,所以这三个键值对均与Table1进行关联存储。
表1
key值 value值 对象标识
01011 1 Table1
10010 2 Table1
11100 3 Table1
…… …… ……
本申请实施例仅以上表1为例来对缓存模块中的键值对与对象标识的关联关系进行举例说明,上表1并不对本申请实施例构成限定。
第一种可能的实现方式,第二ORM框架在获取到该操作请求后,在该操作请求中的操作类型为更新类型的情况下,可以先删除缓存模块中与该操作请求中的对象标识关联存储的所有键值对,再通过上述步骤204-步骤205获得该操作请求的请求结果。
由于该操作请求中的操作类型为更新类型,所以此次数据库访问的目的是要对该操作请求中的对象标识所标识的对象进行更新,如此数据库中该操作请求中的对象标识所标识的对象的数据会发生变化,那么缓存模块中与该操作请求中的对象标识关联存储的键值对中的value值将不是该对象标识所标识的对象的最新数据,因而要对缓存模块中与该操作请求中的对象标识关联存储的所有键值对进行删除。
第二种可能的实现方式,第二ORM框架在获取到该操作请求后,在该操作请求中的操作类型为更新类型的情况下,先通过上述步骤204-步骤205获得该操作请求的请求结果,再删除缓存模块中与该操作请求中的对象标识关联存储的所有键值对。
第三种可能的实现方式,例如,图6为操作请求中的操作类型为更新类型时访问数据库的流程图。参见图6,包括步骤601-步骤603。
步骤601:第二ORM框架在获取到该操作请求后,在该操作请求中的操作类型为更新类型的情况下,删除缓存模块中与该操作请求中的对象标识关联存储的所有键值对。
步骤602:第二ORM框架通过上述步骤204-步骤205获得该操作请求的请求结果。
也即,第二ORM框架对该操作请求进行解析,得到该SQL语句,执行该SQL语句,以更新数据库中的该操作请求所要访问的对象,得到该SQL语句的执行结果。第二ORM框架可以将该SQL语句的执行结果确定为该操作请求的请求结果返回给应用系统。
步骤603:第二ORM框架再次删除缓存模块中与该操作请求中的对象标识关联存储的所有键值对。
考虑一种情况,若第二ORM框架第一次删除缓存模块中与该操作请求中的对象标识关联存储的所有键值对之后,存在另一个应用系统查询该操作请求中的对象标识所标识的对象的数据,另一个应用系统在读取到需要查询的数据后,会重新在缓存模块中存储一个键值对,这个键值对与该操作请求中的对象标识关联存储。但是此时第二ORM框架还未更新数据库中的该操作请求所要访问的对象。这种情况下,在更新数据库中的该操作请求所要访问的对象后,数据库中存储的该对象的数据与缓存模块中缓存的这个键值对中的value值不同,那么再次删除缓存模块中与该操作请求中的对象标识关联存储的所有键值对,可以保证数据更新后缓存模块中没有存储与该操作请求中的对象标识关联存储的键值对,从而保证数据库中的数据与缓存模块中缓存的数据的一致性。
值得注意的一点是,本申请实施例提供的数据库访问方法无需将数据库的账号密码配置在应用系统中,减轻了应用系统的配置复杂度,同时保护了隐私数据,减少了数据的安全隐患。另外,由于应用系统无需直接连接数据库,所以不再消耗数据库的TCP连接数,这对于数据库来说,整体的TCP连接数是可控的,可管理的。
值得注意的另一点是,当有更换数据库的需求时,可以直接在ORM执行引擎中对数据库进行变更,对于应用系统来说,应用系统不会感知到数据库的变更,所以不会对应用系统造成影响。
在本申请实施例中,ORM执行引擎包括第二ORM框架,ORM执行引擎与应用系统进行通信连接,并且ORM执行引擎与数据库进行通信连接,应用系统包括第一ORM框架。ORM执行引擎中的第二ORM框架获取第一ORM框架发送的操作请求,该操作请求为第一ORM框架根据业务语句生成,也即是应用系统在需要访问数据库时向ORM执行引擎发送操作请求。之后第二ORM框架对该操作请求进行解析得到SQL语句,该SQL语句是数据库可以识别的语句。第二ORM框架执行该SQL语句,以访问数据库中的数据。如此,应用系统无需直接连接数据库,因而应用系统中无需配置数据库的密码,而只需ORM执行引擎与数据库进行交互,以实现对数据库的访问,从而保证了数据库的安全性。
上面对应用系统向ORM执行引擎发送一个操作请求时,ORM执行引擎对这个操作请求的处理过程进行了解释说明。下面对应用系统向ORM执行引擎发送多个操作请求时,ORM执行引擎对这多个操作请求的处理过程进行解释说明。
先对本申请实施例涉及的事务的有关概念进行说明。
事务是构成单一逻辑工作单元的操作集合。事务可以包含一个或多个操作,这些操作构成一个逻辑上的整体。构成逻辑整体的这些操作,要么全部执行成功,要么全部不执行。也即,构成事务的所有操作,要么全都对数据库产生影响,要么全都不产生影响,从而不管事务是否执行成功,数据库总能保持一致性状态。
事务具有ACID特征,分别为:原子性(Atomicity):事务中的所有操作作为一个整体像原子一样不可分割,要么全部成功,要么全部失败。一致性(Consistency):事务的执行结果必须使数据库从一个一致性状态到另一个一致性状态。隔离性(Isolation):并发执行的事务不会相互影响,其对数据库的影响和它们串行执行时一样。持久性(Durability):事务一旦提交,其对数据库的更新就是持久的。
在一些实施例中,事务使用会有两种情况,通过启动事务语句来决定是否自动提交事务。
若ORM执行引擎未接收到启动事务语句,则自动提交事务,即执行非持续性事务,具体是ORM执行引擎每接收到一个操作请求,就会将对这个操作请求解析得到的一个SQL语句在执行后提交,此时实际上是将每次得到的一个SQL语句作为一个事务进行执行。也即,在上述步骤205中第二ORM框架每在得到一个SQL语句的执行结果后就会指示数据库提交这个SQL语句的执行结果。这种情况下,是采用数据库访问模式中的自动提交模式来实现对数据库中的数据的访问。
若ORM执行引擎接收到启动事务语句,则不自动提交事务,即执行持续性事务,具体是ORM执行引擎在接收到多个操作请求时,将对这多个操作请求解析得到的多个SQL语句整体作为一个事务进行执行,对这多个SQL语句的执行结果同时提交或回滚。这种情况下,是采用数据库访问模式中的手动提交模式来实现对数据库中的数据的访问。下面对这种情况进行详细地解释说明。
图7是本申请实施例提供的一种数据库访问方法的流程图。参见图7,该方法包括以下步骤。
步骤701:第一ORM框架向ORM执行引擎发送启动事务语句。
启动事务语句用于指示ORM执行引擎启动事务,以将第一ORM框架后续发送的多个操作请求解析得到的多个SQL语句作为一个事务进行执行,也即对多个SQL语句同时进行提交或回滚。
应用系统确定需要在一个事务中执行多个数据库操作时,应用系统中的第一ORM框架会向ORM执行引擎发送启动事务语句,以指示ORM执行引擎创建一个事务,从而实现将第一ORM框架后续发送的多个操作请求解析得到的多个SQL语句作为一个事务进行执行。
可选地,应用系统与ORM执行引擎可以通过GRPC(Google Remote ProcedureCall,远程过程调用)协议进行通信。
这种情况下,在存在包含有多个ORM执行引擎的ORM执行引擎集群的情况下,若一个应用系统第一次与ORM执行引擎集群中的一个ORM执行引擎建立连接,则这个应用系统与这个ORM执行引擎之间的通信连接不中断,此时这个应用系统可以不断地向这个ORM执行引擎发送多个操作请求。如此,可以保证第一ORM框架在发送启动事务语句后发送的多个操作请求均是发送给同一个ORM执行引擎,从而这个ORM执行引擎可以将接收到的该多个操作请求解析得到的多个SQL语句在同一个事务中执行。
步骤702:ORM执行引擎中的第二ORM框架在获取到启动事务语句后,创建目标事务。
可选地,ORM执行引擎中的中间件模块可以接收第一ORM框架发送的启动事务语句,然后将该启动事务语句发送给第二ORM框架。
ORM执行引擎中的第二ORM框架在获取到启动事务语句后,会创建目标事务。之后第二ORM框架可将第一ORM框架后续发送的多个操作请求解析得到的多个SQL语句均作为需目标事务执行的SQL语句。目标事务中的多个SQL语句可以同时进行提交或回滚。也即,目标事务提交,是指同时提交目标事务中多个SQL语句的执行结果;目标事务回滚,是指同时回滚目标事务中多个SQL语句的执行结果。
第二ORM框架创建目标事务的操作与相关技术中某个设备创建一个事务的操作类似,本申请实施例对此不进行详细阐述。
步骤703:第一ORM框架向ORM执行引擎发送多个操作请求。
可选地,第一ORM框架在向ORM执行引擎发送启动事务语句后,可以通过GRPC协议向ORM执行引擎不断发送多个操作请求,该多个操作请求中的每个操作请求均用于请求对数据库中的数据进行操作。
步骤704:第二ORM框架每获取到一个操作请求,对获取到的这个操作请求进行解析,得到属于目标事务的SQL语句,执行最新得到的属于目标事务的SQL语句。
可选地,ORM执行引擎中的中间件模块可以接收第一ORM框架发送的操作请求,且中间件模块每接收到一个操作请求,可以在满足数据库访问条件的情况下,将这个操作请求发送给第二ORM框架。
其中,第一ORM框架向ORM执行引擎发送一个操作请求,ORM执行引擎中的第二ORM框架对这个操作请求的处理过程可以参考上文图2实施例中的相关操作,本申请实施例对此不再赘述。
具体来讲,第二ORM框架每获取到一个操作请求,对这个操作请求进行解析,得到属于目标事务的SQL语句,执行最新得到的属于目标事务的SQL语句,得到执行结果。这种情况下,第一ORM框架向ORM执行引擎发送多个操作请求后,第二ORM框架执行该多个操作请求中每个操作请求解析得到的SQL语句,会得到目标事务中的多个SQL语句的执行结果,且每得到一个SQL语句的执行结果,可以将这个SQL语句的执行结果作为对应的一个操作请求的请求结果返回给应用系统。并且,这种情况下,第二ORM框架每得到一个SQL语句的执行结果后并不指示数据库提交这个SQL语句的执行结果。
例如,图8为应用系统与ORM执行引擎的交互示意图。参见图8,图8中包括应用系统801、ORM执行引擎802。应用系统801向ORM执行引擎802发送启动事务语句后,发送多个操作请求。ORM执行引擎802中的第二ORM框架每获取到一个操作请求,就执行解析这个操作请求得到的属于目标事务的SQL语句,得到这个SQL语句的执行结果,之后再将这个SQL语句的执行结果作为这个操作请求的请求结果发送给应用系统801,从而向应用系统801发送该多个操作请求中每个操作请求的请求结果。
步骤705:第一ORM框架向ORM执行引擎发送提交语句或回滚语句。
提交语句用于指示提交目标事务,即用于指示数据库对目标事务中的所有SQL语句的执行结果进行提交。回滚语句用于指示回滚目标事务,即用于指示数据库对目标事务中的所有SQL语句的执行结果进行回滚。
步骤706:第二ORM框架若获取到提交语句,则指示数据库对目标事务中所有SQL语句的执行结果进行提交。
可选地,ORM执行引擎中的中间件模块可以接收第一ORM框架发送的提交语句,然后将该提交语句发送给第二ORM框架。
在一些实施例中,在没有提交目标事务中所有SQL语句的执行结果之前,实质上没有完成对数据库中的数据的操作,第二ORM框架执行这些SQL语句表现为数据库记录了对数据库中的对象进行多次操作的操作信息。只有数据库在接收到提交指示时,数据库才会对目标事务中所有SQL语句的执行结果进行提交,也即是真正实现对数据库中的数据的操作,且是同时对数据库进行多次操作。
步骤707:第二ORM框架若获取到回滚语句,则指示数据库对目标事务中所有SQL语句的执行结果进行回滚。
可选地,ORM执行引擎中的中间件模块可以接收第一ORM框架发送的回滚语句,然后将该回滚语句发送给第二ORM框架。
这种情况下,数据库对目标事务中所有SQL语句的执行结果进行回滚,也即是撤销目标事务中所有SQL语句对数据库中的数据进行的操作。在一些实施例中,即是删除数据库中记录的对数据库中的对象进行多次操作的操作信息。
下面举例说明在一个事务中对数据库中的数据进行多次访问的有益效果。
假设用户在一个应用系统中购买商品,购买商品时需要付款,购买后会生成订单信息。那么此时需要进行减少用户账户余额的操作,以及在该用户的订单列表中新增一条订单信息的操作。
若这两个操作不在一个事务中执行,那么应用系统先向ORM执行引擎发送需要修改余额的操作请求,则ORM执行引擎对该操作请求进行解析得到一个修改余额的SQL语句,之后执行这个SQL语句并提交执行结果,完成对该用户的账户余额的修改。之后应用系统向ORM执行引擎发送需要新增订单信息的操作请求,则ORM执行引擎对该操作请求进行解析得到一个新增订单信息的SQL语句。但是在ORM执行引擎执行该SQL语句时发生了网络故障,那么此时在用户的订单列表中新增一条订单信息的操作就不能完成。这种情况下,用户可以查询到自己的账户余额减少,但是查询不到购买商品的订单信息。
若这两个操作在一个事务中执行,那么应用系统先向ORM执行引擎发送启动事务语句,之后ORM执行引擎创建目标事务。应用系统再向ORM执行引擎发送修改余额的操作请求以及新增订单信息的操作请求,则ORM执行引擎在接收到修改余额的操作请求后,对该操作请求进行解析得到一个修改余额的SQL语句,执行这个SQL语句但不提交执行结果。之后ORM执行引擎在接收到新增订单信息的操作请求后,再对该操作请求进行解析得到一个新增订单信息的SQL语句,执行这个SQL语句但不提交执行结果。在一些实施例中,应用系统会向ORM执行引擎发送提交语句,则ORM执行引擎会指示数据库对目标事务中的两个SQL语句的执行结果进行提交,以真正实现对用户账户余额的修改,以及在订单列表中新增订单信息。此时用户可以查询到自己账户余额减少、且订单列表中有购买商品的订单信息。在另一些实施例中,即使发生网络故障,ORM执行引擎在没有接收到提交语句之前也不会指示数据库对目标事务中的两个SQL语句的执行结果进行提交,那么数据库的数据就不会发生改变。用户此时会查询到自己账户的余额没有减少,订单列表中也不会新增订单信息。如此,将多个操作在一个事务中执行,可以保证多个操作在执行时的一致性。
在本申请实施例中,第一ORM框架向ORM执行引擎发送启动事务语句,以指示第二ORM框架创建目标事务,从而使第一ORM框架后续发送的多个操作请求解析得到的多个SQL语句可以在目标事务中执行。之后第一ORM框架向ORM执行引擎发送提交语句或回滚语句,以使第二ORM框架指示数据库对目标事务中的所有SQL语句的执行结果进行同时提交或回滚。如此,可以保证具有关联的多个操作能够同时在数据库中被提交,保证这多个操作在执行时的一致性,从而保证数据库的一致性。
下面对本申请实施例提供的数据库访问系统进行解释说明。
图9是本申请实施例提供的一种数据库访问系统的结构示意图。参见图9,该数据库访问系统包括多个应用系统101和ORM执行引擎集群,ORM执行引擎集群可以是由多个ORM执行引擎102构成的。
该多个应用系统101中任意的一个应用系统101可以与该ORM执行引擎集群中任意的一个ORM执行引擎102进行通信。
下面对应用系统101进行解释说明:
多个应用系统101中的每个应用系统101中包括第一ORM框架。第一ORM框架可以根据业务语句生成操作请求,向ORM执行引擎102发送操作请求。
该操作请求用于请求对数据库103中的数据进行操作。第一ORM框架向ORM执行引擎102发送该操作请求是向ORM执行引擎集群中任意的一个ORM执行引擎102发送该操作请求。
第一ORM框架根据业务语句生成操作请求,向ORM执行引擎102发送操作请求的相关内容已经在图2实施例中的步骤201和步骤202进行详细说明,本申请实施例对此不再赘述。
这种情况下,应用系统101只需根据技术人员使用面向对象语言编写的业务语句生成操作请求,并将该操作请求发送给ORM执行引擎102。而无需对技术人员使用面向对象语言编写的业务语句进行解析。如此,可以减轻应用系统101的业务压力,从而提升应用系统101的性能。
下面对ORM执行引擎102进行解释说明:
ORM执行引擎集群中的多个ORM执行引擎102中的每个ORM执行引擎102均与数据库103进行通信连接,在一些实施例中,ORM执行引擎集群中的多个ORM执行引擎102可以互相通信,以实现数据共享。
ORM执行引擎集群中的多个ORM执行引擎102中的每个ORM执行引擎102包括第二ORM框架。第二ORM框架可以执行上述图2实施例中的步骤203-步骤205,也即是获取到第一ORM框架发送的操作请求,对该操作请求进行解析,得到SQL语句,执行该SQL语句,以访问数据库103中的数据,得到该SQL语句的执行结果。
这种情况下,ORM执行引擎102充当应用系统101与数据库103之间的桥梁,使得应用系统101无需直接连接数据库103,而是由ORM执行引擎102与数据库103进行通信连接,实现对数据库103的访问。因此无需在应用系统101中配置数据库103的账号密码,提高了数据库103的安全性。
可选地,应用系统101与ORM执行引擎102可以通过GRPC协议进行通信。如此,可以保证一个应用系统101中的第一ORM框架发送的多个操作请求均是发送给同一个ORM执行引擎102,从而保证该多个操作请求解析得到的SQL语句可以在一个事务中执行。上述图7实施例对在一个事务中执行多个操作请求解析得到的多个SQL语句的过程进行了解释说明,本申请实施例对此不再赘述。
一种可能的情况下,参见图10,该数据库访问系统中还可以包括中间件模块1001,中间件模块1001与应用系统101进行通信连接,也即,中间件模块1001可以与第一ORM框架直接进行通信。
中间件模块1001可以在接收到应用系统101发送的操作请求后,在满足数据库访问条件的情况下,向第二ORM框架1002发送该操作请求。
示例地,图11为中间件模块1001的示意图。参见图11,图11包括应用系统101、中间件模块1001、第二ORM框架1002。示例地,中间件模块1001中可以设置如下数据库访问条件:
数据库103的访问次数小于第一次数阈值(流量控制)。
应用系统101具有该操作请求所要访问的对象的访问权限(表权限控制)。
应用系统101具有数据库103的访问权限(账户体系认证)。
该操作请求中的操作类型是数据库103允许对该操作请求所要访问的对象进行的操作类型(ORM语法控制)。
中间件模块1001在接收到该操作请求后,先判断该操作请求是否满足设置的数据库访问条件,在该操作请求满足数据库访问条件的情况下,中间件模块1001才将该操作请求发送给第二ORM框架1002。
关于数据库访问条件的相关内容已经在图2实施例中的步骤203进行解释说明,本申请实施例对此不再赘述。
这种情况下,通过在中间件模块1001中设置数据库访问条件,可以使ORM执行引擎102能够很好的统筹管理整个数据库103的访问,同时满足所有业务化需求,支持更高级的、特殊的、自定义的管控配置。
一种可能的情况下,参见图12,该数据库访问系统还可以包括缓存模块1201,缓存模块1201与ORM执行引擎102进行通信连接。缓存模块1201存储了多个键值对,多个键值对中的每个键值对存储的是操作类型为查询类型的操作请求的请求结果。也即是多个键值对中每个键值对中的key值为对操作类型为查询类型的操作请求进行哈希运算得到的哈希值,多个键值对中每个键值对中的value值为操作类型为查询类型的操作请求的请求结果。也即,对于缓存模块1201中存储的任意一个键值对,这个键值对中的key值为操作类型为查询类型的一个操作请求的哈希值,这个键值对中的value值为这个操作请求的请求结果,也即为这个操作请求从数据库103查询到的数据。
这种情况下,在该操作请求中的操作类型为除查询类型之外的其他类型的情况下,第二ORM框架1002可以直接执行上述步骤204-步骤205来获得该操作请求的请求结果。
而在该操作请求中的操作类型为查询类型的情况下,第二ORM框架可以先对该操作请求进行哈希运算,得到哈希值;从缓存模块1201中查询与该哈希值相同的key值。若从缓存模块1201中查询到与该哈希值相同的key值,则将缓存模块1201中与该哈希值相同的key值所在的键值对中的value值确定为该操作请求的请求结果。若从缓存模块1201中未查询到与该哈希值相同的key值,则第二ORM框架执行上述步骤204-步骤205,也即,对该操作请求进行解析,得到该SQL语句,执行该SQL语句,以访问数据库中的数据,得到该SQL语句的执行结果作为该操作请求的请求结果,这种情况下,还可以生成目标键值对,将目标键值对存储至缓存模块1201。
在该操作请求中的操作类型为更新类型的情况下,第二ORM框架可以删除缓存模块1201中与该操作请求中的对象标识关联存储的所有键值对。
ORM执行引擎102与缓存模块1101的交互过程已经在图2实施例中的步骤205进行解释说明,本申请实施例对此不再赘述。
在该数据库访问系统包括缓存模块1201的情况下,若应用系统101需要频繁、大量查询数据,通过缓存模块1201可以减轻数据库103的访问压力。且对于应用系统101的用户而言,在访问数据库103时不会感知到缓存模块1201的存在。另外,由于ORM执行引擎102访问缓存模块1201的速度比访问数据库103的速度快很多,所以在缓存模块1201中存在所要查询的数据的情况下,直接将缓存模块1201中存储的数据返回给应用系统,可以提高数据查询效率,对于应用系统101而言即相当于提高了数据库访问效率。
值得注意的一点是,本申请实施例提供的数据库访问系统中的应用系统101无需与数据库103直接连接,而是通过在应用系统101与数据库103之间设置ORM执行引擎102访问数据库103,具体由应用系统101向ORM执行引擎102发送操作请求,以请求访问数据库103中的数据,之后由ORM执行引擎102与数据库103进行通信,来实现对数据库103的访问。如此无需将数据库103的账号密码配置在应用系统101中,降低了应用系统101的配置复杂度,同时保护了隐私数据,减少了数据的安全隐患,从而保证了数据库103的安全性。
值得注意的另一点是,由于应用系统101无需直接连接数据库103,所以不再消耗数据库103的TCP连接数,这对于数据库103来说,整体的TCP连接数是可控制的、可管理的。同时由于本申请实施例提供的数据库访问系统中的应用系统101和ORM执行引擎102通过GRPC协议进行通信,GRPC协议是一种高效的多路复用技术,所以降低了应用系统101的连接池管理难度。
在本申请实施例中,应用系统包括第一ORM框架,ORM执行引擎包括第二ORM框架,并且ORM执行引擎与数据库进行通信连接。第一ORM框架根据业务语句生成操作请求,再将该操作请求发送给ORM执行引擎,也即是应用系统在需要访问数据库时向ORM执行引擎发送操作请求。之后ORM执行引擎中的第二ORM框架接收到该操作请求之后,对该操作请求进行解析得到SQL语句,该SQL语句是数据库可以识别的语句。之后第二ORM框架执行该SQL语句,以访问数据库中的数据。如此,应用系统无需直接连接数据库,因而应用系统中无需配置数据库的密码,而只需ORM执行引擎与数据库进行交互,以实现对数据库的访问,从而保证了数据库的安全性。
图13为本申请实施例提供的一种计算机设备的结构示意图。如图13所示,计算机设备13包括:处理器130、存储器131以及存储在存储器131中并可在处理器130上运行的计算机程序132,处理器130执行计算机程序132时实现上述实施例中的数据库访问方法中由ORM执行引擎执行的步骤。
计算机设备13可以是一个通用计算机设备或一个专用计算机设备。在具体实现中,计算机设备13可以是网络服务器。本领域技术人员可以理解,图13仅仅是计算机设备13的举例,并不构成对计算机设备13的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,比如还可以包括输入输出设备、网络接入设备等。
处理器130可以是中央处理单元(Central Processing Unit,CPU),处理器130还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者也可以是任何常规的处理器。
存储器131在一些实施例中可以是计算机设备13的内部存储单元,比如计算机设备13的硬盘或内存。存储器131在另一些实施例中也可以是计算机设备13的外部存储设备,比如计算机设备13上配备的插接式硬盘、智能存储卡(Smart Media Card,SMC)、安全数字(Secure Digital,SD)卡、闪存卡(Flash Card)等。进一步地,存储器131还可以既包括计算机设备13的内部存储单元也包括外部存储设备。存储器131用于存储操作系统、应用程序、引导装载程序(Boot Loader)、数据以及其他程序等。存储器131还可以用于暂时地存储已经输出或者将要输出的数据。
本申请实施例还提供了一种计算机设备,该计算机设备包括:至少一个处理器、存储器以及存储在该存储器中并可在该至少一个处理器上运行的计算机程序,该处理器执行该计算机程序时实现上述任意各个方法实施例中的步骤。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时可实现上述各个方法实施例中的步骤。
本申请实施例提供了一种计算机程序产品,当其在计算机上运行时,使得计算机执行上述各个方法实施例中的步骤。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述方法实施例中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,该计算机程序包括计算机程序代码,该计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。该计算机可读介质至少可以包括:能够将计算机程序代码携带到拍照装置/终端设备的任何实体或装置、记录介质、计算机存储器、ROM(Read-Only Memory,只读存储器)、RAM(Random Access Memory,随机存取存储器)、CD-ROM(Compact Disc Read-Only Memory,只读光盘)、磁带、软盘和光数据存储设备等。本申请提到的计算机可读存储介质可以为非易失性存储介质,换句话说,可以是非瞬时性存储介质。
应当理解的是,实现上述实施例的全部或部分步骤可以通过软件、硬件、固件或者其任意结合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。该计算机程序产品包括一个或多个计算机指令。该计算机指令可以存储在上述计算机可读存储介质中。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的装置/计算机设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/计算机设备实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。

Claims (12)

1.一种数据库访问系统,其特征在于,所述数据库访问系统包括应用系统和关系对象映射ORM执行引擎,所述应用系统包括第一ORM框架,所述ORM执行引擎包括第二ORM框架,所述ORM执行引擎与数据库进行通信连接;
所述第一ORM框架,用于根据业务语句生成操作请求,向所述ORM执行引擎发送所述操作请求,所述操作请求用于请求对所述数据库中的数据进行操作;
所述第二ORM框架,用于在获取到所述操作请求后,对所述操作请求进行解析,得到结构化查询语言SQL语句;执行所述SQL语句,以访问所述数据库中的数据,得到所述SQL语句的执行结果。
2.如权利要求1所述的数据库访问系统,其特征在于,
所述第一ORM框架,用于向所述ORM执行引擎发送启动事务语句;
所述第二ORM框架,用于在获取到所述启动事务语句后,创建目标事务;
所述第一ORM框架,用于在向所述ORM执行引擎发送所述启动事务语句后,向所述ORM执行引擎发送多个操作请求;
所述第二ORM框架,用于在创建所述目标事务后,每获取到一个操作请求,对所述一个操作请求进行解析,得到属于所述目标事务的SQL语句,执行最新得到的属于所述目标事务的SQL语句;
所述第一ORM框架,用于向所述ORM执行引擎发送提交语句或回滚语句;
所述第二ORM框架,用于若获取到所述提交语句,则指示所述数据库对所述目标事务中所有SQL语句的执行结果进行提交;若获取到所述回滚语句,则指示所述数据库对所述目标事务中所有SQL语句的执行结果进行回滚。
3.如权利要求1所述的数据库访问系统,其特征在于,所述应用系统与所述ORM执行引擎通过远程过程调用GRPC协议进行通信。
4.如权利要求1至3任一所述的数据库访问系统,其特征在于,所述ORM执行引擎还包括中间件模块,所述中间件模块与所述应用系统进行通信连接;
所述中间件模块,用于在接收到所述第一ORM框架发送的所述操作请求后,在满足数据库访问条件的情况下,向所述第二ORM框架发送所述操作请求。
5.如权利要求4所述的数据库访问系统,其特征在于,所述操作请求携带对象标识和操作类型,所述对象标识用于标识所述操作请求所要访问的对象;
所述数据库访问条件包括以下多项中的至少一项:
所述数据库的访问次数小于第一次数阈值;
所述操作请求所要访问的对象的访问次数小于第二次数阈值;
所述应用系统具有所述操作请求所要访问的对象的访问权限;
所述应用系统具有所述数据库的访问权限;
所述操作请求中的所述操作类型是所述数据库允许对所述操作请求所要访问的对象进行的操作类型。
6.如权利要求1至3任一所述的数据库访问系统,其特征在于,所述操作请求携带对象标识和操作类型,所述数据库访问系统还包括缓存模块;
所述第二ORM框架,用于在所述操作请求中的所述操作类型为查询类型的情况下,对所述操作请求进行哈希运算,得到哈希值;从所述缓存模块中查询与所述哈希值相同的key值;若从所述缓存模块中查询到与所述哈希值相同的key值,则将所述缓存模块中与所述哈希值相同的key值所在的键值对中的value值确定为所述操作请求的请求结果;若从所述缓存模块中未查询到与所述哈希值相同的key值,则对所述操作请求进行解析,得到所述SQL语句,执行所述SQL语句,以访问所述数据库中的数据,得到所述SQL语句的执行结果作为所述操作请求的请求结果,生成目标键值对,将所述目标键值对存储至所述缓存模块,所述目标键值对中的key值为所述哈希值,所述目标键值对中的value值为所述SQL语句的执行结果。
7.如权利要求6所述的数据库访问系统,其特征在于,所述缓存模块用于将键值对与键值对中的value值所属的对象的对象标识进行关联存储;
所述第二ORM框架,用于在所述操作请求中的所述操作类型为更新类型的情况下,删除所述缓存模块中与所述操作请求中的所述对象标识关联存储的所有键值对。
8.一种数据库访问方法,其特征在于,应用于关系对象映射ORM执行引擎,所述ORM执行引擎包括第二ORM框架,所述ORM执行引擎与应用系统进行通信连接,所述ORM执行引擎与数据库进行通信连接,所述应用系统包括第一ORM框架,所述方法包括:
所述第二ORM框架获取所述第一ORM框架发送的操作请求,所述操作请求是所述第一ORM框架根据业务语句生成的,所述操作请求用于请求对所述数据库中的数据进行操作;
所述第二ORM框架对所述操作请求进行解析,得到结构化查询语言SQL语句;
所述第二ORM框架执行所述SQL语句,以访问所述数据库中的数据,得到所述SQL语句的执行结果。
9.如权利要求8所述的方法,其特征在于,所述ORM执行引擎还包括中间件模块,所述中间件模块与所述应用系统进行通信连接;
所述第二ORM框架获取所述第一ORM框架发送的操作请求,包括:
所述中间件模块接收所述第一ORM框架发送的所述操作请求,在满足数据库访问条件的情况下,向所述第二ORM框架发送所述操作请求。
10.如权利要求9所述的方法,其特征在于,所述操作请求携带对象标识和操作类型,所述对象标识用于标识所述操作请求所要访问的对象;
所述数据库访问条件包括以下多项中的至少一项:
所述数据库的访问次数小于第一次数阈值;
所述操作请求所要访问的对象的访问次数小于第二次数阈值;
所述应用系统具有所述操作请求所要访问的对象的访问权限;
所述应用系统具有所述数据库的访问权限;
所述操作请求中的所述操作类型是所述数据库允许对所述操作请求所要访问的对象进行的操作类型。
11.一种计算机设备,其特征在于,所述计算机设备包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求8至10任一项所述的方法。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求8至10任一项所述的方法。
CN202211391763.4A 2022-11-08 2022-11-08 数据库访问系统、方法、计算机设备和存储介质 Pending CN115729912A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202211391763.4A CN115729912A (zh) 2022-11-08 2022-11-08 数据库访问系统、方法、计算机设备和存储介质
PCT/CN2023/111555 WO2024098858A1 (zh) 2022-11-08 2023-08-07 数据库访问系统、方法、计算机设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211391763.4A CN115729912A (zh) 2022-11-08 2022-11-08 数据库访问系统、方法、计算机设备和存储介质

Publications (1)

Publication Number Publication Date
CN115729912A true CN115729912A (zh) 2023-03-03

Family

ID=85294860

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211391763.4A Pending CN115729912A (zh) 2022-11-08 2022-11-08 数据库访问系统、方法、计算机设备和存储介质

Country Status (2)

Country Link
CN (1) CN115729912A (zh)
WO (1) WO2024098858A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117112538A (zh) * 2023-09-05 2023-11-24 中电金信软件有限公司 数据库操作方法、装置、计算机设备和存储介质
WO2024098858A1 (zh) * 2022-11-08 2024-05-16 杭州趣链科技有限公司 数据库访问系统、方法、计算机设备和存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100456237C (zh) * 2007-01-31 2009-01-28 华为技术有限公司 数据库访问方法和装置
US8489647B2 (en) * 2010-08-31 2013-07-16 International Business Machines Corporation Use-case based configuration of an object-relational mapping framework
CN107016016B (zh) * 2016-10-10 2021-04-06 创新先进技术有限公司 一种数据处理的方法及装置
CN115168836A (zh) * 2022-06-14 2022-10-11 天元大数据信用管理有限公司 一种基于orm框架的数据权限隔离方法
CN115729912A (zh) * 2022-11-08 2023-03-03 杭州趣链科技有限公司 数据库访问系统、方法、计算机设备和存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024098858A1 (zh) * 2022-11-08 2024-05-16 杭州趣链科技有限公司 数据库访问系统、方法、计算机设备和存储介质
CN117112538A (zh) * 2023-09-05 2023-11-24 中电金信软件有限公司 数据库操作方法、装置、计算机设备和存储介质

Also Published As

Publication number Publication date
WO2024098858A1 (zh) 2024-05-16

Similar Documents

Publication Publication Date Title
CN115729912A (zh) 数据库访问系统、方法、计算机设备和存储介质
EP2797013B1 (en) Database update execution according to power management schemes
US8874601B2 (en) SADL query view—a model-driven approach to speed-up read-only use cases
EP2653986A2 (en) Client-side caching of database transaction token
US8959117B2 (en) System and method utilizing a generic update module with recursive calls
JP2003006036A (ja) クラスタ化したアプリケーションサーバおよびデータベース構造を持つWebシステム
CN114356921A (zh) 数据处理方法、装置、服务器及存储介质
US10620660B2 (en) Efficient timestamp solution for analyzing concurrent software systems
US11797523B2 (en) Schema and data modification concurrency in query processing pushdown
CN114416798A (zh) 基于数据依赖关系和一致性保证的缓存管理方法及装置
US20210149870A1 (en) Method, apparatus, and computer program product for improved tracking of state data
CN112559560A (zh) 元数据读取方法及装置、更新方法及装置、存储装置
US20230376479A1 (en) Schema and data modification concurrency in query processing pushdown
US20230267119A1 (en) Data retrieval systems and methods
US20170337197A1 (en) Rule management system and method
US11392562B2 (en) Hybrid client transaction mode for key value store
US20050278359A1 (en) Providing mappings between logical time values and real time values in a multinode system
CN108629003B (zh) 内容加载方法与装置
CN112905601A (zh) 一种数据库分表的路由方法及装置
CN112286992B (zh) 一种查询方法、分布式系统、设备及存储介质
US11822485B1 (en) Systems and methods for coupled cache management
US11914575B2 (en) Data persistency models for software applications
US11327963B2 (en) Data retrieval systems and methods
CN113641711B (zh) 一种针对saas租户的数据缓存处理方法、装置及介质
US20230237032A1 (en) On-demand ingestion of records from a staging storage into a primary database

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