一种数据缓存方法及系统技术方案

技术编号:2830686 阅读:252 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种数据缓存方法及系统,以解决现有的报表缓存方法在内存消耗和访问速度上相冲突的问题。所述方法包括:将存储空间划分为索引区和数据区;将数据分块;根据分块结果,将每块数据依次写入存储空间的数据区,将每块的起始位置依次写入索引区;根据分块结果及每块的起始位置,读取数据。所述缓存技术由于每次从硬盘读取数据,减少了内存的占用,在多并发、大数据量的情况下,可以大量节省内存空间的使用,提高系统的并发处理能力;同时,通过这种索引方式从硬盘读取报表文件,极大地提高了文件读取的效率。因此,本发明专利技术所述方法在内存空间和访问速度间取得了一个平衡。

【技术实现步骤摘要】

本专利技术涉及数据緩存技术,特别是涉及一种数据缓存方法及系统
技术介绍
报表是一种具有行列结构的数据表示形式,表示的是一个时间点上业务数 据的展现。参照图1所示,是一张报表实例图,该图表示的是一张用户信息表,包括3行4列,共12个单元格。在很多应用系统中,系统运行的结果通过报 表来展示。在实际应用中,当系统生成才艮表后,用户仍有一些对于这个l艮表的处理, 如翻页、打印、导出PDF、 Excel格式文件等。在这个过程中,如果系统每次 重新生成报表,则会增力口报表服务器、数据库服务器的负荷,并增加用户的等 待时间;同时两次生成l艮表的过程中,数据库中的数据可能发生变化,这样就 会造成用户通过浏览器看到和打印出的报表内容不一致。因此, 一个高效、完 善的报表服务器必须具有緩存报表数据的能力。对于报表的緩存,目前有两种典型的方法 一种方法是把报表数据完整写 入内存,然后通过最近最少访问或者加权等算法,管理维护报表的緩存列 表;另一种方法是把报表数据完整写入硬盘等外部存储介质,每次在对报表数 据访问前,从硬盘加载报表数据。所述两种方法为应用系统提供了不同的报表緩存机制,但都存在缺点第 一种方法由于把报表数据写入内存,对于并发量大、报表数据量大的应用,会 大量消耗应用服务器的内存,导致服务器效率降低,甚至出现内存溢出、系统 宕机等现象;而第二种方法虽然避免了系统内存的大量消耗,但是每次访问硬 盘读取整个报表内容的响应时间,远高于从内存读取的操作时间,同时硬盘文 件的读写会占用大量的C PU时间,从而影响整个系统的性能。
技术实现思路
本专利技术所要解决的技术问题是提供一种数据緩存方法及系统,以解决现有 的报表緩存方法在内存消耗和访问速度上相沖突的问题。为解决上述技术问题,根据本专利技术提供的具体实施例,本专利技术公开了以下技术方案 、 一种数据緩存方法,包括 将外部存储空间划分为索引区和数据区;将数据分块;根据数据分块结果,将每块数据依次写入所述外部存储空间的数据区,将 每块数据的起始位置依次写入所述外部存储空间的索引区; 根据数据分块结果及每块数据的起始位置,读取数据。 其中,所述数据具有行列结构,数据分块时按照行或者列进行分块。 一种优选的数据緩存方法,包括将外部存储空间划分为索引区和数据区,所述数据区又把数据块划分为块 索引区和块数据区; 将数据分块;根据数据分块结果,将每块数据依次写入所述外部存储空间的数据区,将 每块数据的起始位置依次写入所述外部存储空间的索引区;写入每块数据时, 将每行数据依次写入该数据块块数据区,将每行的起始位置依次写入该数据 块的块索引区;根据数据分块结果、每块数据的起始位置及每行数据的起始位置,读取数据。其中,按照以下步骤进行数据分块预置最大块数和每块最小行数;如果 数据的所有行数大于最大块数与每块最小行数的乘积,则每块行数等于每块最 小行数乘以2;否则,每块行数等于每块最小行数,数据块数等于(所有行数 +每块行数-1) ^块4亍数。其中,根据分块结果按照以下步骤写入数据才艮据块数计算索引区大小, 得到数据区起始位置;根据块中行数计算块索引区大小,得到块数据区起始位 置;写入当前行,记录当前行位置,并得到下一行的起始位置;当写入一块数 据后,将该块中每行的起始位置写入该块的块索引区;当写入所有数据块后, 将每块的起始位置写入存储空间的索引区。优选的,所述方法还包括将每块数据包含的行数也写入块索引区。其中,根据分块结果按照以下步骤读取数据根据块数和每块行数,得到 请求行所在块和在块中的序号;根据请求行所在块,查询存储空间的索引区, 得到该块的起始位置;根据请求行在块中的序号,继续查询该块的块索引区, 得到该请求行的起始位置;从该请求行的起始位置读取行数据。优选的,所述方法还包括緩存读取的一行数据,当请求读取该行中的单 元格时,直接从緩存中读取。其中,所述数据具有行列结构,所述按照行进行分块的数据,通过行列坐 标变换,可置换成按照列进行分块的数据。优选的,每次执行读或写数据时,都执行一次数据分块操作得到分块结果。一种数据緩存系统,包括存储单元,用于将外部存储空间划分为索引区和数据区,其中数据区存储 划分为块的数据,索引区存储每块数据的起始位置; 凄t据分块单元,用于将数据分块;写操作单元,用于根据数据分块结果,将每块数据依次写入所述外部存储 空间的数据区,将每块数据的起始位置依次写入所述外部存储空间的索引区; 读操作单元,用于根据数据分块结果及每块数据的起始位置,读取数据。 其中,所述数据具有行列结构,所述数据分块单元按照行或者列进行分块。 优选的,所述存储单元中,数据区又把数据块划分为块索引区和块数据区, 其中每块数据的块数据区存储该块的所有行数据,块索引区存储该块中每行的 起始位置。优选的,所述每块数据的块索引区还存储该块数据包含的行数。 优选的,所述系统还包括緩存单元,用于緩存读取的一行数据,当请求 读取该行中的单元格时,直接从緩存单元中读取。根据本专利技术提供的具体实施例,本专利技术公开了以下技术效果 本专利技术实施例提供了 一种数据緩存方法,针对具有行列结构的报表数据, 将报表数据分块存储到文件中。以文件形式存储数据的硬盘空间被划分为索引 区和数据区,其中数据区存储分块数据,索引区存储每块数据的起始位置,通 过写操作将报表数据写入文件。这样,在读取报表数据时根据索引区就可以直接定位到所在的块,在块中快速查找到所需要的数据。上述緩存技术在内存中只保存报表名称(在硬盘中通过文件名称区分不同 文件),而将报表数据存放在硬盘等外部存储介质中,每次读取时根捧报表名 称从硬盘加载相应数据。本专利技术对于报表的访问,由于每次从硬盘读取数据, 减少了内存的占用,在多并发、大数据量的情况下,可以大量节省内存空间的使用,提高系统的并发处理能力;同时,通过这种索引方式从硬盘读取才艮表文 件,极大地提高了文件读取的效率。因此,本专利技术所述方法在内存空间和访问 速度间取得了一个平衡。优选的,文件的数据区又按照数据块划分为块索引区和块数据区,其中每 块数据的块数据区存储该块的所有行数据,块索引区存储该块中每行的起始位 置。这样,在读取才艮表数据时通过两层索引就可以快速定位,即先在文件索引 区找到请求数据所在的块,然后在该块的块索引区找到请求数据的起始位置, 进而读取所需数据。优选的,在实际应用中,对应报表数据的访问,通常会一次访问同一行中 的每一个格子,所以在内存中緩存了一行的信息。这样在得到访问一个格子的 请求时,可以先检查是否为緩存行的某个格子,如果是则可以直接使用緩存行, 而不需要从硬盘文件中读取了 。附图说明图l是现有技术中的报表实例图2是本专利技术实施例中l艮表数据写入文件前后的对比图3是对图2改进后的数据存储示意图4是本专利技术实施例中才艮表数据分块算法的流程图5是本专利技术实施例中报表写入文件的流程图6是本专利技术实施例中从文件中读取报表的流程图7是本专利技术实施例所述报表緩存系统的结构框图。具体实施例方式为使本专利技术的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本专利技术作进一步详细的说明。针对现有技术中的报表緩存方式不能同时在内存消耗和访问速度上达到要求的问题,本专利技术实施例提供了一种报表数据緩存方法,对要本文档来自技高网...

【技术保护点】
一种数据缓存方法,其特征在于,包括:将外部存储空间划分为索引区和数据区;将数据分块;根据数据分块结果,将每块数据依次写入所述外部存储空间的数据区,将每块数据的起始位置依次写入所述外部存储空间的索引区;根据数据 分块结果及每块数据的起始位置,读取数据。

【技术特征摘要】
1、一种数据缓存方法,其特征在于,包括将外部存储空间划分为索引区和数据区;将数据分块;根据数据分块结果,将每块数据依次写入所述外部存储空间的数据区,将每块数据的起始位置依次写入所述外部存储空间的索引区;根据数据分块结果及每块数据的起始位置,读取数据。2、 根据权利要求1所述的方法,其特征在于所述数据具有行列结构, 数据分块时按照行或者列进行分块。3、 一种数据緩存方法,其特征在于,包括将外部存储空间划分为索引区和数据区,所述数据区又把数据块划分为块 索引区和块数据区; 将数据分块;根据数据分块结果,将每块数据依次写入所述外部存储空间的数据区,将 每块数据的起始位置依次写入所述外部存储空间的索引区;写入每块数据时, 将每行数据依次写入该数据块的块数据区,将每行的起始位置依次写入该数据 块的块索引区;根据数据分块结果、每块数据的起始位置及每行数据的起始位置,读取数据。4、 根据权利要求3所述的方法,其特征在于,按照以下步骤进行数据分块预置最大块数和每块最小行数;如果数据的所有行数大于最大块数与每块最小行数的乘积,则每块行数等 于每块最小行数乘以2;否则,每块行数等于每块最小行数,数据块数等于 (所有行数+每块行数-1 ) +每块行数。5、 根据权利要求3所述的方法,其特征在于,根据分块结果按照以下步 骤写入数据根据块数计算索引区大小,得到数据区起始位置; 根据块中行数计算块索引区大小,得到块数据区起始位置; 写入当前行,记录当前行位置,并得到下一行的起始位置; 当写入一块数据后,将该块中每行的起始位置写入该块的块索引区; 当写入所有数据块后,将每块的起始位置写入存储空间的索引区。6、 根据权利要求5所述的方法,其特征在于,还包括将每块数据包含 的行数也写入块索引区。7、 根据权利要求3所述的方法,其特征在于,根据分块结果...

【专利技术属性】
技术研发人员:邢铁军孙福权陈廷斌
申请(专利权)人:东软集团股份有限公司
类型:发明
国别省市:89[中国|沈阳]

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

1