数据缓冲方法、装置及存储介质与流程

文档序号:12786202阅读:284来源:国知局
数据缓冲方法、装置及存储介质与流程

本发明属于信息技术领域,具体地说,主要涉及一种的数据缓冲的方法、装置及存储介质。



背景技术:

在传统的网络应用系统中,客户端发出请求后通过服务端业务层直接对数据库进行连接查询操作,获得业务数据后再向客户端传输数据。此种机制处理少量数据和低并发的系统还能相安无事,但遇到数据量比较大和并发高的WEB系统,特别对于要求信息变化频繁、实时性数据要高求高的系统来说,此种处理手法就会遇到瓶颈。例如服务器、数据库性能急剧下降、客户端响应缓慢等等,直接影响到用户的体验性,在多线程数据量大而且更新频率高的情况下,经常会引起系统的死循环,导致各类资源利用率高,比如CPU(中央处理器)的利用率高,从而引起服务器的过热或死机,此给用户带来不佳体验,实有待改善。



技术实现要素:

本发明实施例要解决的技术问题,在于提供一种能够处理大量、高并发数据请求的数据缓冲装置及方法,用以减少数据更新频率高的情况下,引起的死循环导致CPU利用率高的缺陷。

本发明实施例解决上述技术问题的技术方案为:

一种数据缓冲方法,包括:

接收来自数据库的数据包和处理请求;

将数据缓冲区分成n个子数据缓冲区,其中子数据缓冲区对应设有子数据缓冲区序列标识符和子数据缓冲区锁定标识符,将数据库的数据包放在各个子数据缓冲区内;

子数据缓冲区接收到处理请求时,根据子数据缓冲区序列标识符锁定子数据缓冲区的数据并修改子数据缓冲区锁定标识符;

根据处理请求存储或读取子数据缓冲区的数据,在存储或读取子数据缓冲区后,解锁子数据缓冲区的数据并还原子数据缓冲区锁定标识符;

将各个子数据缓冲区的数据的送出到数据缓冲区外。

数据缓冲方法,其中,将数据缓冲区分成n个子数据缓冲区时,若使用子数据缓冲区数量大于或等于k*n时,将数据缓冲区分成2*n个子数据缓冲区。

数据缓冲方法,其中,n为16,k为0.75。

数据缓冲方法,其中,在锁定子数据缓冲区的数据并修改子数据缓冲区锁定标识符时,对锁定子数据缓冲区的其他处理请求不存储或读取子数据缓冲区的数据。

一种数据缓冲装置,其中,包括:

获取模块,接收数据库的数据包和处理请求;

数据缓冲模块,将数据缓冲区分成n个子数据缓冲区,其中所述子数据缓冲区对应设有子数据缓冲区序列标识符和子数据缓冲区锁定标识符,将所述数据库的数据包放在各个所述子数据缓冲区内;

锁定模块,每个子数据缓冲区接收到处理请求时,根据子数据缓冲区序列标识符锁定子数据缓冲区的数据并修改子数据缓冲区锁定标识符,根据所述的处理请求存储或读取子数据缓冲区的数据,在存储或读取子数据缓冲区后,解锁子数据缓冲区的数据并还原所述的子数据缓冲区锁定标识符;

传送模块,将各个子数据缓冲区的数据的送出到所述的数据缓冲区外。

所述的数据缓冲装置,其中,所述的数据缓冲模块还包括:

增量模块,将数据缓冲区分成n个子数据缓冲区时,若使用所述的子数据缓冲区数量大于或等于k*n时,将所述数据缓冲区分成2*n个子数据缓冲区。

所述的数据缓冲装置,其中,所述的n为16,所述的k为0.75。

一种存储指令的计算机可读存储介质,当被计算设备执行时,所述指令使得计算设备数据缓冲增加的一种优化方法,所述方法包括:

接收来自数据库的数据包和处理请求;

将数据缓冲区分成n个子数据缓冲区,其中所述子数据缓冲区对应设有子数据缓冲区序列标识符和子数据缓冲区锁定标识符,将所述数据库的数据包放在各个所述子数据缓冲区内;

所述子数据缓冲区接收到所述的处理请求时,根据子数据缓冲区序列标识符锁定子数据缓冲区的数据并修改子数据缓冲区锁定标识符;

根据所述的处理请求存储或读取子数据缓冲区的数据,在存储或读取子数据缓冲区后,解锁子数据缓冲区的数据并还原所述的子数据缓冲区锁定标识符;

将各个子数据缓冲区的数据的送出到所述的数据缓冲区外。

所述的计算机可读存储介质,其中,其中所述方法还包括:将数据缓冲区分成n个子数据缓冲区时,若使用所述的子数据缓冲区数量大于或等于k*n时,将所述数据缓冲区分成2*n个子数据缓冲区。

所述的计算机可读存储介质,其中,其中所述方法还包括,所述的n为16,所述的k为0.75。

本发明实施例的一种数据缓冲装置及方法具有以下有益效果:通过对数据缓冲模块中设置队列单元,对接收到的请求线程进行归类排序,避免了无序以及变化复杂的请求线程对服务器造成的处理压力,其次加入了锁定模块,对排序后的多个数据列进行释放管理,确保同种类的请求线程不会同时进行运算调用数据,减少因数据量大并且高频率高引起的数据死循环的产生,降低CPU的占用率,从而提高CPU的计算速率,进而保证服务器在处理大量、高并发数据请求的时候,能够快速并正常的提供反馈数据,数据进行同步更新,提高数据的实时性,保证反馈数据均是最新的数据。本发明实施例的数据缓冲区分成n个,效率提升n倍,默认n为16,则效率至少提高16倍。

附图说明

图1为一个实施例中数据缓冲方法运行的应用环境图;

图2为本发明实施例的数据缓冲区的结构示意图;

图3为本发明实施例1中数据缓冲方法的流程图;

图4为本发明实施例3中数据缓冲模块的框架示意图。

具体实施方式

下面结合附图对本发明实施例数据缓冲方法做详细说明。

为了使本技术领域的技术人员更好地理解本发明实施例的方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在某有做出创造性劳动前提下所获得的所有其它实施例,都应当属于本发明保护的范围。

本发明实施例说明书、权利要求书和附图中出现的术语“第一”、“第二”、“第三”等是用于区别不同的对象,而并非用于描述特定的顺序。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含。例如包含了一些列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选的包括没有列出的步骤或单元,或可选的还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。

【实施例1】

图1为一个实施例中数据缓冲方法运行的应用环境图。如图1所示,该应用环境包括终端110、服务器120,其中终端110和服务器120通过网络进行通信。

终端110可为智能手机、平板电脑、笔记本电脑、台式计算机等客户端,但并不局限于此。终端110可通过网络从服务器120接收数据,如音视频数据等,或向服务器120发送数据等,服务器120可以响应终端110发送的视频传输请求等。该终端110上可以有存储介质上,本办法可以在其上使用。

服务器120可以多台并发形式,也可以是单一的一台作为缓冲区,与其他服务器与数据库服务器进行连接。在服务器120上有存储介质,本办法也可以在其上使用。所以本方法并不限于终端110或服务器120上一端,依据实际情况而有所不同。

如图2所示为本发明实施例的数据缓冲区的结构示意图,本实施例中,客户端100与数据库300之间设有一数据缓冲区200。数据缓冲区200与数据库200之间是实时连接,保证了数据缓冲区200与数据库300之间是同步的。此时,客户端无需直接读取服务器上数据库,而是实时读取数据缓冲区的数据。

本发明一种数据缓冲方法,包括如下步骤。

接收来自数据库的数据包和处理请求。该步骤保证了数据缓冲区200与数据300间的同步,同时为后续处理方法打下基础。

接着,本方法将数据缓冲区分成n个子数据缓冲区,其中子数据缓冲区对应设有子数据缓冲区序列标识符和子数据缓冲区锁定标识符,将数据库的数据包放在各个子数据缓冲区内。该子数据缓冲区序列标识符可以是按数字顺序,比如1,2,3的排列下去,也可以按字母A,B,C的排列下去。当然子数据缓冲区序列标识符也可以是无序的,只要起到表示作用就可以。该子数据缓冲区锁定标识符也可以是数字、字母等类型标识。比如,0,1两种模式,一种表示了锁定,一种表示了未锁定。

将数据缓冲区分成n个子数据缓冲区时,若使用子数据缓冲区数量大于或等于k*n时,将数据缓冲区分成2*n个子数据缓冲区。此步骤主要是防止子数据缓冲区不够用,增加子数据缓冲区的量,从而增加整体数据缓冲区的量,从而解决高并发问题。k与n的设置可以根据不同的数据来定,比如图片与视频因为数据大小不一样,所以在k与n的初始值就有所不同。

本方法还包括:该子数据缓冲区接收到处理请求时,根据子数据缓冲区序列标识符锁定子数据缓冲区的数据并修改子数据缓冲区锁定标识符;在锁定子数据缓冲区的数据并修改子数据缓冲区锁定标识符时,对锁定子数据缓冲区的其他处理请求不存储或读取子数据缓冲区的数据。根据处理请求存储或读取子数据缓冲区的数据,在存储或读取子数据缓冲区后,解锁子数据缓冲区的数据并还原子数据缓冲区锁定标识符。

以上步骤如图3所示,本图3为本发明实施例1中数据缓冲方法一步骤的流程图。步骤S101,根据子数据缓冲区标识符寻找到对应的锁定标识符。步骤S102,判断该子数据缓冲区锁定标识符。如果锁定标识符无修改,则执行步骤S103修改锁定标识符,步骤S104存储或读取子数据库缓冲区的数据以及步骤S105,还原锁定标识符。也就是说,如果锁定标识符无修改,先修改了锁定标识符,然后处理对应的数据,处理完后还原锁定标识符。

在步骤S102,判断该子数据缓冲区锁定标识符。如果锁定标识符已经修改,对该数据的其他请求不处理,该请求重新开始搜寻。此时保证了系统在进行数据处理时单一任务在处理,也就是说,仅仅处理一个请求,进一步加快服务器的运转速率。

将各个子数据缓冲区的数据的送出到数据缓冲区外。此时,客户端100无需直接读取服务器上数据库300,而是实时读取数据缓冲区200的数据,也就是各个子数据缓冲区的数据。而因为该方法是实时接收自数据库的数据包和处理请求,也就是跟数据库端实时更新,保持同步状态。而因为有多个子数据缓冲区,也就是有多个缓冲区,保证高并发的效率。本实施例中,在步骤S102,判断该子数据缓冲区锁定标识符,如果锁定标识符已经修改,对该数据的其他请求不处理之后,较佳的实施例为对该请求进行排序,在原锁定标识符还原后按排序队列依次进行处理。

【实施例2】

本实施例与实施例1不同的地方是,给出了n与k的值,n=16,k=0.75。也就是说开始就分为16个子数据缓冲区,根据数据包大小使用16个数据缓冲区,当使用到第12个的时候,也就是k*n的值大小的时候。该方法自动增加区域数量到32个。依次类推,在32个不够用的时候,可以增加为64个,以此类推。根据以上介绍,可知k最大为1。在实际中测试,以n=16,k=0.75为参数。因为重新划分子数据缓冲区也是非常消耗资源的,但比不增加还是效果要好。采用n=16,k=0.75较好的利用了资源的一实施例。

【实施例3】

如图4所示,为本发明数据缓冲模块的框架示意图,该数据缓冲装置包括获取模块10,数据缓冲模块20,锁定模块30余传送模块40。

该获取模块10,接收数据库的数据包和处理请求;

该数据缓冲模块20,将数据缓冲区分成n个子数据缓冲区,其中子数据缓冲区对应设有子数据缓冲区序列标识符和子数据缓冲区锁定标识符,将数据库的数据包放在各个子数据缓冲区内;

该锁定模块30,每个子数据缓冲区接收到处理请求时,根据子数据缓冲区序列标识符锁定子数据缓冲区的数据并修改子数据缓冲区锁定标识符,根据处理请求存储或读取子数据缓冲区的数据,在存储或读取子数据缓冲区后,解锁子数据缓冲区的数据并还原子数据缓冲区锁定标识符;

该传送模块40,将各个子数据缓冲区的数据的送出到数据缓冲区外。

数据缓冲装置是引入一个“分段锁”的概念,具体可以理解为把一个大的Map拆分成N个小HashTable(内存块),每个HashTable存在一把锁。根据键值的hashCode来决定把Key放到哪个HashTable中。在放入和获取数据的时候,都是先根据hashCode算出放到哪个HashTable中,然后找到对应的HashTable进行数据存储和读取,如果遇到两个线程同时指向同一个HashTable,那么第二个线程就会阻塞,直到第一个线程释放锁后第二线程才去操作。

进一步,该数据缓冲装置还包括增量模块,将数据缓冲区分成n个子数据缓冲区时,若使用子数据缓冲区数量大于或等于k*n时,将数据缓冲区分成2*n个子数据缓冲区。n=16,k=0.75。增量模块也就是说当数据量占用超过16*0.75=12的时候,数据缓冲装置的会以16的倍数进行自动扩容,扩容的操作是一件比较耗性能的事,所以在实际应用中,还是要准确地估算池的初始化容量最佳大小才能更好的利用资源不浪费。

【实施例4】

一种存储指令的计算机可读存储介质,当被计算设备执行时,指令使得计算设备数据缓冲增加的一种优化方法,方法包括:

接收来自数据库的数据包和处理请求;

将数据缓冲区分成n个子数据缓冲区,其中子数据缓冲区对应设有子数据缓冲区序列标识符和子数据缓冲区锁定标识符,将数据库的数据包放在各个子数据缓冲区内;

子数据缓冲区接收到处理请求时,根据子数据缓冲区序列标识符锁定子数据缓冲区的数据并修改子数据缓冲区锁定标识符;

根据处理请求存储或读取子数据缓冲区的数据,在存储或读取子数据缓冲区后,解锁子数据缓冲区的数据并还原子数据缓冲区锁定标识符;

将各个子数据缓冲区的数据的送出到数据缓冲区外。

计算机可读存储介质,其中,其中方法还包括:将数据缓冲区分成n个子数据缓冲区时,若使用子数据缓冲区数量大于或等于k*n时,将数据缓冲区分成2*n个子数据缓冲区。

计算机可读存储介质,其中,其中方法还包括,n=16,k=0.75。

本发明实施例的一种数据缓冲装置及方法具有以下有益效果:通过对数据缓冲模块中设置队列单元,对接收到的请求线程进行归类排序,避免了无序以及变化复杂的请求线程对服务器造成的处理压力,其次加入了线程锁定单元,对排序后的多个数据列进行释放管理,确保同种类的请求线程不会同时进行运算调用数据,减少因数据量大并且高频率高引起的数据死循环的产生,降低CPU的占用率,从而提高CPU的计算速率,进而保证服务器在处理大量、高并发数据请求的时候,能够快速并正常的提供反馈数据,数据进行同步更新,提高数据的实时性,保证反馈数据均是最新的数据。本发明实施例的数据缓冲区分成N个,效率提升N倍,默认提升N为16,则效率至少提高16倍。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。

在本申请所提供的几个实施例中,应当理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或者直接耦合或通信连接是可以通过一些接口、装置或单元的间接耦合或者通信连接,可以是电性或其它的形式。

另外,本发明各个实施例中的各功能模块或单元可以集成在一个处理单元中,也可以是各个模块或单元单独物理存在,也可以两个或两个以上模块或单元集成在一个模块或单元中。上述集成的模块或单元可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

集成的单元或模块如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质或者说对现有技术做出贡献的部分或者改技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可谓个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、移动硬盘、磁碟或者光盘等各种存储程序代码的介质。

以上所述,以上实施例仅用以说明本发明实施例的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各个实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各个实施例技术方案的范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1