发明内容
本发明实施例提供一种数据共享的方法、系统和装置,以有效的实现单次调用数据充分共享,减少业务逻辑的负担。
本发明实施例提供一种数据共享的方法,包括:
接收到查询数据请求,根据条件控制逻辑判断所述查询数据请求是否访问线程缓存;
所述判断结果为访问所述线程缓存时,向所述线程缓存发送查询请求;
接收所述线程缓存返回的查询结果数据,向所述查询数据请求的发送方返回所述查询结果数据;
所述判断结果为不访问线程缓存时,向数据访问控制器发送查询数据请求,并接收所述数据访问控制器在数据库中查询得到的查询结果数据,向所述查询数据请求的发送方返回所述查询结果数据。
所述数据共享的方法,其特征在于,所述接收到查询数据请求之前还包括:
将缓存与线程进行绑定形成所述线程缓存。
所述数据共享的方法,其特征在于,所述形成所述线程缓存后使用所述线程的线程变量标识所述缓存的生命周期,使所述缓存与所述线程的生命周期一致。
所述数据共享的方法,其特征在于,所述判断是否访问线程缓存具体包括:
根据条件控制逻辑判断所述查询数据请求是否访问线程缓存。
所述数据共享的方法,其特征在于,所述接收数据访问控制器在数据库中查询得到的查询结果数据之后,还包括:
判断所述查询结果数据是否录入线程缓存;
所述判断结果为录入线程缓存,将所述查询结果数据录入线程缓存。
所述数据共享的方法,其特征在于,所述接收所述线程缓存返回的查询结果数据后还包括:
判断查询结果数据是否有效;
所述判断结果为有效,向所述查询数据请求的发送方返回所述查询结果数据;
所述判断结果为无效,向数据访问控制器发送查询数据请求。
所述数据共享的方法,其特征在于,所述向所述查询数据请求的发送方返回所述查询结果数据后还包括:
接收到结束请求,销毁线程缓存中的对象及缓存自身并清理线程变量。
同时本发明实施例提供了一种数据共享的装置,包括:
第一接收模块,用于接收查询数据请求;
第一判断模块,用于当所述第一接收模块接收到查询数据请求时,判断是否访问线程缓存;
第一发送模块,用于当所述第一判断模块判断访问线程缓存时,向所述线程缓存发送查询请求;
第二接收模块,用于接收所述线程缓存返回的查询结果数据;
第二发送模块,用于当所述第二接收模块接收到查询结果数据时,向所述查询数据请求的发送方返回所述查询结果数据。
第三发送模块,用于当所述第一判断模块判断不需要访问线程缓存时,向数据访问控制器发送查询请求;
第三接收模块,用于接收所述数据访问控制器返回的查询结果数据;
第四发送模块,用于当所述第三接收模块接收到查询结果数据时,向所述线程缓存发送查询请求。
所述数据共享的装置,其特征在于,还包括:
第二判断模块,用于判断所述第二接收模块接收的查询结果数据是否有效。
所述数据共享的装置,其特征在于,还包括:
录入判断模块,用于判断所述第三接收模块接收到的查询结果数据是否录入线程缓存。
所述数据共享的装置,其特征在于,还包括:
销毁模块,用于接收到结束请求后销毁线程缓存中的对象及缓存自身并清理线程变量。
所述数据共享的装置,其特征在于,所述装置为条件控制器。
同时本发明实施例提供了一种数据共享的系统,包括:
条件控制器,线程缓存,数据访问控制器和数据库;
所述条件控制器,接收到查询数据请求,判断是否需要访问所述线程缓存;所述判断结果为需要访问线程缓存时,向所述线程缓存发送查询请求;接收所述线程缓存返回的查询结果数据,向所述查询数据请求的发送方返回所述查询结果数据;所述判断结果为不访问线程缓存时,向数据访问控制器发送查询数据请求,并接收所述数据访问控制器在数据库中查询得到的查询结果数据,向所述查询数据请求的发送方返回所述查询结果数据。
所述数据共享的系统,其特征在于,
还包括:数据访问控制器和数据库;所述条件控制器,进一步用于判断结果为不需要访问线程缓存时,所述条件控制器向所述数据访问控制器发送查询数据请求;
所述数据访问控制器,用于接收到所述条件控制器发送的数据查询请求后,在所述数据库中查询数据并将查询结果数据发送到所述条件控制器;
所述数据库,用于为所述数据访问控制器提供查询数据。
所述数据共享的系统,其特征在于,所述条件控制器包括:
第一接收模块,用于接收查询数据请求;
第一判断模块,用于当所述第一接收模块接收到查询数据请求时,判断是否访问线程缓存;
第一发送模块,用于当所述第一判断模块判断访问线程缓存时,向所述线程缓存发送查询请求;
第二接收模块,用于接收所述线程缓存返回的查询结果数据;
第二发送模块,用于当所述第二接收模块接收到查询结果数据时,向所述查询数据请求的发送方返回所述查询结果数据。
与现有技术相比,本发明实施例具有以下优点:
通过判断是否需要访问线程缓存并向线程缓存发送查询请求,接收线程缓存返回的查询结果数据并判断所述数据有效后,返回查询结果数据,因此查询重复数据时,可以从线程缓存中直接获取数据,而且从数据库中查询到的数据可以录入线程缓存,这样可以有效的确保调用数据充分共享。
所述查询数据请求的发送方返回所述查询结果数据。判断查询结果数据无效时,需要向数据条件控制器发送查询数据请求。
接收到查询数据请求后,首先判断是否访问线程缓存,如果判断需要访问线程缓存,可以直接从线程缓存中获取查询结果数据,这样可以有效的确保了在不会出现脏数据的前提下,使单次调用数据充分共享。
下面通过实施例对本发明提供的数据共享的方法进行详细说明,如图3所示,具体包括:
步骤S301、应用API在内部向数据库发起数据访问。
具体的,所述应用API泛指为了完成业务操作而设计的应用接口,通常包含了一个或多个原子功能,如用户校验、流程控制。对应用API而言,其主要目标是完成某一特定功能,为了完成所述特定功能一般情况下需要访问数据库。
步骤S302、应用API向条件控制器发送查询数据请求。
步骤S303、条件控制器查询自身内部条件控制逻辑,判断是否需要访问线程缓存。
具体的,所述条件控制器通过内置的条件控制逻辑来控制查询数据的获取位置,也就是说控制查询数据是直接从数据库中获取,还是通过线程缓存从缓存中获取。也可以说,条件控制器是应用API和数据库的中间控制组件,所有访问均经过条件控制器进行转发。
所述条件控制器的条件控制逻辑实现方式为一系列的条件判断,并可以利用数据库、判定表或其他方式实现。这些判断条件可以固定在条件控制器内部。例如条件控制逻辑可以设定为:对某个实体A的查询、或对某个SQL(Structure Query Language,结构化查询语言)的查询、或对某个标识为x的SQL的查询。
根据实际的需要,所述条件控制逻辑可以设定为在某一时间点生效,也可以设定为在某一时间段生效。例如在某个时间段需要对数据库进行维护,可以设定线程缓存在此时间段内生效。
步骤S304、条件控制器根据条件控制逻辑判断查询数据请求是否需要访问缓存,判断结果为需要时,执行步骤S305;否则,执行步骤S308。
具体的,当查询数据请求满足条件控制器中的条件控制逻辑时,判断为需要访问缓存;否则,判断为不需要访问缓存。
步骤S305、条件控制器向线程缓存发送查询数据请求。
所述线程缓存实际上是位于一个线程存储内部的暂态的缓存,内部是键值和对象的映射。具体的,带有特定参数的SQL确定一个具有唯一标识的键值,该键值对应唯一的对象。也就是说,所述键值可以用于标识查询结果数据的唯一性。所述带有特定参数的SQL的实现形式可以为:SQL的名字和参数、SQL和参数等。
步骤S306、线程缓存向条件控制器返回查询结果数据。
步骤S307、条件控制器判断线程缓存返回的查询结果数据是否有效。
具体的,数据有效可以指数据存在或者在数据有效期内满足一定的规定。例如,线程缓存返回数据为空时,数据无效;或者所查询的数据被查询的次数超过门限值后,该数据无效。当然,在实际情况中判断数据有效的方式并不限于以上所述的方式。
判断查询结果数据有效,执行步骤S314;否则,执行步骤S308。
步骤S308、条件控制器向数据访问控制器发送查询数据请求。
具体的,条件控制器根据条件控制逻辑判断查询数据请求不需要访问线程缓存时,向数据访问控制器发送查询数据请求。
步骤S309、数据访问控制器根据条件访问控制器发送的查询数据请求,在数据库中查询相应的数据信息。
步骤S310、数据库向数据访问控制器返回查询结果数据。
步骤S311、数据访问控制器将数据库返回的查询结果数据发送给条件控制器。
步骤S312、条件控制器判断查询结果数据是否需要录入线程缓存。如果需要,执行步骤S313;否则,直接执行步骤S314。
具体的,可以根据条件控制器的配置判断是否需要录入线程缓存,符合配置要求即可认为需要录入线程缓存。
这里所述需要录入线程缓存包括两个含义:一是查询数据时首先从线程缓存中查找;二是首次查询(在线程缓存中未查到数据而使用数据访问控制器获取数据)的查询结果数据要保存到线程缓存中。
步骤S313、将查询结果数据录入线程缓存。
步骤S314、将查询结果数据返回给应用API。
步骤S315、应用API向条件控制器发送表示本次请求结束的结束请求。
步骤S316、条件控制器接收到应用API发送的结束请求后,销毁线程缓存中的缓存对象及缓存自身,并清理线程变量,流程结束。
通过判断是否访问线程缓存以及根据判断结果得到相应的查询数据路线,并获取查询结果数据,可以在保持应用API语义的一致性前提下,提高数据访问的性能。
本发明实施例以管理类应用系统中的订购为例,提供一种数据共享的方法,可以提高数据访问的性能。
订购流程中大量的应用API都是以用户号码作为应用API输入,例如判断用户是否已经存在、是否允许用户进行订购、用户订购的产品是否与现有的产品存在互斥关系(即订购了一个产品就不能订购另一个产品)、用户是否重复订购了某个产品。
为了便于说明问题,假设订购需要依次调用功能A、功能功B、功能C以及功能D,这里所述的功能也就是应用API。应用API可以是一个具体的业务功能接口,可以实现为一个方法,如C++的一个函数、Java的一个方法,或者可以实现为组件接口,如一个EJB(Enterprise JavaBean)的接口等。这里以Java方法实现为例,场景示意图如图4所示,在每个功能中列出了需要进行数据访问的内部请求,为简单起见这里仅列出了多个功能重复调用的数据访问请求。
功能A、功能B、功能C和功能D均需要通过用户号码查询用户键值,其中功能C和功能D均需要通过用户键值查询用户已有的产品订购记录。
下面结合具体的流程阐述如何基于线程缓存实现数据共享访问。
情景一:功能A调用流程;
产品订购时首先调用功能A判断用户是否存在,功能A中需要“根据用户号码查询用户键值”,如图5所示,包括:
步骤S501、功能A向条件控制器发送查询数据请求。
具体的,请求的实现形式为带命名的SQL(结构化查询语言)加上相关的参数,其中每个SQL均通过一个名称来标识,所述相关的参数为用户号码。
步骤S502、条件控制器查询内部条件控制逻辑,判断是否需要访问线程缓存。
条件控制器使用规则引擎的方式实现,所述规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,可以实现将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。此处利用规则引擎定义条件控制逻辑。
对于本实施例中条件控制器的配置示例如下:
IF查询用户的信息
THEN使用线程缓存
对于功能A发送给条件控制器的查询请求,由于查询的是用户信息,上述条件判断成立,也就是说条件控制器判断出“根据用户号码查询用户键值”是需要访问缓存的。
步骤S503、条件控制器向线程缓存发送查询数据请求。
此处线程缓存使用与线程绑定的线程变量,在以Java语言构造的线程中可以设置线程变量,表示缓存生命周期和线程一致。在线程变量中保存一个哈希表,条件控制器发送哈希键值到线程缓存,键值为带有SQL名称和参数的哈希码。利用键值在线程缓存中查询对应的数据。
步骤S504、线程缓存向条件控制器返回查询结果数据。
如果在线程缓存中没有查询到相对应的查询结果数据,线程缓存返回的数据为空,该查询结果数据无效,继续执行步骤S505。在此实施例中,线程缓存中没有相应的数据。
步骤S505、条件控制器向数据访问控制器发送查询数据请求。
具体的,条件控制器向数据访问控制器发送查询数据请求,根据查询请求中的用户号码查询用户键值,这里数据访问控制器实现形式为JDBC的数据访问封装。
所述JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
步骤S506、数据访问控制器根据用户号码,在数据库的号码表中查询用户的键值。
步骤S507、数据库将用户键值返回到数据访问控制器。
步骤S508、数据访问控制器将用户键值返回给条件控制器。
步骤S509、将用户键值录入缓存。
由步骤S502中条件控制器的配置可以判断出该查询结果数据是需要录入线程缓存的,所以继续执行以下步骤。
步骤S510、条件控制器将用户键值返回到功能A。
情景二:功能B调用流程;
产品订购调用功能B判断“是否允许用户进行订购”,功能B中需要“根据用户号码查询用户键值”。如图6所示,包括:
步骤S601、功能B向条件控制器发送查询数据请求。
步骤S602、条件控制器根据内部的条件控制逻辑是否需要查询线程缓存。
由于条件控制器的配置示例如下:
IF查询用户的信息
THEN使用线程缓存
所以判断需要查询线程缓存。条件控制器判断出需要访问线程缓存后,继续执行以下步骤;
步骤S603、条件控制器向线程缓存发送查询数据请求。
步骤S604、线程缓存将查询结果数据返回给条件控制器。
由于此前功能A已经将相关查询结果数据录入到线程缓存中,线程缓存可以直接向条件控制器返回查询结果数据。
步骤S605、条件控制器将查询到的用户键值返回给功能B。
功能C、功能D中“根据用户号码查询用户键值”的流程和功能B的调用流程类似。
功能C中“根据用户键值查询已有产品订购记录”与功能A的流程类似,第一次查询数据时需要访问数据库;功能D中“根据用户键值查询已有产品订购记录”的流程和功能B调用流程类似,可以直接从线程缓存中获取数据。
在订购处理完成后,应用API发出结束请求给条件控制器表示本次请求结束,条件控制器销毁线程缓中的缓存对象及缓存自身,并清理线程变量,线程缓存生命周期结束。
通过使用本发明实施例提供的数据共享方法,可以在保持应用API语义的一致性(如只使用C++、Java)前提下,减少访问数据库的次数,提高数据访问的性能。
同时,本发明实施例还提供了一种数据共享的装置,如图7所示,具体包括:
第一接收模块10,用于接收查询数据请求;
第一判断模块20,用于当所述第一接收模块10接收到查询数据请求时,判断是否访问线程缓存;
第一发送模块30,用于当所述第一判断模块20判断访问线程缓存时,向所述线程缓存发送查询请求;
第二接收模块40,用于接收所述线程缓存返回的查询结果数据;
第二发送模块50,用于当所述第二接收模块40接收到查询结果数据时,向所述查询数据请求的发送方返回所述查询结果数据。
通过以上所述的装置,可以实现数据共享,具体实现方式如下:
第一接收模块10接收查询数据请求后,第一判断模块20判断此请求是否需要访问线程缓存。当第一判断模块20判断需要访问线程缓存时,第一发送模块30向所述线程缓存发送查询请求。
第二接收模块40接收所述线程缓存根据查询请求返回的查询结果数据,然后通过第二发送模块50向所述查询数据请求的发送方返回所述查询结果数据。
如图8所示,在又一实施例中所述数据共享的装置,还可以包括:
第三发送模块60,用于当所述第一判断模块20判断不访问线程缓存时,向数据访问控制器发送查询请求;
第三接收模块70,用于接收所述数据访问控制器返回的查询结果数据;
第四发送模块80,用于当所述第三接收模块70接收到查询结果数据时,向所述查询数据请求的发送方返回所述查询结果数据。
在又一实施例中所述数据共享的装置,还可以包括:
第二判断模块90,用于判断所述第二接收模块40接收的查询结果数据是否有效;
录入判断模块100,用于判断所述第三接收模块70接收到的查询结果数据是否录入线程缓存。
所述数据共享的装置,还可以包括:
销毁模块110,用于接收到结束请求后销毁线程缓存中的对象及缓存自身并清理线程变量。
通过以上所述的模块,可以实现数据共享,具体实现方式如下:
第一接收模块10接收查询数据请求后,第一判断模块20判断此请求是否需要访问线程缓存。具体的,根据第一判断模块20中设定的条件控制逻辑对查询数据请求进行判断。所述条件控制逻辑的实现形式为一系列的判断条件。
当第一判断模块20判断需要访问线程缓存时,第一发送模块30向所述线程缓存发送查询请求。第二接收模块40接收所述线程缓存根据查询请求返回的查询结果数据后,第二判断模块90检测所述第二接收模块40接收的查询结果数据是否有效,若有效,通过第二发送模块50将查询结果数据发送到应用接口;若无效,通过第三发送模块60向数据访问控制器发送查询请求。
当第一判断模块20判断不需要访问线程缓存时,第三发送模块60向数据访问控制器发送查询请求。第三接收模块70接收到所述数据访问控制器返回的查询结果数据后,录入判断模块100判断查询结果数据是否需要录入线程缓存。此后第四发送模块80向应用接口返回查询结果数据。
接收到结束请求后,销毁模块110销毁线程缓存中的对象及缓存自身并清理线程变量。
通过使用本发明实施例提供的数据共享的装置,可以实现数据共享的方法,有效的确保了在不会出现脏数据的前提下,使单次调用数据充分共享。
同时本发明实施例还提供了一种数据共享的系统,如图1所示,包括:条件控制器1,线程缓存2;
所述条件控制器1,用于接收到查询数据请求,判断是否需要访问所述线程缓存;所述判断结果为需要访问线程缓存时,向所述线程缓存发送查询请求;接收所述线程缓存返回的查询结果数据,向所述查询数据请求的发送方返回所述查询结果数据;
所述线程缓存2,用于为所述条件控制器1提供查询结果数据,当数据访问控制器向条件控制器返回查询结果数据时,录入所述查询结果数据。
所述数据共享的系统还包括:数据访问控制器3和数据库4;
所述数据访问控制器3,用于接收到条件控制器2发送的数据查询请求后,在数据库中查询数据并将查询结果数据发送到条件控制器;
所述数据库4,用于为所述数据访问控制器3提供查询数据。
具体的,所述条件控制器1,接收到查询数据请求,判断是否需要访问所述线程缓存2;所述判断结果为需要访问线程缓存时,向所述线程缓存2发送查询请求;接收所述线程缓存2返回的查询结果数据后,向所述查询数据请求的发送方返回所述查询结果数据。所述判断结果为不需要访问线程缓存2时,条件控制器1向数据访问控制器3发送查询数据请求,所述数据访问控制器3根据查询数据请求在数据库4中搜索相对应的数据,并将查询结果数据返回条件控制器1。条件控制器1向所述查询数据请求的发送方返回所述查询结果数据。
所述条件控制器包括:
第一接收模块10,用于接收查询数据请求;
第一判断模块20,用于当所述第一接收模块10接收到查询数据请求时,判断是否访问线程缓存;
第一发送模块30,用于当所述第一判断模块20判断访问线程缓存时,向所述线程缓存发送查询请求;
第二接收模块40,用于接收所述线程缓存返回的查询结果数据;
第二发送模块50,用于当所述第二接收模块40接收到查询结果数据时,向所述查询数据请求的发送方返回所述查询结果数据。
通过以上所述模块,可以实现数据共享,具体实现方式如下:
第一接收模块10接收查询数据请求后,第一判断模块20判断此请求是否需要访问线程缓存。当第一判断模块20判断需要访问线程缓存时,第一发送模块30向所述线程缓存发送查询请求。
第二接收模块40接收所述线程缓存根据查询请求返回的查询结果数据,然后通过第二发送模块50向所述查询数据请求的发送方返回所述查询结果数据。
所述条件控制器,还包括:
第三发送模块60,用于当所述第一判断模块20判断不访问线程缓存时,向数据访问控制器发送查询请求;
第三接收模块70,用于接收所述数据访问控制器返回的查询结果数据;
第四发送模块80,用于当所述第三接收模块70接收到查询结果数据时,向所述查询数据请求的发送方返回所述查询结果数据。
所述条件控制器,还包括:
第二判断模块90,用于判断所述第二接收模块40接收的查询结果数据是否有效;
录入判断模块100,用于判断所述第三接收模块70接收到的查询结果数据是否录入线程缓存。
所述条件控制器,还包括:
销毁模块110,用于接收到结束请求后销毁线程缓存中的对象及缓存自身并清理线程变量。
通过以上所述模块,可以实现数据共享,具体实现方式如下:
第一接收模块10接收查询数据请求后,第一判断模块20判断此请求是否需要访问线程缓存2。具体的,根据第一判断模块20中设定的条件控制逻辑对查询数据请求进行判断。所述条件控制逻辑的实现形式为一系列的判断条件。
当第一判断模块20判断需要访问线程缓存2时,第一发送模块30向所述线程缓存2发送查询请求。第二接收模块40接收所述线程缓存2根据查询请求返回的查询结果数据后,第二判断模块90检测所述第二接收模块40接收的查询结果数据是否有效,若有效,通过第二发送模块50将查询结果数据发送到应用接口;若无效,通过第三发送模块60向数据访问控制器3发送查询请求。
当第一判断模块20判断不需要访问线程缓存时,第三发送模块60向数据访问控制器3发送查询请求。数据访问控制器3在数据库4中获取相应的数据。第三接收模块70接收到所述数据访问控制器3返回的查询结果数据后,录入判断模块100判断查询结果数据是否需要录入线程缓存2。此后第四发送模块80向应用接口返回查询结果数据。
接收到结束请求后,销毁模块110销毁线程缓存中的对象及缓存自身并清理线程变量。
通过使用本发明的实施例提供的方法、系统和装置,可以有效的确保在不会出现脏数据的前提下,使单次调用数据充分共享,并且在保持应用API语义的一致性前提下,提高数据访问的性能。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以可借助软件加必要的通用硬件平台的方式来实现基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。