CN106777368A - 数据库查询语言适配方法及装置、分布式数据存储系统 - Google Patents
数据库查询语言适配方法及装置、分布式数据存储系统 Download PDFInfo
- Publication number
- CN106777368A CN106777368A CN201710054244.1A CN201710054244A CN106777368A CN 106777368 A CN106777368 A CN 106777368A CN 201710054244 A CN201710054244 A CN 201710054244A CN 106777368 A CN106777368 A CN 106777368A
- Authority
- CN
- China
- Prior art keywords
- database
- code
- language
- client
- predetermined registration
- 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
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/21—Design, administration or maintenance of databases
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据库查询语言适配方法及装置、分布式数据存储系统,基于预先设置的数据库操作的预设标签和预设操作规则实现,方法包括:获取客户端按照预设标签和预设操作规则所编辑的数据库操作相关的代码;根据预设操作规则和数据库适配器,对代码进行解析,得到数据库的操作语言;利用数据库的操作语言实现对数据库的操作。实现对客户端屏蔽数据库的差异性,使客户端不需要考虑数据库的类型和数据库的操作语言。同样,对于客户端使用的不同操作系统,仅需要基于预设标签和预设操作规则,而不需要统一客户端使用的语言。保持客户端、数据库之间的相对独立性。在更换数据库时,也无需修改客户端代码,也使得客户端的代码具有极高的复用性。
Description
技术领域
本发明涉及计算机软件领域,具体涉及一种数据库查询语言适配方法及装置。
背景技术
数据库可以存储和管理数据,还提供给用户所需要的各种数据管理的方式。如支持用户对数据库中存储的数据进行如查询、修改、插入、删除等操作。目前使用的数据库多种多样,有关系型数据库,如Oracle,Mysql,Sql Server等,也有非关系型数据库如MongoDB,CouchDB,DynamoDB,Cassandra等。不同类型数据库使用的数据库语言也各不同。关系型数据库在进行数据查询时使用标准的结构化查询语言(Structured QueryLanguage),而非关系型数据库则主要基于各自定义的领域专用语言(DSL,domainspecific language)。由于不同数据库使用的语言不一致,这样可能导致在数据库发生更换时,往往需要将之前使用的数据库语言相关的代码、逻辑进行修改,重新测试等,需要花费很多的时间和人力,其工作量巨大。例如,数据库由Mysql迁移到MongoDB,原客户端的所有与数据库相关的如查询、修改、插入、删除等操作相关的代码、逻辑都需要进行修改,从而带来庞大的工作量。且在修改后还需要在进行测试等工作,耗费巨大的人力、物力和时间。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的数据库查询语言适配方法及装置。
根据本发明的一个方面,提供了一种数据库查询语言适配方法,方法基于预先设置的数据库操作的预设标签和预设操作规则实现,方法包括:
获取客户端按照预设标签和预设操作规则所编辑的数据库操作相关的代码;
根据预设操作规则和数据库适配器,对代码进行解析,得到数据库的操作语言;
利用数据库的操作语言实现对数据库的操作。
根据本发明的另一方面,提供了一种数据库查询语言适配装置,装置基于预先设置的数据库操作的预设标签和预设操作规则实现,装置包括:
获取模块,适于获取客户端按照预设标签和预设操作规则所编辑的数据库操作相关的代码;
解析模块,适于根据预设操作规则和数据库适配器,对代码进行解析,得到数据库的操作语言;
执行模块,适于利用数据库的操作语言实现对数据库的操作。
根据本发明的又一方面,提供了一种分布式数据存储系统,包括:客户端、分布式组件和数据库;
其中,分布式组件包括上述的数据库查询语言适配装置。
根据本发明提供的数据库查询语言适配方法及装置、分布式数据存储系统,基于预先设置的数据库操作的预设标签和预设操作规则实现。获取客户端按照预设标签和预设操作规则所编辑的数据库操作相关的代码;根据预设操作规则和数据库适配器,对代码进行解析,得到数据库的操作语言;利用数据库的操作语言实现对数据库的操作。利用本发明可以对客户端屏蔽数据库的差异性,使客户端不需要考虑数据库的类型和数据库使用的操作语言。同样,对于客户端使用的不同操作系统,仅需要基于预设标签和预设操作规则实现,而不需要统一客户端使用的语言。保持了客户端、数据库之间的相对独立性。对客户端而言,无论何种数据库都可以统一使用同一套数据操作的代码。对于数据库,涉及数据库更换时,也无需修改所有客户端的代码,极大的节省了人力、物力和时间,也使得客户端的代码具有极高的复用性。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的数据库查询语言适配方法的流程图;
图2示出了根据本发明分布式数据存储系统框架示意图;
图3示出了根据本发明另一个实施例的数据库查询语言适配方法的流程图;
图4示出了根据本发明一个实施例的数据库查询语言适配装置的功能框图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的数据库操作方法的流程图。如图1所示,数据库查询语言适配方法具体包括如下步骤:
步骤S101,获取客户端按照预设标签和预设操作规则所编辑的数据库操作相关的代码。
在本步骤之前,本实施例还可以包括了预先设置数据库操作的预设标签和预设操作规则的步骤。由于不同的数据库适用不同的数据库操作语言,因此,在客户端需要根据具体使用的数据库编辑合适的代码,以便于对使数据库执行相应操作。即客户端在使用不同的数据库时,需要编辑不同的代码。针对此种情况,通过预先设置数据库操作的预设标签和预设操作规则,使客户端按照预设标签和预设操作规则编辑的数据库操作相关的代码。即客户端可以根据预设标签和预设操作规则编辑一套代码,可以适用于不同的数据库。
本实施例可以适用于如分布式数据存储系统,系统具体包括:客户端、Linux虚拟服务器集群(LVS)、分布式组件(HustDB HA,简称HA)和数据库。本实施例基于分布式组件侧进行实施。如图2中所示。客户端可以采用不同的操作系统,如IOS系统、android系统、Windows系统、macOS系统等等,不同的系统采用的语言也可以不同。数据库可以包括关系型数据库和/或非关系型数据库。关系型数据库,如Oracle,Mysql,Sql Server等,非关系型数据库如MongoDB,CouchDB,DynamoDB,Cassandra等。其中,图2中仅示出了客户端、数据库及服务器端。服务器端可以包括Linux虚拟服务器集群和分布式组件。
需要说明的是,本实施例可以基于多种系统架构进行实施,而不仅限于上述的分布式数据存储系统的架构。
预先设置预设标签和预设操作规则可以由分布式组件完成。在预先设置数据库的预设标签时,根据各种数据库操作语言进行分析,从中提取出其中包含的要素,将其设置为数据库的预设标签。如预设标签包括数据库名称、数据表名称、操作类型、查询参数集合、数据值集合等。通过数据库名称和数据表名称可以确定要操作的具体对象。操作类型具体包括了如查询select、更新update、插入insert、删除delete、自定义操作customize等操作类型,其中。查询select、更新update、插入insert、删除delete等是数据库常用的实现对数据库中数据操作的数据操纵语言。自定义操作customize为数据库自定义的对数据库的操作。操作类型中可以包括对数据库中数据的不同类型的操作,还可以包括对数据库中数据表、权限的不同类型的操作,根据实施情况进行设置,此处不做限定。数据值集合中可以以key:value的形式,将数据库中数据字段与对应的数据值进行记录。查询参数集合包括了各种查询条件可能出现的情况。其以查询query预设标签进行总体设置。由于查询时可以涉及多个方面,因此,查询参数集合具体可以包括如各种函数集合、分页、排序、分组、条件集合等。函数集合包括了数据库使用的函数,如求和函数sum、最大值函数max、最小值函数min、唯一不同值函数distinct、计数函数count等,使用这些函数可以得到对应的结果。分页可以在查询结果数据量较大时,提供仅查询出需要的数据量的查询结果。如查询时使用分页查询,设置查询结果为from 1 size 10,即从第一条查询结果起,仅查询出10条查询结果,以方便提高查询时的执行效率。排序可以使查询结果按照设置的数据字段进行升序或降序的排序。分组可以选择指定的数据字段进行分组,具体的对该数据字段中的数据值进行分组统计。条件集合可以包括了各种查询条件之间的关系,如与关系and、或关系or、属于关系in、range、不属于关系not in、大于关系gte、小于关系lte等。使用条件集合中的各种预设标签可以对查询条件进行限定。以上预设标签均为举例说明,实施时根据实际情况进行设置,此处不做限定。
在预先设置数据库的预设标签后,还需要对预设标签的使用、与数据库操作相关的代码限制等预先设置预设操作规则。预设操作规则包括对某一个预设标签的内容的限定、使用的规范、预设标签之间的关联关系、与数据库操作相关的代码中必须包括的内容等等。如数据库名称、数据表名称、操作类型等预设标签为与数据库操作相关的代码中必须包括的内容;当操作类型为插入insert时,与数据库操作相关的代码中必须包括数据值集合等;还可以根据数据库操作语言的特点,对与数据库操作相关的代码的编辑进行设置等。以上均为举例说明,实施时根据实际情况进行设置,此处不做限定。
在预先设置数据库操作的预设标签和预设操作规则的步骤之后,客户端对与数据库操作相关的代码进行编辑。编辑时,需按照预设标签和预设操作规则进行编辑。其中,代码可以基于json语言实现。如编辑数据库的插入操作代码如下:
编辑数据库的查询操作代码如下:
编辑数据库的更新操作代码如下:
编辑数据库的删除操作代码如下:
以上代码均为举例说明,实施时根据实际情况进行编辑,此处不做限定。
在客户端编辑与数据库操作相关的代码后,获取客户端按照预设标签和预设操作规则所编辑的数据库操作相关的代码。
步骤S102,根据预设操作规则和数据库适配器,对代码进行解析,得到数据库的操作语言。
根据预设操作规则对获取的代码进行检查、校验是否符合预设操作规则。并进一步根据数据库适配器,对代码进行解析。如数据库为Mysql时,将数据库的插入操作代码进行解析,操作代码为:
解析后得到数据库对应的插入操作的数据库语音:insert into test_db.test_table_t(id,type,user_id,user_name)values(’12366’,’type3’,’98765’,’jobs’)。
对应的,数据库可以采用关系型数据库,也可以采用非关系型数据库。根据具体采用的数据库,数据库适配器将代码解析为适用于该数据库的数据库操作语言。其中,数据库适配器可以设置在如图2中所示的服务器端。
在分布式数据存储系统中,除设置数据库适配器,根据预设操作规则和数据库适配器,对代码进行解析,得到数据库的操作语言外。进一步,将分布式组件与数据库分离,使数据库只负责数据存储,以及对外提供http接口,以供分布式组件根据所提供的http接口向对应的数据库节点写入数据,其中,数据库包括多个数据库节点,各个数据库节点是相互独立的,数据库节点彼此之间不会直接进行通信,从而降低了数据库的复杂度。另外,分布式组件中的每个节点都是独立的,当某一HA节点宕机时,LVS会自动将数据写请求发送至分布式组件中的其他可用的HA节点,从而解决了HA的单点限制。当需要提高系统的吞吐率时,也只需要简单地增加HA节点即可实现。分布式组件作为客户端与数据库之间的反向代理,对客户端屏蔽数据库各种操作的细节,保证数据库节点的http接口的透明性。当某一个数据库节点宕机时,HA会自动对数据写请求进行负载均衡,保证整个系统依然可用,从而解决数据存储的单点限制。
分布式数据存储系统中还涉及数据同步。其中,数据同步可以通过两种模式实现。模式一:放在HA的实现中,和HA的master进程耦合在一起(不可能放在worker中,因为nginx的进程模型是1master-N worker,而数据同步的服务只能存在于一个进程中)。模式二:作为单独的服务,即,将数据同步模块和HA分离。模式一的好处是开发简单,部署简单,缺点是会当数据同步崩溃时,会导致HA的master进程一起退出,从而使HA的单节点丧失高可用性,生产环境中这会带来巨大的风险。模式二的好处是服务隔离,进程隔离,HA不再和数据同步耦合在一起,两者仅仅通过文件即可协同完成数据同步的功能,当Sync Server意外退出时,HA的master进程不受影响,服务整体依然可用,缺点是开发和部署的工作量增大。HA最终选择模式二来完成Sync Server,这样的设计使得HA的复杂度大大降低,无需关注数据同步的细节,只需要将不一致的数据记录成binlog即可,在极大程度上提高了HA以及整个存储系统的高可用性,并保证集群数据的最终一致性。
目前业界主流的存储对于replica的实现存在两种模式:模式一:1Primary-1Replica Shard,模式二:1Primary-N Replica Shards。HA选用了工程上更加可行的模式一。模式二由于一份数据具有更多的备份,因此具备更高的的可用性,但同时带来了更多的数据一致性问题和实现的复杂度。模式一在高可用性方面不如模式二,但在实现难度方面要小很多,因此相对而言,模式一更加适用。
分布式数据存储系统的分布式组件为反向代理服务器,具体可以是Nginx服务器,Nginx是高吞吐高并发的http反向代理,由于HA并不需要对数据库节点上的数据进行合并(merge),因此为了提高系统的吞吐量和并发量,HA的进程模型为1master-N worker,其中master进程会对worker进程进行自动保活,这一点保证了HA单个节点的高可用性和高吞吐性。由于各个进程是独立的,因此对于少部分用到共享数据的接口,需要利用共享内存来进行通信。Nginx服务器现有的负载均衡策略将数据库节点地址等细节完全对外屏蔽了,也就是说,对于开发者来说这些细节是透明的,不需要开发者考虑,可以通过定制化的负载均衡,实现将数据写入指定的数据库节点。
步骤S103,利用数据库的操作语言实现对数据库的操作。
解析得到数据库对应的数据库操作语言后,利用该数据库操作语言,实现对数据库的操作。如对数据库进行查询、插入、更新、删除等操作,并将对应的操作结果可以返回给客户端,以供客户端根据操作结果进行相应的处理。
根据本发明提供的数据库查询语言适配方法,基于预先设置的数据库操作的预设标签和预设操作规则实现。获取客户端按照预设标签和预设操作规则所编辑的数据库操作相关的代码;根据预设操作规则和数据库适配器,对代码进行解析,得到数据库的操作语言;利用数据库的操作语言实现对数据库的操作。利用本发明可以对客户端屏蔽数据库的差异性,使客户端不需要考虑数据库的类型和数据库使用的操作语言。同样,对于客户端使用的不同操作系统,仅需要基于预设标签和预设操作规则实现,而不需要统一客户端使用的语言。保持了客户端、数据库之间的相对独立性。对客户端而言,无论何种数据库都可以统一使用同一套数据操作的代码。对于数据库,涉及数据库更换时,也无需修改所有客户端的代码,极大的节省了人力、物力和时间,也使得客户端的代码具有极高的复用性。
图3示出了根据本发明另一个实施例的数据库查询语言适配方法的流程图。如图3所示,数据库查询语言适配方法具体包括如下步骤:
步骤S301,获取客户端按照预设标签和预设操作规则所编辑的数据库操作相关的代码。
本发明可以适用于安卓端,ios,PC端,MAC端的安全类产品或者其他应用数据库的云平台或者客户端产品。
在本步骤之前,还包括了预先设置预设标签和预设操作规则。在预先设置预设标签和预设操作规则时,根据各种数据库操作语言进行分析,从中提取出其中包含的要素等信息进行设置。
客户端按照预设标签和预设操作规则编辑与数据库操作相关的代码。在涉及数据库操作时,如对数据库进行插入操作时,获取客户端按照预设标签和预设操作规则所编辑的数据库操作相关的代码。
步骤S302,判断代码是否符合预设操作规则。
根据预设操作规则对代码进行判断,如判断代码中所使用的是否为预设标签;代码中是否包括了数据库名称、数据表名称;代码中是否包括操作类型,其中操作类型设置的是否为预设标签;在操作类型为插入insert时,代码中是否包括了数据值集合;在操作类型为更新update时,代码中是否包括了查询的预设标签和数据值集合;代码中包括的数据值集合是否符合预设操作规则的设置;代码中使用的查询参数集合中的函数是否为预设标签;代码中使用的分页、排序、分组或条件集合等是否为预设标签,编辑格式是否正确等。以上均为举例说明,实施时根据实际情况进行判断,此处不做限定。
若判断代码符合预设操作规则,执行步骤S303。进一步,若在测试阶段,判断代码不符合预设操作规则,可以进行提示,如提示代码中不符合预设操作规则的部分,以便客户端进行相应的修改(图中未示出)。
步骤S303,根据数据库适配器对代码中进行解析,得到对应的数据库的操作语言。
根据数据库设置对应的数据库适配器,数据库和数据库适配器可以均设置在服务器端。通过数据库适配器将代码进行解析,解析为对应的该数据库适用的数据库操作语言。
步骤S304,将数据库的操作语言发送给数据库,接收数据库返回的执行结果。
将解析得到的数据库操作语言由服务器端如分布式组件发送给数据库,其中,若数据库存在多个数据库节点时,各个数据库节点是相互独立的,分布式组件可以通过定制化的负载均衡等方式,将数据库操作语言发送给数据库节点,以供数据库节点执行该数据库操作语言。
同时,在接收数据库返回的执行结果后,将其返回给客户端。客户端可以根据该执行结果进行相应的操作,以完成整个对数据库查询语言适配的过程。
根据本发明提供的数据库查询语言适配方法,基于预先设置的数据库操作的预设标签和预设操作规则实现。获取客户端按照预设标签和预设操作规则所编辑的数据库操作相关的代码。根据预设操作规则判断代码是否符合预设操作规则,以保证代码的准确性和规范性,方便后续根据数据库适配器对代码中进行解析,得到对应的数据库的操作语言。并将数据库的操作语言发送给数据库,接收数据库返回的执行结果。实现对客户端屏蔽数据库的差异性,使客户端无视数据库,仅根据需要编辑与数据库相关操作的代码。同样,对于客户端使用的不同操作系统,仅需要基于预设标签和预设操作规则实现,而不需要统一客户端使用的语言。保持了客户端、数据库之间的相对独立性。当需要更换数据库时,无需修改客户端的代码,仅通过不同的数据库适配器即可实现数据库的更换。整个过程极大的节省了人力、物力和时间,也使得客户端的代码具有极高的复用性。
图4示出了根据本发明一个实施例的数据库查询语言适配装置的功能框图。如图4所示,数据库查询语言适配装置包括如下模块:
获取模块410,适于获取客户端按照预设标签和预设操作规则所编辑的数据库操作相关的代码。
不同的数据库适用不同的数据库操作语言,因此,在客户端需要根据具体使用的数据库编辑合适的代码,以便于对使数据库执行相应操作。即客户端在使用不同的数据库时,需要编辑不同的代码。针对此种情况,本实施例预先设置数据库操作的预设标签和预设操作规则,基于预先设置数据库操作的预设标签和预设操作规则进行实现,使客户端按照预设标签和预设操作规则编辑的数据库操作相关的代码,即客户端仅编辑一套代码,适用于不同的数据库。其中,数据库可以包括关系型数据库和/或非关系型数据库。关系型数据库,如Oracle,Mysql,Sql Server等,非关系型数据库如MongoDB,CouchDB,DynamoDB,Cassandra等。
本实施例还可以包括设置模块(图中未示出)预先设置数据库操作的预设标签和预设操作规则。设置模块在预先设置数据库的预设标签时,根据各种数据库操作语言进行分析,从中提取出其中包含的要素,将其设置为数据库的预设标签。如设置模块预先设置了预设标签。预设标签中包括数据库名称、数据表名称、操作类型、查询参数集合、数据值集合等。设置模块通过数据库名称和数据表名称可以确定要操作的具体对象。操作类型具体包括了如查询select、更新update、插入insert、删除delete、自定义操作customize等操作类型,其中。查询select、更新update、插入insert、删除delete等是数据库常用的实现对数据库中数据操作的数据操纵语言。自定义操作customize为数据库自定义的对数据库的操作。操作类型中可以包括对数据库中数据的不同类型的操作,还可以包括对数据库中数据表、权限的不同类型的操作,根据实施情况进行设置,此处不做限定。数据值集合中可以以key:value的形式,将数据库中数据字段与对应的数据值进行记录。查询参数集合包括了各种查询条件可能出现的情况。其以查询query预设标签进行总体设置。由于查询时可以涉及多个方面,因此,查询参数集合具体可以包括如各种函数集合、分页、排序、分组、条件集合等。函数集合包括了数据库使用的函数,如求和函数sum、最大值函数max、最小值函数min、唯一不同值函数distinct、计数函数count等,使用这些函数可以得到对应的结果。分页可以在查询结果数据量较大时,提供仅查询出需要的数据量的查询结果。如查询时使用分页查询,设置查询结果为from 1size 10,即从第一条查询结果起,仅查询出10条查询结果,以方便提高查询时的执行效率。排序可以使查询结果按照设置的数据字段进行升序或降序的排序。分组可以选择指定的数据字段进行分组,具体的对该数据字段中的数据值进行分组统计。条件集合可以包括了各种查询条件之间的关系,如与关系and、或关系or、属于关系in、range、不属于关系not in、大于关系gte、小于关系lte等。使用条件集合中的各种预设标签可以对查询条件进行限定。以上预设标签均为举例说明,实施时根据实际情况进行设置,此处不做限定。
设置模块在预先设置数据库的预设标签后,还需要对预设标签的使用、与数据库操作相关的代码限制等预先设置预设操作规则。预设操作规则包括对某一个预设标签的内容的限定、使用的规范、预设标签之间的关联关系、与数据库操作相关的代码中必须包括的内容等等。如设置模块中预设操作规则包括数据库名称、数据表名称、操作类型等预设标签为与数据库操作相关的代码中必须包括的内容;当操作类型为插入insert时,与数据库操作相关的代码中必须包括数据值集合等;还可以根据数据库操作语言的特点,对与数据库操作相关的代码的编辑进行设置等。以上均为举例说明,实施时根据实际情况进行设置,此处不做限定。
在设置模块预先设置数据库操作的预设标签和预设操作规则之后,客户端对与数据库操作相关的代码进行编辑。客户端在进行编辑时,需按照预设标签和预设操作规则进行编辑。其中,代码可以基于json语言实现。如客户端编辑数据库的插入操作代码如下:
客户端编辑数据库的查询操作代码如下:
客户端编辑数据库的更新操作代码如下:
客户端编辑数据库的删除操作代码如下:
以上代码均为举例说明,实施时根据实际情况进行编辑,此处不做限定。
在客户端编辑与数据库操作相关的代码后,获取模块310获取客户端按照预设标签和预设操作规则所编辑的数据库操作相关的代码。
解析模块420,适于根据预设操作规则和数据库适配器,对代码进行解析,得到数据库的操作语言。
解析模块420根据预设操作规则对获取的代码进行检查、校验是否符合预设操作规则。具体的,解析模块420还包括了判断模块421。判断模块421判断代码是否符合预设操作规则。
判断模块421根据预设操作规则对代码进行判断,如判断模块421判断代码中所使用的是否为预设标签;代码中是否包括了数据库名称、数据表名称;代码中是否包括操作类型,其中操作类型设置的是否为预设标签;在操作类型为插入insert时,代码中是否包括了数据值集合;在操作类型为更新update时,代码中是否包括了查询的预设标签和数据值集合;代码中包括的数据值集合是否符合预设操作规则的设置;代码中使用的查询参数集合中的函数是否为预设标签;代码中使用的分页、排序、分组或条件集合等是否为预设标签,编辑格式是否正确等。以上均为举例说明,实施时根据实际情况进行判断,此处不做限定。
若判断模块421判断代码符合预设操作规则,解析模块420对代码进行解析。
进一步,若在测试阶段,判断模块421判断代码不符合预设操作规则,判断模块421可以进行提示,如判断模块421提示代码中不符合预设操作规则的部分,以便客户端进行相应的修改。
解析模块420进行解析时,根据数据库适配器,解析模块420对代码进行解析。如数据库为Mysql时,解析模块420将数据库的插入操作代码进行解析,操作代码为:
解析模块420解析后得到数据库对应的插入操作的数据库语音:insert intotest_db.test_table_t(id,type,user_id,user_name)values(’12366’,’type3’,’98765’,’jobs’)。
执行模块430,适于利用数据库的操作语言实现对数据库的操作。
执行模块430利用数据库操作语言,实现对数据库的操作。如执行模块430将解析得到的数据库操作语言发送给数据库,以供数据库执行该数据库操作语言。实现对数据库进行查询、插入、更新、删除等操作。执行模块430还接收数据库返回的执行结果,将其返回给客户端。以供客户端根据操作结果进行相应的处理。
根据本发明提供的数据库查询语言适配装置,基于预先设置的数据库操作的预设标签和预设操作规则实现。获取客户端按照预设标签和预设操作规则所编辑的数据库操作相关的代码。根据预设操作规则判断代码是否符合预设操作规则,以保证代码的准确性和规范性,方便后续根据数据库适配器对代码中进行解析,得到对应的数据库的操作语言。并将数据库的操作语言发送给数据库,接收数据库返回的执行结果。实现对客户端屏蔽数据库的差异性,使客户端无视数据库,仅根据需要编辑与数据库相关操作的代码。当需要更换数据库时,无需修改客户端的代码,仅通过不同的数据库适配器即可实现数据库的更换。整个过程极大的节省了人力、物力和时间,也使得客户端的代码具有极高的复用性。
本发明还提供了一种分布式数据存储系统。其中,分布式数据存储系统包括客户端、分布式组件和数据库。其系统架构可以如图2所示的结构。客户端可以采用不同的操作系统,如IOS系统、android系统、Windows系统、macOS系统等等,即客户端可以为IOS移动设备、安卓移动设备、PC机、平板电脑等,各种不同的系统采用的语言也可以不同。数据库可以包括如图所示的Mysql、MongoDB、Oracle、DynamoDB等,除此之外,还可以包括其他关系型数据库和/或非关系型数据库。关系型数据库,如Sql Server等,非关系型数据库如CouchDB、Cassandra等。分布式组件设置与服务器之上,分布式组件包括了以上各实施例的数据库查询语言适配装置。数据库查询语言适配装置的描述可参考上述的实施例,在此不再赘述。
分布式数据存储系统中的分布式组件可以为反向代理服务器,具体可以是Nginx服务器。Nginx是高吞吐高并发的http反向代理。对应的数据库可以设置多个数据库节点,Nginx服务器现有的负载均衡策略可以将数据库节点地址等细节完全对外屏蔽,对于开发者而言数据库节点设置等细节是透明的,不需要考虑,通过Nginx服务器的定制化的负载均衡,实现对指定的数据库节点的相应操作。
根据本发明提供的分布式数据存储系统,通过分布式组件中包括的数据库查询语言适配装置,实现对客户端屏蔽数据库的差异性,使客户端无视数据库,仅根据需要编辑与数据库相关操作的代码。同样,对于客户端使用的不同操作系统,仅需要基于预设标签和预设操作规则实现,而不需要统一客户端使用的语言。保持了客户端、数据库之间的相对独立性。当需要更换数据库时,无需修改客户端的代码,仅通过不同的数据库适配器即可实现数据库的更换。整个过程极大的节省了人力、物力和时间,也使得客户端的代码具有极高的复用性。进一步,分布式组件中的定制化的负载均衡,可实现对指定的数据库节点进行相应操作,使系统中数据库存在多个节点地址等细节对开发者透明,不需开发者考虑,使代码处理更加简单。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的数据库查询语言适配装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本发明公开了:A1、一种数据库查询语言适配方法,所述方法基于预先设置的数据库操作的预设标签和预设操作规则实现,所述方法包括:
获取客户端按照所述预设标签和所述预设操作规则所编辑的数据库操作相关的代码;
根据所述预设操作规则和数据库适配器,对所述代码进行解析,得到数据库的操作语言;
利用所述数据库的操作语言实现对数据库的操作。
A2、根据A1所述的方法,其中,所述数据库操作的预设标签包括数据库名称、数据表名称、操作类型、查询参数集合和/或数据值集合。
A3、根据A2所述的方法,其中,所述操作类型包括查询、更新、插入、删除和/或自定义操作。
A4、根据A2所述的方法,其中,所述查询参数集合包括函数集合、分页、排序、分组和/或条件集合。
A5、根据A1所述的方法,其中,所述数据库包括关系型数据库和/或非关系型数据库。
A6、根据A1所述的方法,其中,所述代码基于json语言实现。
A7、根据A1-A6任一项所述的方法,其中,所述根据所述预设操作规则和数据库适配器,对所述代码进行解析,得到数据库的操作语言进一步包括:
判断所述代码是否符合所述预设操作规则;
若是,根据数据库适配器对所述代码中进行解析,得到对应的数据库的操作语言。
A8、根据A1-A7任一项所述的方法,其中,所述利用所述数据库的操作语言实现对数据库的操作进一步包括:
将所述数据库的操作语言发送给数据库,接收数据库返回的执行结果。
本发明还公开了:B9、一种数据库查询语言适配装置,所述装置基于预先设置的数据库操作的预设标签和预设操作规则实现,所述装置包括:
获取模块,适于获取客户端按照所述预设标签和所述预设操作规则所编辑的数据库操作相关的代码;
解析模块,适于根据所述预设操作规则和数据库适配器,对所述代码进行解析,得到数据库的操作语言;
执行模块,适于利用所述数据库的操作语言实现对数据库的操作。
B10、根据B9所述的装置,其中,所述数据库操作的预设标签包括数据库名称、数据表名称、操作类型、查询参数集合和/或数据值集合。
B11、根据B10所述的装置,其中,所述操作类型包括查询、更新、插入、删除和/或自定义操作。
B12、根据B10所述的装置,其中,所述查询参数集合包括函数集合、分页、排序、分组和/或条件集合。
B13、根据B9所述的装置,其中,所述数据库包括关系型数据库和/或非关系型数据库。
B14、根据B9所述的装置,其中,所述代码基于json语言实现。
B15、根据B9-B14任一项所述的装置,其中,所述解析模块包括:
判断模块,适于判断所述代码是否符合所述预设操作规则;
所述解析模块进一步适于:若是,根据数据库适配器对所述代码中进行解析,得到对应的数据库的操作语言。
B16、根据B9-B15任一项所述的装置,其中,所述执行模块进一步适于:
将所述数据库的操作语言发送给数据库,接收数据库返回的执行结果。
本发明还公开了:C17、一种分布式数据存储系统,其中,包括客户端、分布式组件和数据库;
其中,所述分布式组件包括B9-B16任一项所述的数据库查询语言适配装置。
C18、根据C17所述的系统,其中,所述分布式组件为反向代理服务器。
C19、根据C17或C18所述的系统,其中,所述分布式组件为Nginx服务器。
Claims (10)
1.一种数据库查询语言适配方法,所述方法基于预先设置的数据库操作的预设标签和预设操作规则实现,所述方法包括:
获取客户端按照所述预设标签和所述预设操作规则所编辑的数据库操作相关的代码;
根据所述预设操作规则和数据库适配器,对所述代码进行解析,得到数据库的操作语言;
利用所述数据库的操作语言实现对数据库的操作。
2.根据权利要求1所述的方法,其中,所述数据库操作的预设标签包括数据库名称、数据表名称、操作类型、查询参数集合和/或数据值集合。
3.根据权利要求2所述的方法,其中,所述操作类型包括查询、更新、插入、删除和/或自定义操作。
4.根据权利要求2所述的方法,其中,所述查询参数集合包括函数集合、分页、排序、分组和/或条件集合。
5.根据权利要求1所述的方法,其中,所述数据库包括关系型数据库和/或非关系型数据库。
6.根据权利要求1所述的方法,其中,所述代码基于json语言实现。
7.根据权利要求1-6任一项所述的方法,其中,所述根据所述预设操作规则和数据库适配器,对所述代码进行解析,得到数据库的操作语言进一步包括:
判断所述代码是否符合所述预设操作规则;
若是,根据数据库适配器对所述代码中进行解析,得到对应的数据库的操作语言。
8.根据权利要求1-7任一项所述的方法,其中,所述利用所述数据库的操作语言实现对数据库的操作进一步包括:
将所述数据库的操作语言发送给数据库,接收数据库返回的执行结果。
9.一种数据库查询语言适配装置,所述装置基于预先设置的数据库操作的预设标签和预设操作规则实现,所述装置包括:
获取模块,适于获取客户端按照所述预设标签和所述预设操作规则所编辑的数据库操作相关的代码;
解析模块,适于根据所述预设操作规则和数据库适配器,对所述代码进行解析,得到数据库的操作语言;
执行模块,适于利用所述数据库的操作语言实现对数据库的操作。
10.一种分布式数据存储系统,其中,包括客户端、分布式组件和数据库;
其中,所述分布式组件包括权利要求9所述的数据库查询语言适配装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710054244.1A CN106777368A (zh) | 2017-01-24 | 2017-01-24 | 数据库查询语言适配方法及装置、分布式数据存储系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710054244.1A CN106777368A (zh) | 2017-01-24 | 2017-01-24 | 数据库查询语言适配方法及装置、分布式数据存储系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106777368A true CN106777368A (zh) | 2017-05-31 |
Family
ID=58942581
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710054244.1A Pending CN106777368A (zh) | 2017-01-24 | 2017-01-24 | 数据库查询语言适配方法及装置、分布式数据存储系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106777368A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107622091A (zh) * | 2017-08-23 | 2018-01-23 | 阿里巴巴集团控股有限公司 | 一种数据库查询方法和装置 |
CN109460416A (zh) * | 2018-12-12 | 2019-03-12 | 成都四方伟业软件股份有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
CN110162534A (zh) * | 2019-05-30 | 2019-08-23 | 北京百度网讯科技有限公司 | 数据管理方法及数据存储系统 |
CN110473138A (zh) * | 2019-07-11 | 2019-11-19 | 北京达佳互联信息技术有限公司 | 图形代码转换方法、装置、电子设备及存储介质 |
CN113688148A (zh) * | 2021-07-13 | 2021-11-23 | 交控科技股份有限公司 | 城轨数据查询方法、装置、电子设备及可读存储介质 |
CN117390040A (zh) * | 2023-12-11 | 2024-01-12 | 深圳大道云科技有限公司 | 基于实时宽表的业务请求处理方法、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1904885A (zh) * | 2005-07-29 | 2007-01-31 | 北京航空航天大学 | 数据库适配器 |
US20080046419A1 (en) * | 2005-01-18 | 2008-02-21 | International Business Machines Corporation | System And Method For Planning And Generating Queries For Multi-Dimensional Analysis Using Domain Models And Data Federation |
CN103902677A (zh) * | 2014-03-21 | 2014-07-02 | 西安理工大学 | 一种跨平台的数据库访问方法 |
CN104361099A (zh) * | 2014-11-21 | 2015-02-18 | 北京邮电大学 | 一种面向异构存储的适配装置 |
-
2017
- 2017-01-24 CN CN201710054244.1A patent/CN106777368A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080046419A1 (en) * | 2005-01-18 | 2008-02-21 | International Business Machines Corporation | System And Method For Planning And Generating Queries For Multi-Dimensional Analysis Using Domain Models And Data Federation |
CN1904885A (zh) * | 2005-07-29 | 2007-01-31 | 北京航空航天大学 | 数据库适配器 |
CN103902677A (zh) * | 2014-03-21 | 2014-07-02 | 西安理工大学 | 一种跨平台的数据库访问方法 |
CN104361099A (zh) * | 2014-11-21 | 2015-02-18 | 北京邮电大学 | 一种面向异构存储的适配装置 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107622091A (zh) * | 2017-08-23 | 2018-01-23 | 阿里巴巴集团控股有限公司 | 一种数据库查询方法和装置 |
CN109460416A (zh) * | 2018-12-12 | 2019-03-12 | 成都四方伟业软件股份有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
CN109460416B (zh) * | 2018-12-12 | 2020-02-04 | 成都四方伟业软件股份有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
CN110162534A (zh) * | 2019-05-30 | 2019-08-23 | 北京百度网讯科技有限公司 | 数据管理方法及数据存储系统 |
CN110162534B (zh) * | 2019-05-30 | 2021-10-26 | 阿波罗智能技术(北京)有限公司 | 数据管理方法及数据存储系统 |
CN110473138A (zh) * | 2019-07-11 | 2019-11-19 | 北京达佳互联信息技术有限公司 | 图形代码转换方法、装置、电子设备及存储介质 |
CN113688148A (zh) * | 2021-07-13 | 2021-11-23 | 交控科技股份有限公司 | 城轨数据查询方法、装置、电子设备及可读存储介质 |
CN117390040A (zh) * | 2023-12-11 | 2024-01-12 | 深圳大道云科技有限公司 | 基于实时宽表的业务请求处理方法、设备及存储介质 |
CN117390040B (zh) * | 2023-12-11 | 2024-03-29 | 深圳大道云科技有限公司 | 基于实时宽表的业务请求处理方法、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106777368A (zh) | 数据库查询语言适配方法及装置、分布式数据存储系统 | |
CN104838377B (zh) | 利用映射缩减集成事件处理 | |
CN103678494B (zh) | 客户端同步服务端数据的方法及装置 | |
CN110309196A (zh) | 区块链数据存储和查询方法、装置、设备及存储介质 | |
CN104679532B (zh) | 内核模块加载方法和装置 | |
CN105528294A (zh) | 一种接口测试用例自动生成的方法及系统 | |
CN105867990A (zh) | 软件开发一体化的方法及装置 | |
CN104965735A (zh) | 用于生成升级sql脚本的装置 | |
CN109408493A (zh) | 一种数据源的迁移方法及系统 | |
CN107193917B (zh) | 基于iid的全站系统配置文件无损数据更新方法 | |
CN103678446B (zh) | 基于数据视图和数据库表的改进的模式映射 | |
CN103761189A (zh) | 一种测试用例管理方法及系统 | |
EP2965492B1 (en) | Selection of data storage settings for an application | |
CN107480268A (zh) | 数据查询方法及装置 | |
CN104657164B (zh) | 软件升级处理方法和装置 | |
CN108427709B (zh) | 一种多源海量数据处理系统及方法 | |
CN109191078A (zh) | 一种流程业务建模方法、装置及设备 | |
CN105701605B (zh) | 一种应用于综合通信导航识别系统中的波形库管理设备 | |
CN106790489A (zh) | 并行数据加载方法和系统 | |
CN111984882A (zh) | 数据处理方法、系统及设备 | |
CN103678687B (zh) | 基于配置系统的项目创建方法及装置 | |
CN110532184B (zh) | 多场景模拟响应的方法、装置、计算机设备及存储介质 | |
CN108021589A (zh) | 数据库的查询维度的配置方法和装置 | |
CN104391845A (zh) | 一种生成数据库脚本的方法及装置 | |
US10003492B2 (en) | Systems and methods for managing data related to network elements from multiple sources |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170531 |
|
RJ01 | Rejection of invention patent application after publication |