高并发数据库的访问方法及应用于多服务器系统的方法技术方案

技术编号:9034041 阅读:178 留言:0更新日期:2013-08-15 00:52
本发明专利技术公开了一种高并发数据库的访问方法,特点是在数据库中设置触发器,在数据库外设置缓存,在读数据库时,先读缓存,在写数据库时,通过触发器将更新数据写到更新数据表中,并将更新数据写到缓存中,优点在于在数据库的访问和处理过程中使用缓存技术,通常缓存技术使用LRU算法,将最近访问的数据块存放到缓存中,由于数据库应用的核心操作就是数据的访问和处理,因此如果应用系统访问的大部分数据块已在缓存中,也就是数据在缓存中命中,那么应用在数据访问上的磁盘I/O等待和瓶颈将可以消除,对磁盘数据的访问效率及数据库访问效率最大可优化到接近于内存访问的速度。

【技术实现步骤摘要】

本专利技术涉及一种数据库的数据访问方法,尤其是涉及一种。
技术介绍
在网站及应用程序开发过程中,用户要得到数据库中的数据,并且要完成数据的修改、更新、以及新数据的插入等操作,即数据库的应用。而数据库应用的核心操作就是数据库的访问和处理。但是在高并发情况下,直接数据库访问方式将造成频繁的数据库读写,数据库访问成为系统资源的瓶颈。在大多数情况下,写的几率较小,读的机率较大,且同一条记录重复读的概率较大。目前解决上述缺陷采用的方式是将数据缓存在NOSQL数据库中,但数据更新(包括插入、删除、更新)时,也要向NOSQL数据库发送更新指令。这种方法需要开发人员掌握相应的NOSQL开发方法,且要通过网络调用,有一定的性能开销。另外开发人员要在更新数据库时,要同时写一段程序并刷新NOSQL中的数据,工作量也要增加。
技术实现思路
本专利技术所要解决的技术问题 是提供一种能有效消除数据库访问的瓶颈,提高数据库访问及操作性能,使数据库读的效率接近于内存访问速度的。本专利技术解决上述技术问题所采用的技术方案为:一种高并发数据库的访问方法,在数据库中设置触发器,在数据库外设置缓存,在读数据库时,先读缓存,在写数据库时,通过触发器将更新数据写到更新数据表中,并将更新数据写到缓存中,具体包括以下步骤:I)主程序读数据库时,先得到相关数据的关键值,再通过关键值读取缓存,如果缓存中存在数据,则主程序直接使用缓存数据,若缓存中不存在数据,则读取数据库,并使用读到的数据,同时将读到的数据写入缓存;2)主程序写数据库时,先将数据写入数据库,在写入数据库时通过触发器自动将更新数据写到更新数据表中,再通过更新服务线程自动将更新数据表中的信息写入缓存,用于主程序下次读写时从缓存中读取新的数据。所述的缓存设置有哈希表和双向链表,并设置有一个缓存清除线程用于定时对较长时间不访问的数据进行清理以保障有充足的内存来存储缓存数据。步骤I)主程序读数据库的具体步骤为:1-1)在缓存的哈希表中读取关键值对应的数据;1-2)判断缓存中是否有对应的数据,如果对应的数据值为空,说明要读的数据不在缓存区里,则转到步骤I 一 5);如果在缓存中读到数据则进入下一步;1-3)将数据重新插入到双向链表的队首,并在数据中记录上次访问时间为当前时间;1-4)直接使用步骤1-3)中的缓存数据;1-5)从数据库读取数据,并将数据写到缓存,数据插入到缓存中双向链表的队首,系统直接使用读到的数据。步骤2)主程序写数据库的具体步骤为:2-1)将数据直接写入数据库;2-2)触发在数据库的触发器,将更新后的数据写入一个专门的更新数据表;2-3)利用一个更新读取线程,定时读取更新数据表;2-4)将更新读取线程读到的数据写到缓存,在缓存的哈希表中设置指向该缓存数据的关键值,并在缓存的双向链表中,将该数据放到队列的首部;2-5)将已经放入缓存中的数据从数据库的更新数据表中删除。缓存清除线程运行的具体步骤为:( I)读取双向链表队尾数据;(2)若缓存占用内存超过阀值(可用内存总数的80%),则将该缓存数据从哈希表和双向链表中删除;(3)若数据的最近访问时间与当前时间的差超过阀值(例如10分钟以上),则将该缓存数据从哈希表和双向链表中删除;(4)线程休眠一段时间(如I秒钟)重新运行(I)。·将上述的高并发数据库的访问方法应用于多服务器系统的方法,设置有多台web服务器,并将其中的一台服务器设为核心服务器,当某台服务器数据发生变化时,将该服务器的变化通知核心服务器,核心服务器再将该变化通知所有的其它服务器,所有服务器的数据变更为新的数据。与现有技术相比,本专利技术的优点在于在数据库的访问和处理过程中使用缓存技术,通常缓存技术使用LRU算法,将最近访问的数据块存放到缓存中,由于数据库应用的核心操作就是数据的访问和处理,因此如果应用系统访问的大部分数据块已在缓存中,也就是数据在缓存中命中,那么应用在数据访问上的磁盘I/O等待和瓶颈将可以消除,对磁盘数据的访问效率及数据库访问效率最大可优化到接近于内存访问的速度。Web服务器在使用缓存技术后,性能得到大幅度提高,一般来说一台服务器足够承担访问负载。例如,东方热线每日接近亿次的访问量,只使用一台广告服务器,广告系统运行总体快速平稳;在缓存中设置哈希表和双向链表,将数据存放在哈希表中,能够有效适应快速的检索速度,其置入及取出性能也表现良好,同时,当数据量增大时,其检索、置入、取出效率表现稳定,利用哈希表的优点,把数据的存储和查找消耗的时间大大降低,其消耗时间几乎可以看成是常数时间;而将缓存的对象加到哈希表中的同时,双向链表可分别维持缓存对象和每个缓存对象的生命周期;而设置一个缓存清除线程用于定时对较长时间不访问的数据进行清理,可以保障有充足的内存来存储缓存数据。而对于多服务器的系统,为了有效协调各服务器的运行,则采用核心服务器通知策略:当某台服务器数据发生变化时,该服务器将变化通知核心服务器,核心服务器再将该变化通知所有的其它服务器,这样数据变化就传达到所有服务器。附图说明图1为本专利技术的方法中读数据库的流程图;图2为本专利技术的方法中写数据库的流程图;图3为本专利技术方法中缓存清除线程运行的流程图。具体实施例方式以下结合附图实施例对本专利技术作进一步详细描述。实施例一:一种高并发数据库的访问方法,在数据库中设置触发器,在数据库外设置缓存,缓存设置有哈希表和双向链表,并设置有一个缓存清除线程用于定时对较长时间不访问的数据进行清理以保障有充足的内存来存储缓存数据,在读数据库时,先读缓存,在写数据库时,通过触发器将更新数据写到更新数据表中,并将更新数据写到缓存中,具体包括以下步骤:I)主程序读数据库时,先得到相关数据的关键值,再通过关键值读取缓存,如果缓存中存在数据,则主程序直接使用缓存数据,若缓存中不存在数据,则读取数据库,并使用读到的数据,同时将读到的数据写入缓存,具体步骤为:1-1)在缓存的哈希表中读取关键值对应的数据;1-2)判断缓存中是否有对应的数据,如果对应的数据值为空,说明要读的数据不在缓存区里,则转到步骤I 一 5);如果在缓存中读到数据则进入下一步;1-3)将数据重新插入到双向链表的队首,并在数据中记录上次访问时间为当前时间;由于要淘汰的老数据是从队尾淘汰,将数据放入队首可确保该数据在目前情况下最后淘汰;1-4)直接使用步骤 1-3)中的缓存数据;1-5)从数据库读取数据,并将数据写到缓存,数据插入到缓存中双向链表的队首,系统直接使用读到的数据;缓存清除线程运行的具体步骤为:( I)读取双向链表队尾数据;(2)若缓存占用内存超过阀值(可用内存总数的80%),则将该缓存数据从哈希表和双向链表中删除;(3)若数据的最近访问时间与当前时间的差超过阀值(例如10分钟)以上,则将该缓存数据从哈希表和双向链表中删除;(4)线程休眠I秒钟时间重新运行(I)。2)主程序写数据库时,先将数据写入数据库,在写入数据库时通过触发器自动将更新数据写到更新数据表中,再通过更新服务线程自动将更新数据表中的信息写入缓存,用于主程序下次读写时从缓存中读取新的数据,具体步骤为:2-1)将数据直接写入数据库;2-2)触发在数据库的触发器,将更新后的数据写入一个专门的更新数据表;2-3)利用一个更新读本文档来自技高网...

【技术保护点】
一种高并发数据库的访问方法,其特征在于在数据库中设置触发器,在数据库外设置缓存,在读数据库时,先读缓存,在写数据库时,通过触发器将更新数据写到更新数据表中,并将更新数据写到缓存中,具体包括以下步骤:1)主程序读数据库时,先得到相关数据的关键值,再通过关键值读取缓存,如果缓存中存在数据,则主程序直接使用缓存数据,若缓存中不存在数据,则读取数据库,并使用读到的数据,同时将读到的数据写入缓存;2)主程序写数据库时,先将数据写入数据库,在写入数据库时通过触发器自动将更新数据写到更新数据表中,再通过更新服务线程自动将更新数据表中的信息写入缓存,用于主程序下次读写时从缓存中读取新的数据。

【技术特征摘要】

【专利技术属性】
技术研发人员:方净
申请(专利权)人:宁波公众信息产业有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1