CN100541454C - 一种数据缓存方法及系统 - Google Patents
一种数据缓存方法及系统 Download PDFInfo
- Publication number
- CN100541454C CN100541454C CNB200710195981XA CN200710195981A CN100541454C CN 100541454 C CN100541454 C CN 100541454C CN B200710195981X A CNB200710195981X A CN B200710195981XA CN 200710195981 A CN200710195981 A CN 200710195981A CN 100541454 C CN100541454 C CN 100541454C
- Authority
- CN
- China
- Prior art keywords
- data
- piece
- row
- blocks
- reference position
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 56
- 230000015654 memory Effects 0.000 claims abstract description 58
- 230000003139 buffering effect Effects 0.000 claims description 2
- 238000005516 engineering process Methods 0.000 abstract description 6
- 238000012545 processing Methods 0.000 abstract description 5
- 238000004422 calculation algorithm Methods 0.000 description 22
- 230000008569 process Effects 0.000 description 17
- 238000010586 diagram Methods 0.000 description 13
- 238000004364 calculation method Methods 0.000 description 3
- 238000013500 data storage Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 238000007514 turning Methods 0.000 description 3
- 238000002679 ablation Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000000151 deposition Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000009795 derivation Methods 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 239000012467 final product Substances 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000007639 printing Methods 0.000 description 1
- 239000000047 product Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据缓存方法及系统,以解决现有的报表缓存方法在内存消耗和访问速度上相冲突的问题。所述方法包括:将存储空间划分为索引区和数据区;将数据分块;根据分块结果,将每块数据依次写入存储空间的数据区,将每块的起始位置依次写入索引区;根据分块结果及每块的起始位置,读取数据。所述缓存技术由于每次从硬盘读取数据,减少了内存的占用,在多并发、大数据量的情况下,可以大量节省内存空间的使用,提高系统的并发处理能力;同时,通过这种索引方式从硬盘读取报表文件,极大地提高了文件读取的效率。因此,本发明所述方法在内存空间和访问速度间取得了一个平衡。
Description
技术领域
本发明涉及数据缓存技术,特别是涉及一种数据缓存方法及系统。
背景技术
报表是一种具有行列结构的数据表示形式,表示的是一个时间点上业务数据的展现。参照图1所示,是一张报表实例图,该图表示的是一张用户信息表,包括3行4列,共12个单元格。在很多应用系统中,系统运行的结果通过报表来展示。
在实际应用中,当系统生成报表后,用户仍有一些对于这个报表的处理,如翻页、打印、导出PDF、Excel格式文件等。在这个过程中,如果系统每次重新生成报表,则会增加报表服务器、数据库服务器的负荷,并增加用户的等待时间;同时两次生成报表的过程中,数据库中的数据可能发生变化,这样就会造成用户通过浏览器看到和打印出的报表内容不一致。因此,一个高效、完善的报表服务器必须具有缓存报表数据的能力。
对于报表的缓存,目前有两种典型的方法:一种方法是把报表数据完整写入内存,然后通过“最近最少访问”或者“加权”等算法,管理维护报表的缓存列表;另一种方法是把报表数据完整写入硬盘等外部存储介质,每次在对报表数据访问前,从硬盘加载报表数据。
所述两种方法为应用系统提供了不同的报表缓存机制,但都存在缺点:第一种方法由于把报表数据写入内存,对于并发量大、报表数据量大的应用,会大量消耗应用服务器的内存,导致服务器效率降低,甚至出现内存溢出、系统宕机等现象;而第二种方法虽然避免了系统内存的大量消耗,但是每次访问硬盘读取整个报表内容的响应时间,远高于从内存读取的操作时间,同时硬盘文件的读写会占用大量的CPU时间,从而影响整个系统的性能。
发明内容
本发明所要解决的技术问题是提供一种数据缓存方法及系统,以解决现有的报表缓存方法在内存消耗和访问速度上相冲突的问题。
为解决上述技术问题,根据本发明提供的具体实施例,本发明公开了以下技术方案:
一种优选的数据缓存方法,包括:
将外部存储空间划分为索引区和数据区,将所述数据区再划分为块索引区和块数据区;
将数据分块;
根据数据分块结果,将每块数据依次写入所述外部存储空间的数据区,将每块数据的起始位置依次写入所述外部存储空间的索引区;写入每块数据时,将每行数据依次写入该数据块的块数据区,将每行的起始位置依次写入该数据块的块索引区;
根据数据分块结果、每块数据的起始位置及每行数据的起始位置,读取数据。
其中,按照以下步骤进行数据分块:预置最大块数和每块最小行数;如果数据的所有行数大于最大块数与每块最小行数的乘积,则每块行数等于每块最小行数乘以2;否则,每块行数等于每块最小行数,数据块数等于(所有行数+每块行数-1)÷每块行数。
其中,根据分块结果按照以下步骤写入数据:根据块数计算索引区大小,得到数据区起始位置;根据块中行数计算块索引区大小,得到块数据区起始位置;写入当前行,记录当前行位置,并得到下一行的起始位置;当写入一块数据后,将该块中每行的起始位置写入该块的块索引区;当写入所有数据块后,将每块的起始位置写入存储空间的索引区。
优选的,所述方法还包括:将每块数据包含的行数也写入块索引区。
其中,根据分块结果、每块数据的起始位置及每行数据的起始位置按照以下步骤读取数据:根据块数和每块行数,得到请求行所在块和在块中的序号;根据请求行所在块,查询存储空间的索引区,得到该块的起始位置;根据请求行在块中的序号,继续查询该块的块索引区,得到该请求行的起始位置;从该请求行的起始位置读取行数据。
优选的,所述方法还包括:缓存读取的一行数据,当请求读取该行中的单元格时,直接从缓存中读取。
其中,所述数据具有行列结构,对于按照行进行分块的数据,通过行列坐标变换,可置换成按照列进行分块的数据。
优选的,每次执行读或写数据时,都执行一次数据分块操作得到分块结果。
一种数据缓存系统,包括:
存储单元,用于将外部存储空间划分为索引区和数据区,其中数据区存储划分为块的数据,索引区存储每块数据的起始位置;将所述数据区再划分为块索引区和块数据区,其中每块数据的块数据区存储该块的所有行数据,块索引区存储该块中每行的起始位置;
数据分块单元,用于将数据分块;
写操作单元,用于根据数据分块结果,将每块数据依次写入所述外部存储空间的数据区,将每块数据的起始位置依次写入所述外部存储空间的索引区;
读操作单元,用于根据数据分块结果及每块数据的起始位置,读取数据。
其中,所述数据具有行列结构,所述数据分块单元按照行或者列进行分块。
优选的,所述每块数据的块索引区还存储该块数据包含的行数。
优选的,所述系统还包括:缓存单元,用于缓存读取的一行数据,当请求读取该行中的单元格时,直接从缓存单元中读取。
根据本发明提供的具体实施例,本发明公开了以下技术效果:
本发明实施例提供了一种数据缓存方法,针对具有行列结构的报表数据,将报表数据分块存储到文件中。以文件形式存储数据的硬盘空间被划分为索引区和数据区,其中数据区存储分块数据,索引区存储每块数据的起始位置,通过写操作将报表数据写入文件。这样,在读取报表数据时根据索引区就可以直接定位到所在的块,在块中快速查找到所需要的数据。
上述缓存技术在内存中只保存报表名称(在硬盘中通过文件名称区分不同文件),而将报表数据存放在硬盘等外部存储介质中,每次读取时根据报表名称从硬盘加载相应数据。本发明对于报表的访问,由于每次从硬盘读取数据,减少了内存的占用,在多并发、大数据量的情况下,可以大量节省内存空间的使用,提高系统的并发处理能力;同时,通过这种索引方式从硬盘读取报表文件,极大地提高了文件读取的效率。因此,本发明所述方法在内存空间和访问速度间取得了一个平衡。
优选的,文件的数据区又按照数据块划分为块索引区和块数据区,其中每块数据的块数据区存储该块的所有行数据,块索引区存储该块中每行的起始位置。这样,在读取报表数据时通过两层索引就可以快速定位,即先在文件索引区找到请求数据所在的块,然后在该块的块索引区找到请求数据的起始位置,进而读取所需数据。
优选的,在实际应用中,对应报表数据的访问,通常会一次访问同一行中的每一个格子,所以在内存中缓存了一行的信息。这样在得到访问一个格子的请求时,可以先检查是否为缓存行的某个格子,如果是则可以直接使用缓存行,而不需要从硬盘文件中读取了。
附图说明
图1是现有技术中的报表实例图;
图2是本发明实施例中报表数据写入文件前后的对比图;
图3是对图2改进后的数据存储示意图;
图4是本发明实施例中报表数据分块算法的流程图;
图5是本发明实施例中报表写入文件的流程图;
图6是本发明实施例中从文件中读取报表的流程图;
图7是本发明实施例所述报表缓存系统的结构框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
针对现有技术中的报表缓存方式不能同时在内存消耗和访问速度上达到要求的问题,本发明实施例提供了一种报表数据缓存方法,对要写入文件的报表数据分块,并且记录每块在文件中的位置,这样在读取报表数据时就可以直接定位到所在的块,在块中快速查找到所需要的数据。该方法主要针对报表等具有行列结构的数据(可参照图1所示实例),是依据可通过一个行列组成的矩阵表示的数据特性而设计的。因此,本发明除用于报表数据外,还可适用于其他具有行列结构的数据。
对于大数据量的报表,通常是纵向(行)或者横向(列)扩展,很少有两个方向都大量扩展的情况,所以报表数据的分块采用了按行(纵向扩展)或者列(横向扩展)来分割。最常见的是几千甚至几万行,每行十几列的情况,因此下面的说明都以纵向扩展、按行分块为例。对应横向扩展,通过横纵向坐标置换可以用相同办法实现,在此不再详述。
本发明实现的基础是对报表数据在文件系统(即硬盘等外部存储空间)中的存储方式进行了改进,即将文件系统划分为索引区和数据区两部分,其中数据区存放分块数据,索引区存放每块数据的起始位置。
参照图2,是报表数据写入文件前后的对比图。
图中,左侧的示意图表示报表数据在存入文件系统前根据行数被分成多块,右侧的示意图表示分块的报表数据在写入文件系统后的存储方式。在右侧的示意图中,报表数据以块为单位被写入文件,文件索引区依次存储第1块、第2块、...、第N块数据的起始位置,文件数据区依次存放第1块、第2块、...、第N块数据,根据索引区中的数据块起始位置可以在文件中找到任意一块数据。本实施例中,为便于文件的读写等操作,将文件顶端设置为索引区,然后才是数据区。
优选的,本实施例还提供了另一种文件存储方式,进一步将文件的数据区进行划分,将每块数据又分割为块索引区和块数据区,其中块数据区存储该块的所有行数据,块索引区存储该块中每行数据的起始位置。参照图3所示,是对图2改进后的数据存储示意图。图中,文件的顶端为索引区,文件的数据区中,每块数据的块索引区依次存储了第1行、第2行、...、第N行数据的起始位置,每块的块数据区依次存放了第1行、第2行、...、第N行数据,根据块索引区中的数据行起始位置可以在数据块中找到任意一行数据。这种两层索引方式,可以快速实现报表数据的读取,在查找某一行报表数据时,通过所述两层索引就可以快速定位,即先在文件索引区找到该行数据所在的块,然后在该块的块索引区找到这行数据的起始位置,进而找到该行读取数据。
基于以上数据存储方式,本发明实施例所述的数据缓存方法主要包括三部分内容,分别为报表数据分块、写数据和读数据,下面分别详细说明。
(一)报表数据分块
将数据进行分块处理有多种方法,因为根据实际应用的不同,可以制定不同的分块算法来得到符合应用需求的分块结果。因此,本发明并不限定采用哪种分块算法。
参照图4,是本发明实施例中报表数据分块算法的流程图。本实施例采用的分块算法如下:
步骤401,初始化最大块数和每块最小行数。这不仅是计算的需要,同时也保证了块的大小适中。因为太大的块,在块内查找行的效率很低;而如果块太小,会导致块数很多,也相应降低了对块的查找效率。
步骤402,判断以下不等式是否成立:
报表行数>最大块数×每块最小行数;
如果成立,则执行步骤403;否则,执行步骤404。
步骤403,如果上述不等式成立,表示报表的数据量很大,行数很多,步骤401中初始的每块行数太少,需要重新确定每块数据的行数。此时:
每块行数=每块最小行数×2;
块数=行数÷每块行数;
其中,参数“2”可根据实际应用进行调整。
步骤404,如果上述不等式不成立,表示报表的行数并没有超过初始化行数,需要重新确定块数。此时:
每块行数=每块最小行数;
块数=(行数+每块行数-1)÷每块行数。
举例说明,对于一个具有100行数据的报表:
1、通过分析报表行数范围,初始化最大块数=1000,每块行数=每块最小行数=32;
2、因为报表行数100<1000×32;
3、所以块数=(100+32-1)/32=4。
由上得到报表分块结果:块数为4,每块行数为(32,32,32,4)。
如果报表行数很多,例如1000000,则1000000>1000×32,每块行数就不是“每块最小行数”32了。
利用分块算法得到的分块结果,包括块数和每块行数,在文件的写操作和读操作过程中都会使用到。在把报表数据写入文件时,需要根据分块算法执行的结果来分割报表数据,建立索引;在从文件中读取报表数据时,同样需要根据分块算法结果获得报表块数,进而根据请求的单元格所在行来得到该行存储于哪一块,位于块中的第几行。因此,分块算法可以说是本发明的基础算法。
而且,在理论上,只需要在写数据时执行分块算法,读取时直接获得分块结果即可。但是实际应用中,分块算法结果也需要占用系统内存,而且分块算法本身比较高效,执行速度很快。所以,为尽量节省内存空间,本实施例在写入和读取数据时都执行一次分块算法,并能够保证两次分块结果相同。
(二)写数据
写数据的过程是将报表数据写入文件,写入文件后的效果如图2或图3所示。下面将以图3所示的两层索引为例进行说明。
参照图5,是本发明实施例中报表写入文件的流程图。
步骤501,利用分块算法执行的结果,根据块数计算文件索引区大小,即计算文件中保存块索引需要的空间,得到文件数据区的起始位置;
步骤502,判断所有的数据块是否已全部写入文件,如果否,执行步骤503;如果是,执行步骤508;
步骤503,获取待写入的数据块;
步骤504,根据块中行数计算块索引区大小,即计算文件数据区中保存行索引需要的空间,得到块数据区起始位置,将文件指针移到该位置;
步骤505,判断该块中所有的行是否已全部写入文件,如果否,执行步骤506;如果是,执行步骤507;
步骤506,写入当前行,记录当前行位置,并移动文件指针得到下一行的起始位置,返回步骤505继续执行写数据操作,直到块中所有的行都处理完;
步骤507,当块中所有行的数据都写入文件相应的块数据区后,将文件指针返回块顶端的块索引区起始位置(即块起始位置),根据步骤506写入过程中记录的行位置,将每行的起始位置依次写入块索引区内;当写入行索引信息后,返回步骤502继续处理其他数据块;
步骤508,当处理完所有的数据块后,将文件指针返回文件顶端的索引区起始位置,将每块的起始位置依次写入索引区。所述数据块的起始位置即为块索引区的起始位置。
综上所述,本实施例采用的写数据方式是:先根据块数和块中行数计算得到写入位置,然后写入当前行,同时记录每行的位置,最后再把写数据过程中记录的行索引信息写入块索引区;同样,完成所有数据块的写入后,才把块索引信息写入索引区。这种方式是本发明的优选处理,因为每行数据可能占用的空间大小不同,所以先将数据写入文件后再根据实际占用空间来写入索引信息,这样可以根据写入数据的大小分配合适的存储空间。当然,如果每行数据的大小固定或变化不大,也可以预先配置固定的存储空间来存放索引信息和报表数据,然后根据块数和行数计算写入位置,将块索引信息、行索引信息和每行数据依次写入文件。
优选的,在步骤507向块索引区中写入每行起始位置时,将该块的行数也一同写入作为索引信息(图2和图3所示图中未标出)。由于数据分块后,有时最后一块中的行数少于其他块中的行数,查询时通过块索引区中保存的行数信息,就可以知道该块有多少行数据。当然,如果需要也可以把块数写入文件的索引区。
举例说明,继续上例,报表数据有100行,分成4块,每块行数为(32,32,32,4):
1、共有4块,为了保存每块起始位置需要空间4×4(每个整数表示的位置用4个字节保存),这样文件的前16字节用来保存块索引信息,数据区起始位置也就是16(文件中字节表示从0开始),将文件指针移到16;
2、取得第一快(前132行,报表行数表示从1开始),起始位置16;
3、32行的起始位置需要32×4个字节空间保存,再增加一个保存行数的空间4,这样这一块的块数据区起始位置为:16+128+4=148;
4、从148开始,依次写入这32行数据到文件中,每次写入前读取文件指针位置;
5、移动文件指针到块的开始位置16,在块索引区中写入块中行数32,以及每行在文件中的起始位置(从步骤4中获得);
6、取得下一块数据,并重复步骤3-5,直到最后一块被处理;
7、移动文件指针到文件起始位置,在索引区写入每块起始位置(从步骤2中获得);如果写入“块信息4”,步骤1就需要预留(1+4)×4共20字节空间。
(三)读数据
读数据是从文件中读取指定行或指定单元格的报表数据,依据上述写数据的过程,读数据的步骤可参照图6,是本发明实施例中从文件中读取报表的流程图。
步骤601,利用分块算法执行的结果,根据块数和每块行数,得到请求行所在块和在块中的序号;其中,所述请求行即为要读取的指定数据,请求行在块中的序号即为在该块中的第几行;
步骤602,根据请求行所在块,查询文件的索引区,得到该块的起始位置;
步骤603,将文件指针移到请求行所在块的起始位置;
步骤604,根据请求行在块中的序号,继续查询该块的块索引区,得到该请求行的起始位置;
步骤605,将文件指针移到请求行的起始位置,并读取该行数据;
步骤606,从行中取得请求的单元格。
举例说明,假设请求取得第54行(报表行数表示从1开始)的某个单元格数据:
1、分块结果为:块数4,每块行数(32,32,32,4);
2、由步骤1中块数和每块行数,可以得到第54行在第二块的第22行;
3、第二块数据的起始位置保存在文件索引区中第(2-1)×4字节处,即第4到7字节;从文件索引区中读取这部分信息,得到第二块数据在文件中的位置;
4、移动文件指针到块起始位置;
5、因为需要的行是22,所以从块起始位置移动文件指针(1+(22-1))×4=88个字节,移动到块索引区中存放第22行起始位置的字节处;
6、从该位置读取第22行起始位置信息,并移动文件指针到块数据区中第22行的起始位置;
7、从该位置读取第22行数据;
8、再从得到的行中读取所需单元格。
优选的,在实际应用中,因为对应报表数据的访问,通常会一次访问同一行中的每一个格子,所以本实施例在读取一行数据后,在内存中缓存了一行的信息。这样在得到访问一个格子的请求时,可以先检查是否为缓存行的某个格子,如果是则可以直接使用缓存行,而不需要从文件中读取。
上述报表缓存技术,在内存中只保存报表名称(在硬盘中通过文件名称区分不同文件),而将报表数据存放在硬盘等外部存储介质中,每次读取时根据报表名称从硬盘加载相应数据。本发明对于报表的访问,由于每次从硬盘读取数据,减少了内存的占用,在多并发、大数据量的情况下,可以大量节省内存空间的使用,提高系统的并发处理能力;同时,通过这种索引方式从硬盘读取报表文件,极大地提高了文件读取的效率。因此,本发明所述方法在内存空间和访问速度间取得了一个平衡。其中,所述外部存储介质是指内存之外的大容量高性能存储介质,包括硬盘、闪存等以及未来可能出现的类似存储介质。
通过测试,在一台2GHz处理器、1G内存的PC机上,对于一张5000行×15列的报表,如果每个Html页面显示30行,则报表系统可以支持50个创建报表、50个报表翻页的并发请求,创建报表平均1.5分钟响应,翻页平均0.4分钟响应,并且系统CPU、内存使用都只在70%以下。
针对上述报表数据缓存方法,本发明还提供了一种报表数据缓存系统的实施例。参照图7,是实施例所述报表缓存系统的结构框图,所述系统主要包括存储单元701、数据分块单元702、写操作单元703和读操作单元704。
存储单元701用于存储报表数据,占用的是硬盘空间。存储单元701将存储空间划分为索引区和数据区,其中数据区存储划分为块的数据,索引区存储每块的起始位置,参照图2所示,根据索引区中每块的起始位置可以在数据区找到任意一块数据。
优选的,所述数据区又针对每块数据划分为块索引区和块数据区,其中块数据区存储该块的所有行数据,块索引区存储该块中每行数据的起始位置,参照图3所示,根据块索引区中的数据行起始位置可以在数据块中找到任意一行数据。
这种两层索引结构,可以快速实现报表数据的读取,在查找某一行报表数据时,通过所述两层索引就可以快速定位,即先在文件索引区找到该行数据所在的块,然后在该块的块索引区找到这行数据的起始位置,进而找到该行读取数据。
优选的,所述块索引区还保存了该块的行数信息,用于查询索引时使用。针对最后一块中的行数少于其他块的情况,查询时通过块索引区中保存的行数信息,就可以知道该块有多少行数据。当然,如果需要也可以在索引区中保存块数。
数据分块单元702用于根据分块算法将报表数据进行分块处理,将报表分割为若干块。由于报表是一种具有行列结构的数据,所以数据分块单元702可以按照行分块,也可以按照列分块。具体的分块算法可参照图4所示,在此不再详述。
写操作单元703用于向存储单元701中写入报表数据,得到图2或图3所示的存储效果。写操作单元703先根据块数和块中行数计算得到写入位置,然后写入当前行,同时记录每行的位置,最后再把写数据过程中记录的行索引信息写入块索引区;同样,完成所有数据块的写入后,才把块索引信息写入索引区。详细的写入过程可参照图5所示,在此不再详述。
读操作单元704用于从存储单元701中读取指定的报表数据,首先根据块数和每块行数得到请求行所在块和在块中的序号,然后根据块索引和行索引信息得到请求数据的起始位置,从该位置就可以读取需要的数据。详细的读取过程可参照图6所示,在此不再详述。
优选的,还设置了缓存单元705,占用的是内存空间,用于缓存读操作单元704读取的一行数据。由于对报表数据的访问,通常会一次访问同一行中的每一个格子,所以在内存缓存当前读取的数据,当请求读取该行中的某个单元格时,直接从缓存单元中读取,而不需要读取硬盘,从而提高了读取效率。
优选的,写操作单元703和读操作单元704都会用到分块结果,由于分块算法的执行结果也需要占用系统内存,而且分块算法本身比较高效,执行速度很快。所以,为尽量节省内存空间,写操作单元703和读操作单元704在执行之前,都调用数据分块单元702执行一次分块算法,并能够保证两次分块结果相同。
上述报表缓存系统,将报表数据存于硬盘中,只在内存存放文件名称,当需要访问某个报表的某行数据时,根据文件名称定位到硬盘中的文件位置,然后根据两层索引找到需要的数据。由于每次从硬盘读取数据,减少了内存的占用,提高系统的并发处理能力;同时,所述索引存储结构极大地提高了硬盘文件读取的效率。因此,所述系统能够在快速访问报表数据的同时减少内存空间的占用。
图7所示系统中未详述的部分可以参见图2一图6所示方法的相关部分,为了篇幅考虑,在此不再详述。而且,全文说明是以行为例进行的说明,针对具有行列结构的数据,对列的说明也同样适用于本发明。
以上对本发明所提供的一种数据缓存方法及系统,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。
Claims (12)
1、一种数据缓存方法,其特征在于,包括:
将外部存储空间划分为索引区和数据区,将所述数据区再划分为块索引区和块数据区;
将数据分块;
根据数据分块结果,将每块数据依次写入所述外部存储空间的数据区,将每块数据的起始位置依次写入所述外部存储空间的索引区;写入每块数据时,将每行数据依次写入该数据块的块数据区,将每行的起始位置依次写入该数据块的块索引区;
根据数据分块结果、每块数据的起始位置及每行数据的起始位置,读取数据。
2、根据权利要求1所述的方法,其特征在于,按照以下步骤进行数据分块:
预置最大块数和每块最小行数;
如果数据的所有行数大于最大块数与每块最小行数的乘积,则每块行数等于每块最小行数乘以2;
否则,每块行数等于每块最小行数,数据块数等于
(所有行数+每块行数-1)÷每块行数。
3、根据权利要求1所述的方法,其特征在于,根据分块结果按照以下步骤写入数据:
根据块数计算索引区大小,得到数据区起始位置;
根据块中行数计算块索引区大小,得到块数据区起始位置;
写入当前行,记录当前行位置,并得到下一行的起始位置;
当写入一块数据后,将该块中每行的起始位置写入该块的块索引区;
当写入所有数据块后,将每块的起始位置写入存储空间的索引区。
4、根据权利要求3所述的方法,其特征在于,还包括:将每块数据包含的行数也写入块索引区。
5、根据权利要求1所述的方法,其特征在于,根据分块结果、每块数据的起始位置及每行数据的起始位置按照以下步骤读取数据:
根据块数和每块行数,得到请求行所在块和在块中的序号;
根据请求行所在块,查询存储空间的索引区,得到该块的起始位置;
根据请求行在块中的序号,继续查询该块的块索引区,得到该请求行的起始位置;
从该请求行的起始位置读取行数据。
6、根据权利要求5所述的方法,其特征在于,还包括:缓存读取的一行数据,当请求读取该行中的单元格时,直接从缓存中读取。
7、根据权利要求2、3、4或5所述的方法,其特征在于:所述数据具有行列结构,对于按照行进行分块的数据,通过行列坐标变换,可置换成按照列进行分块的数据。
8、根据权利要求1所述的方法,其特征在于:每次执行读或写数据时,都执行一次数据分块操作得到分块结果。
9、一种数据缓存系统,其特征在于,包括:
存储单元,用于将外部存储空间划分为索引区和数据区,其中数据区存储划分为块的数据,索引区存储每块数据的起始位置;将所述数据区再划分为块索引区和块数据区,其中每块数据的块数据区存储该块的所有行数据,块索引区存储该块中每行的起始位置;
数据分块单元,用于将数据分块;
写操作单元,用于根据数据分块结果,将每块数据依次写入所述外部存储空间的数据区,将每块数据的起始位置依次写入所述外部存储空间的索引区;
读操作单元,用于根据数据分块结果及每块数据的起始位置,读取数据。
10、根据权利要求9所述的系统,其特征在于:所述数据具有行列结构,所述数据分块单元按照行或者列进行分块。
11、根据权利要求9所述的系统,其特征在于:所述每块数据的块索引区还存储该块数据包含的行数。
12、根据权利要求10所述的系统,其特征在于,还包括:缓存单元,用于缓存读取的一行数据,当请求读取该行中的单元格时,直接从缓存单元中读取。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB200710195981XA CN100541454C (zh) | 2007-12-14 | 2007-12-14 | 一种数据缓存方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB200710195981XA CN100541454C (zh) | 2007-12-14 | 2007-12-14 | 一种数据缓存方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101178693A CN101178693A (zh) | 2008-05-14 |
CN100541454C true CN100541454C (zh) | 2009-09-16 |
Family
ID=39404951
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB200710195981XA Expired - Fee Related CN100541454C (zh) | 2007-12-14 | 2007-12-14 | 一种数据缓存方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100541454C (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102722555A (zh) * | 2012-05-28 | 2012-10-10 | 北京网尚数字电影院线有限公司 | 一种多媒体文件的缓存方法及系统 |
Families Citing this family (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102385606B (zh) * | 2010-09-03 | 2016-08-03 | 腾讯科技(深圳)有限公司 | 一种分布式数据仓库的访问方法和装置 |
CN102456024A (zh) * | 2010-10-26 | 2012-05-16 | 深圳市金蝶友商电子商务服务有限公司 | 异步处理大数据量新增的方法及装置 |
CN102467523A (zh) * | 2010-11-03 | 2012-05-23 | 英业达股份有限公司 | 索引文件的建立方法与利用索引文件查询数据区块的方法 |
CN102694828B (zh) * | 2011-03-23 | 2016-03-30 | 中兴通讯股份有限公司 | 一种分布式缓存系统数据存取的方法及装置 |
CN102722484B (zh) * | 2011-03-29 | 2017-12-29 | 新奥特(北京)视频技术有限公司 | 一种文件缓冲方法、装置及其应用 |
CN102739693A (zh) * | 2011-03-31 | 2012-10-17 | 新奥特(北京)视频技术有限公司 | 一种应用于体育赛事信息系统中的报表分发方法和装置 |
CN102880615B (zh) * | 2011-07-15 | 2018-04-27 | 腾讯科技(深圳)有限公司 | 一种数据存储方法和装置 |
CN102323908A (zh) * | 2011-08-03 | 2012-01-18 | 浪潮(北京)电子信息产业有限公司 | 一种磁盘大容量数据同步过程中的数据缓存方法及系统 |
CN102542041A (zh) * | 2011-12-27 | 2012-07-04 | 北京地拓科技发展有限公司 | 栅格数据处理方法及系统 |
CN103577339B (zh) | 2012-07-27 | 2018-01-30 | 深圳市腾讯计算机系统有限公司 | 一种数据存储方法及系统 |
CN102833769A (zh) * | 2012-09-20 | 2012-12-19 | 苏州坤里达信息科技有限公司 | 一种无线通信网络系统中的干扰矩阵高效管理方法 |
CN102968456B (zh) * | 2012-10-30 | 2016-08-24 | 北京地拓科技发展有限公司 | 一种栅格数据读取处理方法和装置 |
CN103092775B (zh) * | 2013-01-31 | 2015-06-10 | 武汉大学 | 一种基于键值结构的空间数据双缓存方法及机制 |
CN103269383A (zh) * | 2013-06-14 | 2013-08-28 | 苏州海葵电子科技有限公司 | 一种列车网络通信实现方法 |
CN103500224B (zh) * | 2013-10-18 | 2016-03-16 | 税友软件集团股份有限公司 | 一种数据写入方法及装置、数据读取方法及装置 |
CN103560976B (zh) * | 2013-11-20 | 2018-12-07 | 迈普通信技术股份有限公司 | 一种控制数据发送的方法、装置及系统 |
CN103631726B (zh) * | 2013-11-28 | 2017-01-25 | 北京锐安科技有限公司 | 一种串接流式计算节点的文件处理方法及装置 |
CN103942289B (zh) * | 2014-04-12 | 2017-01-25 | 广西师范大学 | 一种Hadoop上面向范围查询的内存缓存方法 |
CN104484332A (zh) * | 2014-11-11 | 2015-04-01 | 珠海天琴信息科技有限公司 | 一种嵌入式系统中读写数据的方法及装置 |
CN104699815A (zh) * | 2015-03-24 | 2015-06-10 | 北京嘀嘀无限科技发展有限公司 | 数据处理方法和系统 |
CN105912274A (zh) * | 2016-04-21 | 2016-08-31 | 乐视控股(北京)有限公司 | 流式数据定位方法及装置 |
CN106326499B (zh) * | 2016-10-14 | 2019-10-18 | 广州市千钧网络科技有限公司 | 一种数据处理方法及装置 |
CN106502924B (zh) * | 2016-10-27 | 2020-02-07 | 深圳创维数字技术有限公司 | 一种内存优化方法及系统 |
CN107197116A (zh) * | 2017-05-25 | 2017-09-22 | 天津大学 | 一种基于udp协议实时可靠图像传输方案 |
CN107506308A (zh) * | 2017-06-30 | 2017-12-22 | 杭州旗捷科技有限公司 | 一种芯片改写设备的数据存储方法、电子设备及存储介质 |
CN107562705B (zh) * | 2017-07-25 | 2021-09-14 | 努比亚技术有限公司 | 一种数据导出方法、服务端及计算机可读存储介质 |
CN109669622B (zh) * | 2017-10-13 | 2022-04-05 | 杭州海康威视系统技术有限公司 | 一种文件管理方法、文件管理装置、电子设备及存储介质 |
CN109669623B (zh) * | 2017-10-13 | 2021-09-03 | 杭州海康威视系统技术有限公司 | 一种文件管理方法、文件管理装置、电子设备及存储介质 |
CN108153874B (zh) * | 2017-12-26 | 2022-07-29 | 福建星瑞格软件有限公司 | 一种大数据高耗时查询结果集的快速分页方法 |
CN110874283B (zh) * | 2018-08-31 | 2021-07-20 | 杭州海康威视系统技术有限公司 | 一种基于纠删码的数据存储方法、装置及电子设备 |
CN111143284B (zh) * | 2018-11-02 | 2023-06-20 | 浙江宇视科技有限公司 | 文件系统动态索引方法及装置 |
CN111400427A (zh) * | 2019-01-02 | 2020-07-10 | 阿里巴巴集团控股有限公司 | 数据存储、查询方法、装置和计算设备 |
CN110311954B (zh) * | 2019-05-31 | 2022-02-15 | 上海赫千电子科技有限公司 | 车用传感器的数据读取系统及其读取方法 |
CN111221470A (zh) * | 2019-10-12 | 2020-06-02 | 平安科技(深圳)有限公司 | 数据处理方法、电子装置及存储介质 |
CN111552899B (zh) * | 2020-03-20 | 2023-06-23 | 广联达科技股份有限公司 | 提升前端报表显示性能的方法及系统 |
CN112860595B (zh) * | 2021-03-12 | 2022-10-14 | 湖南国科微电子股份有限公司 | Pci设备或pcie设备、数据存取方法及相关组件 |
-
2007
- 2007-12-14 CN CNB200710195981XA patent/CN100541454C/zh not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102722555A (zh) * | 2012-05-28 | 2012-10-10 | 北京网尚数字电影院线有限公司 | 一种多媒体文件的缓存方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN101178693A (zh) | 2008-05-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100541454C (zh) | 一种数据缓存方法及系统 | |
JP6815378B2 (ja) | 分散型ストレージシステム | |
EP2266048B1 (en) | Web-based multi-user collaboration for editing a document | |
CN102222085B (zh) | 一种基于相似性与局部性结合的重复数据删除方法 | |
CN107423422B (zh) | 基于网格的空间数据分布式存储及检索方法和系统 | |
CN103116661B (zh) | 一种数据库的数据处理方法 | |
CN100383792C (zh) | 缓存数据库数据组织方法 | |
CN106775476A (zh) | 混合内存系统及其管理方法 | |
CN103530387A (zh) | 一种hdfs针对小文件的改进方法 | |
CN101373445B (zh) | 一种内存调度方法及装置 | |
CN103597482A (zh) | 在存储节点上存储数据 | |
CN102591947A (zh) | 用于数据去重复的快速且低ram占用的索引 | |
CN102521419A (zh) | 分级存储的实现方法和系统 | |
CN1290890A (zh) | 利用高速缓存器管理raid存储系统的方法和系统 | |
CN103246616A (zh) | 一种长短周期访问频度的全局共享缓存替换方法 | |
CN113626431A (zh) | 一种基于lsm树的延迟垃圾回收的键值分离存储方法及系统 | |
CN108733306A (zh) | 一种文件合并方法及装置 | |
CN105138282A (zh) | 一种存储空间回收的方法及存储系统 | |
CN104111898A (zh) | 基于多维数据相似性的混合存储系统及数据管理方法 | |
CN111159176A (zh) | 一种海量流数据的存储和读取的方法和系统 | |
JP2005234834A (ja) | 論理ボリュームの再配置方法 | |
US11379326B2 (en) | Data access method, apparatus and computer program product | |
CN113704217A (zh) | 一种分布式持久性内存文件系统中元数据及数据组织架构方法 | |
CN108304259A (zh) | 内存管理方法及系统 | |
Carniel et al. | A generic and efficient framework for flash-aware spatial indexing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090916 |
|
CF01 | Termination of patent right due to non-payment of annual fee |