从数据库中读取数据的方法及装置的制作方法

文档序号:6359220阅读:183来源:国知局
专利名称:从数据库中读取数据的方法及装置的制作方法
技术领域
本发明涉及数据库领域,尤其涉及一种从数据库中读取数据的方法及装置。
背景技术
在现代计算机技术中,数据库的应用非常广泛,它是用于组织、存储和管理数据的仓库。数据库作为整个应用系统的核心,其重要性不言而喻。而大多数应用的数据库读取操作比写操作更密集,而且查询条件相对复杂,数据库的大部分性能消耗在查询上,尤其在高用户、高并发的大型应用中,数据库的直接读取的代价非常高,这时数据库将会成为整个应用的瓶颈。缓存是内存的一部分,用来缓存数据的一块区域。当应用程序需要这些数据时,可以直接从缓存中提取,不需要访问数据库。故缓存是提高性能、缓解数据库压力的一种高效方法。而缓存更新就是把数据库中的数据读取并更新到内存中去,其中如何从数据库中读取数据,是影响整个系统性能的关键。
目前从数据库读取数据的方法有两种,包括第一种,各缓存节点定时轮询数据库,检查增量表或者源表的数据是否发生变化,如果有变化则读取数据并更新缓存,同时在数据库中标识该数据已被更新或删除。该方法有如下缺点各缓存节点在检查增量表或者源表的数据是否发生变化时需要定时轮询数据库,当系统比较大、缓存节点比较多的时候,频繁、大量的轮询数据库,将会严重影响数据库的性能,给数据库造成了更大的压力,并且各缓存节点定时轮询必定有时间间隔,当增量表或者源表的数据发生变化时更新缓存的实时性不是特别高。第二种,利用应用程序对变更的数据进行采集、传输和维护操作。当数据被修改并保存到数据库后,应用程序进行数据修改通知,把被修改的数据或者数据记录唯一标识传递给各个缓存节点,然后各个缓存节点再进行缓存数据更新。此方法有效的解决了各缓存节点定时轮询数据库方法实时性差的问题,并且由于缓存节点不再轮询数据库,所以在很大程度上提高数据库性能,缓解了数据库压力。但是,该方法要为所有处理缓存数据更新的功能模块编写相应的处理缓存更新的代码。并且由于变动的数据是通过应用程序传输的,当在一些大型应用系统,需要多节点缓存时,因为各个缓存节点需求的数据不一样,需要对各个缓存节点进行相应的配置,所以会使整个系统非常复杂、繁琐,开发难度、开发量和维护量都会大大增加。

发明内容
本发明的实施例提供一种从数据库中读取数据的方法及装置,实现了缓存的实时更新,并且降低了整个应用系统开发的复杂性。为达到上述目的,本发明的实施例采用如下技术方案—方面,本发明的实施例提供一种从数据库中读取数据的方法,包括根据缓存节点需要缓存的数据内容,为所述需要缓存的数据内容建立数据读取控制表和创建消息队列,所述数据读取控制表包括缓存节点信息表和缓存节点数据表,所述缓存节点信息表包括缓存节点ID和缓存节点标识,所述缓存节点数据表包括数据表标识、归属缓存节点标识、实际读取对象标识;当应用程序更新数据库中的数据时,更新数据的数据表对应的触发器,将所述数据表的更新数据信息和所述数据表需要缓存的缓存节点标识,写入到所述数据表对应的消息队列中; 缓存节点从所述缓存节点对应的消息队列中读取所述缓存节点对应的更新数据信息,并根据所述更新数据信息更新所述缓存节点中的数据。另一方面,本发明的实施例提供一种从数据库读取数据的装置,包括建立单元,用于根据缓存节点需要缓存的数据内容,为所述需要缓存的数据内容建立数据读取控制表,所述数据读取控制表包括缓存节点信息表和缓存节点数据表,所述缓存节点信息表包括缓存节点ID和缓存节点标识,所述缓冲节点数据表包括数据表标识、归属缓存节点标识、实际读取对象标识;创建单元,用于根据缓存节点需要缓存的数据内容,为所述需要缓存的数据内容创建消息队列;写入单元,用于当应用程序更新数据库中的数据时,更新数据的数据表对应的触发器,将所述数据表的更新数据信息和缓存所述数据表的缓存节点标识,写入到所述数据表对应的消息队列中;读取单元,用于所述缓存节点从所述缓存节点对应的消息队列中读取所述缓存节点对应的更新数据信息,并根据所述更新数据信息更新所述缓存节点中的数据。本发明实施例提供的技术方案,与现有技术相比,根据缓存节点需要缓存的数据内容,为所述需要缓存的数据内容建立数据读取控制表和创建消息队列,当应用程序更新数据库中的数据时,更新数据的数据表对应的触发器,将所述数据表的更新数据信息和所述数据表需要缓存的缓存节点标识,写入到所述数据表对应的消息队列中,各缓存节点从所述缓存节点对应的消息队列中读取所述缓存节点对应的更新数据信息,并根据所述更新数据信息更新所述缓存节点中的数据,避免缓存节点通过定时轮询数据库更新缓存,减轻了数据库的压力,实现了缓存数据更新的实时性;并且更新缓存数据的获取是由缓存主动去读对应的消息队列中的相应更新信息获取的,并不是通过应用程序互相通知去获取的,因此使得缓存更新是一个独立的操作,从而降低了整个应用系统开发的复杂性。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图I为本发明实施例I中从数据库中读取数据的方法的流程图;图2为本发明实施例2中从数据库中读取数据的流程图;图3为本发明实施例2中写入消息队列的流程图;图4为本发明实施例2中从消息队列中读取更新数据信息的方法流程图;图5为本发明实施例3中一种从数据库中读取数据的装置组成框图6为本发明实施例3中另一种从数据库中读取数据的装置组成框图;图7为本发明实施例3中另一种从数据库中读取数据的装置组成框图;图8为本发明实施例3中另一种从数据库中读取数据的装置组成框图;图9为本发明实施例3中另一种从数据库中读取数据的装置组成框图;图10为本发明实施例3中另一种从数据库中读取数据的装置组成框图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例I本发明实施例提供一种从数据库读取数据的方法,如图I所示,该方法包括101、根据缓存节点需要缓存的数据内容,为所述需要缓存的数据内容建立数据读取控制表和创建消息队列。其中,所述数据读取控制表包括缓存节点信息表和缓存节点数据表。所述缓存节点信息表包括缓存节点ID和缓存节点标识,所述缓存节点数据表包括数据表标识、归属缓存节点标识、实际读取对象标识。102、当应用程序更新数据库中的数据时,更新数据的数据表对应的触发器,将所述数据表的更新数据信息和所述数据表需要缓存的缓存节点标识,写入到所述数据表对应的消息队列中。103、缓存节点从所述缓存节点对应的消息队列中读取所述缓存节点对应的更新数据信息,并根据所述更新数据信息更新所述缓存节点中的数据。本发明实施例中,根据缓存节点需要缓存的数据内容,为所述需要缓存的数据内容建立数据读取控制表和创建消息队列,当应用程序更新数据库中的数据时,更新数据的数据表对应的触发器,将所述数据表的更新数据信息和所述数据表需要缓存的缓存节点标识,写入到所述数据表对应的消息队列中,各缓存节点从所述缓存节点对应的消息队列中读取所述缓存节点对应的更新数据信息,并根据所述更新数据信息更新所述缓存节点中的数据,避免缓存节点通过定时轮询数据库更新缓存,减轻了数据库的压力,实现了缓存数据更新的实时性;并且更新缓存数据的获取是由缓存主动去读对应的消息队列中的相应更新信息获取的,并不是通过应用程序互相通知去获取的,因此使得缓存更新是一个独立的操作,从而降低了整个应用系统开发的复杂性。实施例2本发明实施例提供一种从数据库读取数据的方法,如图2所示,该方法包括201、根据缓存节点需要缓存的数据内容,为所述需要缓存的数据内容建立数据读取控制表和创建消息队列,所述数据读取控制表包括缓存节点信息表和缓存节点数据表,所述缓存节点信息表包括缓存节点ID和缓存节点标识,所述缓存节点数据表包括数据表标识、归属缓存节点标识、实际读取对象标识。其中,所述根据缓存节点需要缓存的数据内容,为所述需要缓存的数据内容创建消息队列,可以采用以下的方法实现,该方法包括根据缓存节点需要缓存的数据内容,为不同类型的所述需要缓存的数据内容建立不同的消息队列。当数据库为Oracle数据库时,所述根据缓存节点需要缓存的数据内容,为不同类型的所述需要缓存的数据内容建立不同的消息队列,包括根据缓存节点需要缓存的数据内容,为不同类型的所述需要缓存的数据内容建立不同的数据对象类型;其中,对于只保存变动数据记录唯一标识的,建立对象内容包括节点标识、表或者视图标识、操作类型(如插入、更新或者删除)和记录唯一标识;对于保存全部变动数据的,对象内容包括节点标识、表或者视图标识、操作类型和该表的缓存内容;具体的,可以通过Create or Replace Type objectname As Object来建立用对象内容。根据不同的所述数据对象类型分别建立不同的数据队列表;其中,有多少个对象类型,需要建立多少个队列表;具体的,可以通过dbms_aqadm. create_queue_tabIe建立队列表。

为每个所述数据队列表创建对应的消息队列;具体的,可以通过dbms_aqadm.create_queue分别创建对应的消息队列。202、当应用程序更新数据库中的数据时,更新数据的数据表对应的触发器获取所述数据表的更新数据信息,并根据所述数据表的标识查询所述缓存节点数据表,获取缓存所述数据表的缓存节点标识。203、将所述更新数据信息和所述缓存节点标识写入到所述数据表对应的消息队 列中。进一步的,所述更新数据的数据表对应的触发器将所述更新数据信息写入到所述数据表对应的消息队列中,如图3所示,包括。2031、确定所述更新数据信息写入到消息队列中的形式,若所述更新数据信息以更新数据记录标识的形式写入消息队列中,则执行步骤2032 ;若所述更新数据信息以更新数据的形式写入消息队列中,则执行步骤2033。
2032、所述更新数据的数据表对应的触发器读取所述数据表更新数据记录的标识,并将所述更新数据信息以更新数据记录标识的形式写入到所述数据表对应的消息队列中。2033、所述更新数据的数据表对应的触发器读取所述数据表更新数据,并将所述更新数据信息以更新数据的形式直接写入到所述数据表对应的消息队列中。204、缓存节点从所述缓存节点对应的消息队列中读取所述缓存节点对应的更新数据信息,并根据所述更新数据信息更新所述缓存节点中的数据。其中,所述缓存节点从所述缓存节点对应的消息队列中读取所述缓存节点对应的更新数据信息,并根据所述更新数据信息更新所述缓存节点中的数据,可以通过以下的方法实现,如图4所示,包括2041、缓存节点在连接数据库后,根据所述缓存节点ID查询所述缓存节点信息表,获取所述缓存节点的缓存节点标识。2042、缓存节点根据所述缓存节点标识读取所述缓存节点对应的消息队列。若所述缓存节点对应的消息队列中不存在所述缓存节点的数据,执行步骤2043。若所述缓存节点对应的消息队列中存在所述缓存节点的数据,执行步骤2044。
2043、所述缓存节点读取所述缓存节点对应的消息队列的程序被阻塞。2044、从所述缓存节点对应的消息队列中读取所述缓存节点对应的更新数据信息,并根据所述更新数据信息更新所述缓存节点中的数据。其中,所述从所述缓存节点对应的消息队列中读取所述缓存节点对应的更新数据信息,并根据所述更新数据信息更新所述缓存节点中的数据,包括确定所述更新数据信息写入到消息队列中的形式。当所述更新数据信息以更新数据记录标识的形式写入到所述数据表对应的消息队列中时,从所述对应的消息队列中读取所述缓存节点对应的更新数据记录标识,根据所述更新数据记录标识从数据库中获取所述更新数据记录标识对应的更新数据,并根据所述更新数据更新所述缓存节点中的数据。当所述更新数据信息以更新数据的形式写入到所述数据表对应的消息队列中时, 从所述对应的消息队列中读取所述缓存节点对应的更新数据,并根据所述更新数据更新所述缓存节点中的数据。本发明实施例中,根据缓存节点需要缓存的数据内容,为所述需要缓存的数据内容建立数据读取控制表和创建消息队列,当应用程序更新数据库中的数据时,更新数据的数据表对应的触发器,将所述数据表的更新数据信息和所述数据表需要缓存的缓存节点标识,写入到所述数据表对应的消息队列中,各缓存节点从所述缓存节点对应的消息队列中读取所述缓存节点对应的更新数据信息,并根据所述更新数据信息更新所述缓存节点中的数据,避免缓存节点通过定时轮询数据库更新缓存,减轻了数据库的压力,实现了缓存数据更新的实时性;并且更新缓存数据的获取是由缓存主动去读对应的消息队列中的相应更新信息获取的,并不是通过应用程序互相通知去获取的,因此使得缓存更新是一个独立的操作,从而降低了整个应用系统开发的复杂性。并且,本发明实施例中为不同类型的所述需要缓存的数据内容建立不同的数据对象类型,根据不同的所述数据对象类型分别建立不同的数据队列表,并且为每个所述数据队列表创建对应的消息队列,这样可以很好的支持多节点缓存,同时各缓存节点需要的缓存数据可以灵活配置。此外,当所述缓存节点对应的消息队列中不存在所述缓存节点的数据时,所述缓存节点读取所述缓存节点对应的消息队列的程序会被阻塞,当所述缓存节点对应的消息队列中存在所述缓存节点的数据时,缓存节点根据所述缓存节点标识读取所述缓存节点对应的消息队列从而读取所述缓存节点对应的更新数据信息。这样可以更好的实现当有数据变动时所述缓存节点才会读取所述更新数据信息进而更新所述缓存节点中的数据。实施例3本发明实施例提供一种从数据库读取数据的装置,如图5所示,该装置包括建立单元31、创建单元32、写入单元33、读取单元34。建立单元31,用于根据缓存节点需要缓存的数据内容,为所述需要缓存的数据内容建立数据读取控制表。创建单元32,用于根据缓存节点需要缓存的数据内容,为所述需要缓存的数据内容创建消息队列。具体的,所述创建单元32用于,根据缓存节点需要缓存的数据内容,为不同类型的所述需要缓存的数据内容建立不同的消息队列。
写入单元33,用于当应用程序更新数据库中的数据时,更新数据的数据表对应的触发器,将所述数据表的更新数据信息和缓存所述数据表的缓存节点标识,写入到所述数据表对应的消息队列中。读取单元34,用于所述缓存节点从所述缓存节点对应的消息队列中读取所述缓存节点对应的更新数据信息,并根据所述更新数据信息更新所述缓存节点中的数据。进一步的,如图6所示,所述写入单元33还包括第一获取模块331、第二获取模块332、写入模块333。 第一获取模块331,用于当应用程序更新数据库中的数据时,更新数据的数据表对应的触发器获取所述数据表的更新数据信息。第二获取模块332,用于根据所述数据表的标识查询所述缓存节点数据表,获取缓存所述数据表的缓存节点标识。写入模块333,用于将所述第一获取模块获取的所述更新数据信息和所述第二获取模块获取的所述缓存节点标识写入到所述数据表对应的消息队列中。进一步的,如图7所示,所述写入模块还包括第一确定子模块3331、第一写入子模块3332、第二写入子模块3333。第一确定子模块3331,用于确定所述更新数据信息写入到消息队列中的形式。第一写入子模块3332,用于在所述第一确定子模块3331确定所述更新数据信息以更新数据记录标识的形式写入消息队列中时,所述更新数据的数据表对应的触发器读取所述数据表更新数据记录的标识,并将所述更新数据信息以更新数据记录标识的形式写入到所述数据表对应的消息队列中第二写入子模块3333,用于在所述第一确定子模块3331确定所述更新数据信息以更新数据的形式写入消息队列中时,所述更新数据的数据表对应的触发器读取所述数据表更新数据,并将所述更新数据信息以更新数据的形式直接写入到所述数据表对应的消息队列中。进一步的,如图8所示,所述读取单元34还包括查询模块341、第一读取模块342、第二读取模块343、阻塞操作模块344。查询模块341,用于根据所述缓存节点ID查询所述缓存节点信息表,获取所述缓存节点的缓存节点标识。第一读取模块342,用于根据所述缓存节点标识读取所述缓存节点对应的消息队列。第二读取模块343,用于在所述缓存节点对应的消息队列中存在所述缓存节点的数据时,从所述缓存节点对应的消息队列中读取所述缓存节点对应的更新数据信息,并根据所述更新数据信息更新所述缓存节点中的数据。阻塞操作模块344,用于在所述缓存节点对应的消息队列中不存在所述缓存节点的数据时,所述缓存节点读取所述缓存节点对应的消息队列的程序被阻塞。进一步的,如图9所示所述第二读取模块343包括第二确定子模块3431、第一读取子模块3432和第二读取子模块3433。第二确定子模块3431,用于确定所述更新数据信息写入到消息队列中的形式;第一读取子模块3432,用于当所述第二确定子模块3431确定所述更新数据信息以更新数据记录标识的形式写入到所述数据表对应的消息队列中时,从所述对应的消息队列中读取所述缓存节点对应的更新数据记录标识,根据所述更新数据记录标识从数据库中获取所述更新数据记录标识对应的更新数据,并根据所述更新数据更新所述缓存节点中的数据;第二读取子模块3433,用于当所述第二确定子模块3431确定所述更新数据信息以更新数据的形式写入到所述数据表对应的消息队列中时,从所述对应的消息队列中读取所述缓存节点对应的更新数据,并根据所述更新数据更新所述缓存节点中的数据。进一步的,如图10所示,当所述数据库为Oracle数据库时,所述创建单元32还包括建立模块321、第一创建模块322、第二创建模块323。建立模块321,用于根据缓存节点需要缓存的数据内容,为不同类型的所述需要缓存的数据内容建立不同的数据对象类型。第一创建模块322,用于根据建立模块建立的不同的所述数据对象类型分别建立 不同的数据队列表。第二创建模块323,用于为第一创建模块创建的每个所述数据队列表创建对应的消息队列。需要说明的是,本发明实施例中各功能模块的其他描述,可以参考实施例I和实施例2中的相应描述,本发明实施例此处将不再赘述。本发明实施例中,根据缓存节点需要缓存的数据内容,为所述需要缓存的数据内容建立数据读取控制表和创建消息队列,当应用程序更新数据库中的数据时,更新数据的数据表对应的触发器,将所述数据表的更新数据信息和所述数据表需要缓存的缓存节点标识,写入到所述数据表对应的消息队列中,各缓存节点从所述缓存节点对应的消息队列中读取所述缓存节点对应的更新数据信息,并根据所述更新数据信息更新所述缓存节点中的数据,避免缓存节点通过定时轮询数据库更新缓存,减轻了数据库的压力,实现了缓存数据更新的实时性;并且更新缓存数据的获取是由缓存主动去读对应的消息队列中的相应更新信息获取的,并不是通过应用程序互相通知去获取的,因此使得缓存更新是一个独立的操作,从而降低了整个应用系统开发的复杂性。并且,本发明实施例中为不同类型的所述需要缓存的数据内容建立不同的数据对象类型,根据不同的所述数据对象类型分别建立不同的数据队列表,并且为每个所述数据队列表创建对应的消息队列,这样可以很好的支持多节点缓存,同时各缓存节点需要的缓存数据可以灵活配置。此外,当所述缓存节点对应的消息队列中不存在所述缓存节点的数据时,所述缓存节点读取所述缓存节点对应的消息队列的程序会被阻塞,当所述缓存节点对应的消息队列中存在所述缓存节点的数据时,缓存节点根据所述缓存节点标识读取所述缓存节点对应的消息队列从而读取所述缓存节点对应的更新数据信息。这样可以更好的实现当有数据变动时所述缓存节点才会读取所述更新数据信息进而更新所述缓存节点中的数据。通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。以上所述,仅为本发明的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内 ,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
权利要求
1.一种从数据库读取数据的方法,其特征在于,包括 根据缓存节点需要缓存的数据内容,为所述需要缓存的数据内容建立数据读取控制表和创建消息队列,所述数据读取控制表包括缓存节点信息表和缓存节点数据表,所述缓存节点信息表包括缓存节点ID和缓存节点标识,所述缓存节点数据表包括数据表标识、归属缓存节点标识、实际读取对象标识; 当应用程序更新数据库中的数据时,更新数据的数据表对应的触发器,将所述数据表的更新数据信息和所述数据表需要缓存的缓存节点标识,写入到所述数据表对应的消息队列中; 缓存节点从所述缓存节点对应的消息队列中读取所述缓存节点对应的更新数据信息,并根据所述更新数据信息更新所述缓存节点中的数据。
2.根据权利要求I所述的方法,其特征在于,所述根据缓存节点需要缓存的数据内容, 为所述需要缓存的数据内容创建消息队列,包括 根据缓存节点需要缓存的数据内容,为不同类型的所述需要缓存的数据内容建立不同的消息队列。
3.根据权利要求2所述的方法,其特征在于,当所述数据库为Oracle数据库时,所述根据缓存节点需要缓存的数据内容,为不同类型的所述需要缓存的数据内容建立不同的消息队列,包括 根据缓存节点需要缓存的数据内容,为不同类型的所述需要缓存的数据内容建立不同的数据对象类型; 根据不同的所述数据对象类型分别建立不同的数据队列表; 为每个所述数据队列表创建对应的消息队列。
4.根据权利要求I所述的方法,其特征在于,所述当应用程序更新数据库中的数据时,更新数据的数据表对应的触发器,将所述数据表的更新数据信息和所述数据表需要缓存的缓存节点标识,写入到所述数据表对应的消息队列中,包括 当应用程序更新数据库中的数据时,更新数据的数据表对应的触发器获取所述数据表的更新数据信息,并根据所述数据表的标识查询所述缓存节点数据表,获取缓存所述数据表的缓存节点标识; 将所述更新数据信息和所述缓存节点标识写入到所述数据表对应的消息队列中。
5.根据权利要求4所述的方法,其特征在于,所述更新数据的数据表对应的触发器将所述更新数据信息写入到所述数据表对应的消息队列中,包括 确定所述更新数据信息写入到消息队列中的形式; 若所述更新数据信息以更新数据记录标识的形式写入消息队列中,则所述更新数据的数据表对应的触发器读取所述数据表更新数据记录的标识,并将所述更新数据信息以更新数据记录标识的形式写入到所述数据表对应的消息队列中; 若所述更新数据信息以更新数据的形式写入消息队列中,则所述更新数据的数据表对应的触发器读取所述数据表更新数据,并将所述更新数据信息以更新数据的形式直接写入到所述数据表对应的消息队列中。
6.根据权利要求I所述的方法,其特征在于,所述缓存节点从所述缓存节点对应的消息队列中读取所述缓存节点对应的更新数据信息,并根据所述更新数据信息更新所述缓存节点中的数据,包括 缓存节点根据所述缓存节点的缓存节点ID查询所述缓存节点信息表,获取所述缓存节点的缓存节点标识; 根据所述缓存节点标识读取所述缓存节点对应的消息队列; 若所述缓存节点对应的消息队列中存在所述缓存节点的数据,则从所述缓存节点对应的消息队列中读取所述缓存节点对应的更新数据信息,并根据所述更新数据信息更新所述缓存节点中的数据; 若所述缓存节点对应的消息队列中不存在所述缓存节点的数据,则所述缓存节点读取所述缓存节点对应的消息队列的程序被阻塞。
7.根据权利要求I至6中任一项所述的方法,其特征在于,所述从所述对应的消息队列中读取所述缓存节点对应的更新数据信息,根据所述更新数据信息更新所述缓存节点中的数据,包括 确定所述更新数据信息写入到消息队列中的形式; 当所述更新数据信息以更新数据记录标识的形式写入到所述数据表对应的消息队列中时,从所述对应的消息队列中读取所述缓存节点对应的更新数据记录标识,根据所述更新数据记录标识从数据库中获取所述更新数据记录标识对应的更新数据,并根据所述更新数据更新所述缓存节点中的数据; 当所述更新数据信息以更新数据的形式写入到所述数据表对应的消息队列中时,从所述对应的消息队列中读取所述缓存节点对应的更新数据,并根据所述更新数据更新所述缓存节点中的数据。
8.一种从数据库读取数据的装置,其特征在于,包括 建立单元,用于根据缓存节点需要缓存的数据内容,为所述需要缓存的数据内容建立数据读取控制表,所述数据读取控制表包括缓存节点信息表和缓存节点数据表,所述缓存节点信息表包括缓存节点ID和缓存节点标识,所述缓冲节点数据表包括数据表标识、归属缓存节点标识、实际读取对象标识; 创建单元,用于根据缓存节点需要缓存的数据内容,为所述需要缓存的数据内容创建消息队列; 写入单元,用于当应用程序更新数据库中的数据时,更新数据的数据表对应的触发器,将所述数据表的更新数据信息和缓存所述数据表的缓存节点标识,写入到所述数据表对应的消息队列中; 读取单元,用于缓存节点从所述缓存节点对应的消息队列中读取所述缓存节点对应的更新数据信息,并根据所述更新数据信息更新所述缓存节点中的数据。
9.根据权利要求8所述的装置,其特征在于,所述创建单元用于,根据缓存节点需要缓存的数据内容,为不同类型的所述需要缓存的数据内容建立不同的消息队列。
10.根据权利要求8或9所述的装置,其特征在于,当所述数据库为Oracle数据库时,所述创建单元包括 建立模块,用于根据缓存节点需要缓存的数据内容,为不同类型的所述需要缓存的数据内容建立不同的数据对象类型; 第一创建模块,用于根据建立模块建立的不同的所述数据对象类型分别建立不同的数据队列表; 第二创建模块,用于为第一创建模块创建的每个所述数据队列表创建对应的消息队列。
11.根据权利要求8所述的装置,其特征在于,所述写入单元包括 第一获取模块,用于当应用程序更新数据库中的数据时,更新数据的数据表对应的触发器获取所述数据表的更新数据信息; 第二获取模块,用于根据所述数据表的标识查询所述缓存节点数据表,获取缓存所述数据表的缓存节点标识; 写入模块,用于将所述第一获取模块获取的所述更新数据信息和所述第二获取模块获取的所述缓存节点标识写入到所述数据表对应的消息队列中。
12.根据权利要求11所述的装置,其特征在于,所述写入模块包括 第一确定子模块,用于确定所述更新数据信息写入到消息队列中的形式; 第一写入子模块,用于在所述第一确定子模块确定所述更新数据信息以更新数据记录标识的形式写入消息队列中时,所述更新数据的数据表对应的触发器读取所述数据表更新数据记录的标识,并将所述更新数据信息以更新数据记录标识的形式写入到所述数据表对应的消息队列中; 第二写入子模块,用于在所述第一确定子模块确定所述更新数据信息以更新数据的形式写入消息队列中时,所述更新数据的数据表对应的触发器读取所述数据表更新数据,并将所述更新数据信息以更新数据的形式直接写入到所述数据表对应的消息队列中。
13.根据权利要求8所述的装置,其特征在于,所述读取单元包括 查询模块,用于根据所述缓存节点ID查询所述缓存节点信息表,获取所述缓存节点的缓存节点标识; 第一读取模块,用于根据所述缓存节点标识读取所述缓存节点对应的消息队列;第二读取模块,用于在所述缓存节点对应的消息队列中存在所述缓存节点的数据时,从所述缓存节点对应的消息队列中读取所述缓存节点对应的更新数据信息,并根据所述更新数据信息更新所述缓存节点中的数据; 阻塞操作模块,用于在所述缓存节点对应的消息队列中不存在所述缓存节点的数据时,所述缓存节点读取所述缓存节点对应的消息队列的程序被阻塞。
14.根据权利要求13所述的装置,其特征在于,所述第二读取模块包括 第二确定子模块,用于确定所述更新数据信息写入到消息队列中的形式; 第一读取子模块,用于当所述第二确定子模块确定所述更新数据信息以更新数据记录标识的形式写入到所述数据表对应的消息队列中时,从所述对应的消息队列中读取所述缓存节点对应的更新数据记录标识,根据所述更新数据记录标识从数据库中获取所述更新数据记录标识对应的更新数据,并根据所述更新数据更新所述缓存节点中的数据; 第二读取子模块,用于当所述第二确定子模块确定所述更新数据信息以更新数据的形式写入到所述数据表对应的消息队列中时,从所述对应的消息队列中读取所述缓存节点对应的更新数据,并根据所述更新数据更新所述缓存节点中的数据。
全文摘要
本发明实施例公开了一种从数据库中读取数据的方法及装置,涉及数据库,实现了缓存的实时更新,并且降低了整个应用系统开发的复杂性。本发明的方法包括根据缓存节点需要缓存的数据内容,为所述需要缓存的数据内容建立数据读取控制表和创建消息队列;当应用程序更新数据库中的数据时,更新数据的数据表对应的触发器,将所述数据表的更新数据信息和所述数据表需要缓存的缓存节点标识,写入到所述数据表对应的消息队列中;缓存节点根据所述缓存节点标识读取所述缓存节点对应的消息队列,并根据所述更新数据信息更新所述缓存节点中的数据。本发明的实施例主要用于缓存系统从数据库读取数据并更新缓存的过程中。
文档编号G06F17/30GK102741843SQ201180004080
公开日2012年10月17日 申请日期2011年3月22日 优先权日2011年3月22日
发明者王震 申请人:青岛海信传媒网络技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1