以用户为中心且基于多级缓存的海洋时空数据访问方法与流程

文档序号:12040117阅读:242来源:国知局
以用户为中心且基于多级缓存的海洋时空数据访问方法与流程
本发明涉及计算机数据处理领域,具体涉及一种以用户为中心且基于多级缓存的海洋时空数据访问方法。

背景技术:
海洋时空数据不仅包含三维空间数据,而且涵盖各类时序多变量空间数据,如气象、水文、海洋生物,以及实时灾难预警、航线调整等信息。海洋时空数据具有多源、异质、结构复杂、数据量大以及空间分布不均匀等特性,面对用户极具个性化的访问需求,需要提供能够高效调度和管理海洋时空数据的海洋地理信息系统。缓存能缓解处理器和磁盘I/O之间的性能差距,是提高数据访问效率的有效机制,尤其在数据量大、访问频繁的情况下缓解性能更为明显,随着硬件技术的发展,内存容量大幅提高,为缓存策略的发展带来新的机遇。传统的缓存策略受容量的限制,需以进程为数据访问单位,考虑全体访问数据的缓存。假设访问数据集为某时刻驻留集为T={a1,a2,a3,…,ai},其中缓存策略主要基于访问频率和访问时间,即访问频率较高和最近访问的数据驻留在时刻驻留集T中,但是在实际应用中,用户完整的数据请求可能需要多个进程才能完成,尤其是涉及到多方面数据时,缓存带来的效益并非对全体用户公平一致,因此,以进程为单位的缓存策略并不能适应用户个性化的数据访问模式。在三维海洋信息系统中,所有用户都是同等地位的,用户不应以访问 的先后顺序或以访问量的大小作为优先的条件。作为缓存策略的核心,不同的缓存策略必然产生不同的替换算法。传统的缓存替换算法主要利用对数据块的访问频率或者最近的访问时间为标准,判断数据块在本次替换操作中是否应该被替换。经典的替换算法以LRU、MRU、LFU三类代表,另外常见的基于频率和时间平衡策略的算法有UFU、ARC、MQ/2Q等,然而,这些替换算法的判断标准都比较单一,且基本上只对一类访问模式有比较好的效果,对其他的访问模式效果并不明显。多级缓存从逻辑上对数据分层缓存,主要分为两类:基于层次感知的缓存和基于侵略性协作的缓存。前者通过猜测判断缓存数据的冗余情况来改变自身的缓存结果;后者则是通过对其他缓存的侵略性协作改变当前缓存数据。总体来说,二者仍然基于访问频率和访问时间的平衡策略。为了满足三维海洋信息系统实时数据访问要求,快速响应用户数据请求,需要研究高效的缓存策略。海洋信息系统单次访问数据量较大,如查看某海港实时海况,在三维海洋信息系统中不仅要获取海港三维模型,而且要读取海港实时天气数据。传统的缓存策略尽量缓存最近访问最多的数据,当缓存池空闲容量不足时,新用户的访问数据需要等到替换完成后才能全部加载到缓存池中,新用户等待时间较长。

技术实现要素:
本发明提供了一种以用户为中心且基于多级缓存的海洋时空数据访问方法,以用户为中心,保证每个用户能够公平享有数据缓存带来的优势,同时,能够减小磁盘I/O,降低数据的交换频率,同时基于海洋时空数据的自身特点,通过预读机制进一步提高数据访问的效率。一种以用户为中心且基于多级缓存的海洋时空数据访问方法,所述海洋时空数据存放于多台数据服务器中,每台数据服务器中建立有:数据库,用于存放海洋时空数据;缓存池,用于存放数据库中被用户访问过的数据;缓存列表,用于存放该数据服务器的各用户的访问记录。数据服务器针对所有用户建立缓存列表,记录每个用户在缓存服务器上的访问时间以及访问的数据,相同数据被访问的次数等信息。缓存池中以数据项的形式存储所有被用户访问过的数据,数据项除了包含数据信息外,还包括与数据相关的信息,例如数据大小、数据位置、访问记录等。进行海洋时空数据访问的步骤为:(1)用户通过客户端指定查询条件,客户端向中间服务器发出查询请求。本申请的客户端中建立有数据缓存区、按R树组织的空间索引(记录海洋空间中每块区域对应的所有数据的ID)以及请求队列。用户指定查询条件时,如果查询条件指向单个数据,则根据该单个数据的ID查找数据缓存区,如果数据不在数据缓存区中,则将该数据的ID放入请求队列中,同时记录此次请求的时间戳。如果查询条件指向某块区域(某块区域是指某海洋空间范围内的数据,利用地理上的经度和纬度进行区域限定),则根据空间索引查找该块区域中所有数据的ID,并根据每个数据的ID查找数据缓存区,如果某个数据不在数据缓存区中,则将该数据的ID放入请求队列中,同时记录此次请求的时间戳。列入请求队列中的数据极为客户端不能直接获得的数据,须向中间服务器发出查询请求,中间服务器为用户分配合适的数据服务器,数据服务器向用户返回所需的数据。(2)中间服务器接收查询请求,根据请求数据的位置,为该用户指定数据服务器,被指定的数据服务器根据缓存列表判断该用户的请求数据是否有访问记录;如果有访问记录,则从缓存池中读取该数据并返回给用户;否则,则跳转至步骤(3),并更新缓存列表。作为优选,数据服务器定时向中间服务器发送心跳信息,中间服务器根据心跳信息判断各数据服务器的空闲状态。中间服务器接收查询请求,判断请求数据所在的数据服务器,当请求 数据存在于多台数据服务器时,优先指定空闲的数据服务器。(3)检查缓存池中是否存在请求数据;如果缓存池中有请求数据,则将该请求数据返回给用户;否则,从该数据服务器的数据库中读取请求数据并返回给用户,同时更新缓存池。缓存池每次更新完成后,缓存池中的各数据项的位置记录在缓存索引中,每次从缓存池中读取数据时,根据该缓存索引读取相应的数据,每次更新缓存池时,对缓存索引做相应更新。更新缓存池时,首先检查缓存池的剩余容量,如果剩余容量可以容纳需要更新的数据,则将需要更新的数据载入缓存池,完成更新;否则,计算缓存池内所有数据项的权值,按照权值由小至大的次序,将缓存池内原有的数据项取出缓存池,直至缓存池的剩余容量能够容纳需要更新的数据,将需要更新的数据载入缓存池,完成更新。三维海洋信息系统中,用户访问数据量较大,为了减少等待时间,需要根据对用户可能访问的数据做预测,优选地,从数据库中读取数据前,判断所读取数据对应的地理位置,以地理位置为中心,按照预定的半径确定地理范围(地理范围利用经度和纬度确定),读取与该地理范围相对应的所有同类型数据,并更新缓存池,同时仅将用户请求的数据返回给用户。三维海洋信息系统中包含三维空间数据以及各类时序多变量空间数据,如气象、水文、海洋生物,以及实时灾难预警、航线调整等信息,所述的同类型数据是指,描述同一类信息的数据,例如用户需要查找水文数据,则以所读取数据对应的地理位置为中心,预定半径的地理范围内的所有水文数据均为同类型数据。同类型数据的数据量可能极大,可以改变预定半径的大小,以减少数据量,也可以依据与所读取数据的距离由小到大的次序,选择固定数目的同类型数据,进行缓存池的更新。更新缓存池时,选定的同类型数据全部载入缓存池中,而返回给用户的仅为用户所查询的数据。本发明利用三级缓存(分别为客户端的数据缓存区、数据服务器的缓 存列表以及数据服务器的缓存池)最大程度地减小客户端的数据缓存量,同时,最大程度地减少对数据服务器中数据库的直接读取操作,利用分布式系统内存的大容量性质,为所有用户建立个性化的缓存,提高每个用户的数据访问速度。本发明以用户为中心且基于多级缓存的海洋时空数据访问方法,以用户为中心,利用三级缓存提高用户的数据访问速度,同时,在更新数据服务器的缓存池时,采用预读机制,将用户请求数据的相关数据一并放入缓存池中,进一步提高用户的数据访问速度。附图说明图1为本发明以用户为中心且基于多级缓存的海洋时空数据访问方法中数据服务器中多级缓存结构示意图;图2为本发明以用户为中心且基于多级缓存的海洋时空数据访问方法中的数据访问流程图;图3为本发明以用户为中心且基于多级缓存的海洋时空数据访问方法中数据服务器读取数据的流程图;图4为本发明以用户为中心且基于多级缓存的海洋时空数据访问方法中缓存池更新数据流程图。具体实施方式下面结合附图,对本发明以用户为中心且基于多级缓存的海洋时空数据访问方法做详细描述。本发明以用户为中心且基于多级缓存的海洋时空数据访问方法,海洋时空数据存放于多台数据服务器中,如图1所示,每台数据服务器中建立有:数据库,用于存放海洋时空数据;缓存池,用于存放数据库中被用户访问过的数据;缓存列表,用于存放该数据服务器的各用户的访问记录。缓存池中以数据项的形式记录所有用户访问过的数据,数据项中包括数据以及数据的相关状态,数据项记为其中,ui为访问过该数据的所有用户的数量,ht为为该数据被访问的所有次数,t 为最近访问时间间隔(即该数据最后两次访问的时间间隔),size为数据的大小。数据服务器为每个活跃用户(有数据查询需求的用户)建立一个缓存列表,缓存列表的初始状态为空,用户每次访问的数据都加载到缓存池中,缓存列表中记录缓存池中数据的地址作为缓存索引,缓存列表记为item=(ci,idx),其中ci为第i个用户,idx为缓存索引,当用户不再活跃时,删除该缓存列表中的相应项,并更新缓存池中的数据项。用户通过客户端进行数据查询,客户端中建立有数据缓存区、按R树组织的空间索引(记录海洋空间中每块区域对应的所有数据的ID)以及请求队列。如图2、图3所示,进行海洋时空数据访问的步骤为:(1)用户通过客户端指定查询条件,客户端向中间服务器发出查询请求;用户指定查询条件时,如果查询条件指向单个数据,则根据该单个数据的ID查找数据缓存区,如果数据不在数据缓存区中,则将该数据的ID放入请求队列中,同时记录此次请求的时间戳。如果查询条件指向某块区域(某块区域是指某海洋空间范围内的数据,利用地理上的经度和纬度进行区域限定),则根据空间索引查找该块区域中所有数据的ID,并根据每个数据的ID查找数据缓存区,如果某个数据不在数据缓存区中,则将该数据的ID放入请求队列中,同时记录此次请求的时间戳。(2)中间服务器接收查询请求,根据请求数据的位置,为该用户指定数据服务器,被指定的数据服务器根据缓存列表判断该用户的请求数据是否有访问记录;如果有访问记录,则从缓存池中读取该数据并返回给用户;否则,则跳转至步骤(3),并更新缓存列表。数据服务器定时向中间服务器发送心跳信息,中间服务器根据心跳信息判断各数据服务器的空闲状态。中间服务器接收查询请求,判断请求数据所在的数据服务器,当请求数据存在于多台数据服务器时,优先指定空闲的数据服务器。(3)检查缓存池中是否存在请求数据;如果缓存池中有请求数据,则将该请求数据返回给用户;否则,从该数据服务器的数据库中读取请求数据并返回给用户,同时更新缓存池。从数据库中读取数据前,判断所读取数据对应的地理位置,以地理位置为中心,按照预定的半径确定地理范围,读取与该地理范围相对应的所有同类型数据,并更新缓存池,同时仅将用户请求的数据返回给用户。本申请利用KNN算法以所读取数据对应的地理位置为中心,寻找最近的k个(k值可以人为设定)同类型的数据(例如从数据库中查找5km范围内的水深和底质数据),载入缓存池中。访问时,用户可能会连续改变查询条件,即更改所读取数据,也即更新相对应的地理位置,在改变查询条件的过程中,如果连续给出两次查询条件之间的时间差小于某一阈值,则终止前一查询条件的数据查找,直接进行后一查询条件的数据查找。如图4所示,更新缓存池时,首先检查缓存池的剩余容量,如果剩余容量可以容纳需要更新的数据,则将需要更新的数据载入缓存池,完成更新;否则,计算缓存池内所有数据项的权值,按照权值由小至大的次序,将缓存池内原有的数据项取出缓存池,直至缓存池的剩余容量能够容纳需要更新的数据,将需要更新的数据载入缓存池,完成更新。数据项的权值计算公式为w=∑uf(ht,t)=∑u(a*size+(b*ht)/(c*t)),其中a、b、c为参数;通过设定不同的a、b、c值,可以改变数据项的权值,选择取出缓存池的数据项,例如减小a的取值,即减小数据的大小在权值中的比重,也即数据的大小对于权值的影响较小。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1