CN101567002B - 一种实时数据存储的方法和系统 - Google Patents
一种实时数据存储的方法和系统 Download PDFInfo
- Publication number
- CN101567002B CN101567002B CN2009100855206A CN200910085520A CN101567002B CN 101567002 B CN101567002 B CN 101567002B CN 2009100855206 A CN2009100855206 A CN 2009100855206A CN 200910085520 A CN200910085520 A CN 200910085520A CN 101567002 B CN101567002 B CN 101567002B
- Authority
- CN
- China
- Prior art keywords
- memory
- mapping file
- configuration information
- data
- memory mapping
- 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
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种实时数据存储的方法,包括:读取预设的配置信息,并根据读取的配置信息确定内存映射块的数量;根据所确定的内存映射块的数量对内存映射文件进行分块;以内存映射块为单位执行数据的实时存取操作。本发明还公开了一种实时数据存储的系统,采用内存映射文件分块存取的方式使系统可以并行处理多个数据请求,从而提升系统性能;由于分块的数量可以根据实际需要进行配置,使得方案的伸缩性较好。
Description
技术领域
本发明涉及数据的实时存储技术,尤其涉及一种实时数据存储的方法和系统。
背景技术
随着信息产业与金融业的相互融合,金融行业的信息化水平和服务水平得到了长足的发展。目前,金融行业的数据量、数据种类和数据复杂度都达到了一定的规模和程度。随着金融行业的业务创新,诸如即时行情、手机钱包等一系列业务被开发出来,而这些业务都离不开实时数据的存储。
目前的实时数据存储方案大多采用内存映射文件技术,具体为:将数据先存入内存映射文件中,每个产品(存储时的基本单位)在内存映射文件中都有各自的空间,当某个空间被数据占用到一定大小时就将该空间内的数据存入磁盘文件中,从而将数据最终保留下来。由于数据先存入内存映射文件中,而内存中的数据存取速度很快,因此系统性能会有所提高。
然而,现有方案在数据存取时都是单一执行的,即同一时间内只能响应一个请求来操作一个内存映射文件,但是通常一个内存映射文件中有很多产品存在,也就是说同一时间内只能响应一个请求来执行对内存文件内某个产品的处理;如果还有其他请求需要操作该内存映射文件的其他产品,那么只能等待前一个请求处理完后再执行下一个请求的处理。
由此可以看出,这种在数据存取时的单一执行方式在对请求进行处理时存在较大延时,使得数据操作的效率、即系统性能不高;并且,现有方案对硬件的依赖性较强,当硬件性能发生变化时,无法动态的调整方案,使得方案的伸缩性不好。
发明内容
有鉴于此,本发明的主要目的在于提供一种实时数据存储的方法和系统,以解决现有的实时数据存储存在较大延时、系统性能不高、方案伸缩性不好的问题。
为达到上述目的,本发明的技术方案是这样实现的:
本发明提供了一种实时数据存储的方法,该方法包括:
读取预设的配置信息,并根据读取的配置信息确定内存映射块的数量;
根据所确定的内存映射块的数量对内存映射文件进行分块;
以内存映射块为单位执行数据的实时存取操作;
其中,所述根据读取的配置信息确定内存映射块的数量,具体为:
根据所述配置信息中的产品类别生成内存映射文件名,并将生成的内存映射文件名与已有的内存映射文件名进行匹配;
如果匹配成功,则判断对应的内存映射文件已存在,并根据读取的配置信息确定所述内存映射文件中的内存映射块的数量;
如果匹配失败,则判断对应的内存映射文件不存在,并根据生成的内存映射文件名新创建一个内存映射文件,根据读取的配置信息确定新创建的内存映射文件中的内存映射块的数量。
所述配置信息包括:产品类别、每个内存映射块的产品数量和产品的数据存储上限。
所述根据读取的配置信息确定内存映射块的数量,具体为:将所述内存映射文件中的产品数量除以每个内存映射块的产品数量,得到的运算结果即为所述内存映射块的数量。
该方法进一步包括:当所述运算结果存在余数时,将所述运算结果的整数部分加一后作为所述内存映射块的数量。
所述以内存映射块为单位执行数据的实时存取操作,具体为:
各内存映射块分别响应不同的数据请求,并分别执行数据的实时存取,当所述内存映射块中的产品的数据记录达到产品的数据存储上限时,将所述产品的数据记录写入磁盘文件中;当所述内存映射块中有对应所述产品的新的数据记录时,按照循环覆盖式的策略对所述新的数据记录进行存储。
本发明还提供了一种实时数据存储的系统,包括:
信息读取模块,用于读取预设的配置信息;
分块模块,用于根据读取的配置信息确定内存映射块的数量,并根据所确定的内存映射块的数量对内存映射文件进行分块;其中,所述根据读取的配置信息确定内存映射块的数量,具体为:根据所述配置信息中的产品类别生成内存映射文件名,并将生成的内存映射文件名与已有的内存映射文件名进行匹配;如果匹配成功,则判断对应的内存映射文件已存在,并根据读取的配置信息确定所述内存映射文件中的内存映射块的数量;如果匹配失败,则判断对应的内存映射文件不存在,并根据生成的内存映射文件名新创建一个内存映射文件,根据读取的配置信息确定新创建的内存映射文件中的内存映射块的数量;
数据存取模块,用于以内存映射块为单位执行数据的实时存取操作。
所述配置信息包括:产品类别、每个内存映射块的产品数量和产品的数据存储上限。
本发明所提供的一种实时数据存储的方法和系统,采用内存映射文件分块存取的方式使系统可以并行处理多个数据请求,从而减少了处理数据请求的延时;由于各内存映射块对数据请求的处理操作不会产生相互影响,因此提高了数据操作的效率,并提升了系统性能;由于分块的数量可以根据实际需要进行配置,从而使得方案的伸缩性较好。
附图说明
图1为本发明一种实时数据存储的方法流程图;
图2为本发明实施例中的内存映射文件分块的示意图;
图3为本发明一种实时数据存储的系统的组成结构示意图。
具体实施方式
下面结合附图和具体实施例对本发明的技术方案进一步详细阐述。
本发明提供一种实时数据存储的方法和系统,由该系统根据预设的配置信息确定内存映射文件中内存映射块的数量,再根据所确定的内存映射块的数量对内存映射文件进行分块,进而以内存映射块为单位执行数据的实时存取操作,实现系统并行处理多个数据请求。具体的操作流程如图1所示,主要包括以下步骤:
步骤101,系统启动时从数据库中读取配置信息。
该配置信息是由用户根据实际需要预先设置好并存放在数据库中的,当系统启动时将数据库中存放的配置信息读入内存。本发明的配置信息中包括:产品类别、每个内存映射块的产品数量和产品的数据存储上限等信息,且配置信息所包含的内容可以根据实际需要进行扩展。
步骤102,根据配置信息中的产品类别生成内存映射文件名。
本发明中对所有产品进行分类,从而每个产品都有自己所属的类别,而不同的类别存储的数据格式是不一样的。系统根据配置信息中的产品类别生成对应的内存映射文件名,用于存储对应该类别的产品的数据。
步骤103,根据内存映射文件名判断内存映射文件是否存在,如果存在,则执行步骤105;否则,执行步骤104。
将生成的内存映射文件名与已有的内存映射文件名进行匹配,如果匹配成功,则判断对应的内存映射文件存在,执行步骤105;否则判断对应的内存映射文件不存在,执行步骤104。
内存映射文件(Memory Mapped Files)实质上是一个文件贮存在系统内存中,该文件可以被任何程序所访问,所以它具有可在各个程序间共享的特性。同时,由于所有的数据存取操作都在内存中进行,因此它具备处理快速的特点。本发明中将产品作为存储的基本单位,且一个内存映射文件中包含至少一个产品。
步骤104,根据生成的内存映射文件名新创建一个内存映射文件,操作完成后,转到步骤105。
当判断生成的内存映射文件名所对应的内存映射文件不存在时,表明生成的内存映射文件名为新的文件名,从而需要在内存中新创建一个与之对应的内存映射文件。
步骤105,根据配置信息中的每个内存映射块的产品数量,确定内存映射文件中内存映射块的数量,并按照该数量对内存映射文件进行分块。
所谓分块如图2所示,是对内存映射文件进行分块,每个内存映射文件根据配置信息的不同可以被分成一个或多个内存映射块。分块的操作遵循以下原则:
内存映射文件中的产品数量/每个内存映射块的产品数量=分块数量;
其中,内存映射文件中的产品数量是动态的变化的;每个内存映射块的产品数量是在配置信息中设置的,当配置信息未更改时,每个内存映射块的产品数量是固定不变的,从而随着内存映射文件中的产品数量的增加,分块数量也会相应增加。
在实际应用中,也可以配置信息的更改来灵活调节分块数量,如果需要获得较多的分块数量,则只需在配置信息中设置每个内存映射块的产品数量较小即可,即只需通过简单的配置信息的更改,可方便实现方案的调整,使得方案具有较好的伸缩性。
另外,如果“内存映射文件中的产品数量/每个内存块的产品数量”的结果有余数出现,那么分块数量在该结果取整数的基础上加一。
步骤106,以内存映射块为单位执行数据的实时存取操作。
在对内存映射文件进行分块划分后,所得各内存映射块可以分别响应不同的数据请求,并分别执行数据的实时存取;在执行数据存储的过程中,当内存映射块中的某个产品的数据记录达到配置信息中预设的产品的数据存储上限时,将该产品的数据记录写入磁盘文件中;当内存映射块中有对应该产品的新的数据记录时,按照循环覆盖式的策略,由新存入的数据记录覆盖掉最旧的数据记录,以保证能够存入新的数据记录。
需要指出的是,将产品的数据记录写入磁盘文件的操作不会影响内存映射块对数据的实时存取操作。但是,当产品的数据记录使得为该产品分配的存储空间满时,系统需要强制将该产品的数据记录写入磁盘文件中,以保证新数据在内存映射文件中的正常存入。
此外,由于内存映射文件中存在很多产品,每个产品的数据记录存储都是采用循环覆盖的策略,那么为了能正确得到所需的数据,本发明为每个产品引入头的概念,即产品的头中存放当前产品记录在内存映射文件中的状态。对于每个内存映射块,其头的结构如下表所示:
First | Last | savedEnd | 保留区 | 验证码 | 记录1 | 记录2 | … | 记录n |
First | Last | savedEnd | 保留区 | XXX | 记录1 | 记录2 | … | 记录n |
First | Last | savedEnd | 保留区 | XXX | 记录1 | 记录2 | … | 记录n |
First | Last | savedEnd | 保留区 | XXX | 记录1 | 记录2 | … | 记录n |
First | Last | savedEnd | 保留区 | XXX | 记录1 | 记录2 | … | 记录n |
表1
其中,表1中的每一行分别对应一个产品,First表示对应该产品的最旧一条数据记录在内存映射块中的位置,有数据时以0为基数,First的取值范围为从-1到MAX-1的整数。例如:First取值为-1时,表示没有对应该产品的数据记录写入内存映射块;First取值为0时,表示内存映射块中的最旧一条数据位于记录1的位置;First取值为MAX-1时,表示内存映射块中的最旧一条数据位于记录n的位置。
Last表示最新一条数据在内存映射块中的位置,取值范围与First相同,不再赘述。
savedEnd的状态值表示当前产品对应的存储空间中已经写入到文件中的最后一条记录的位置。
验证码是用于验证数据准确性所使用的状态码,验证码的计算规则为:First+Last+savedEnd=验证码。
当某个产品的数据记录达到配置信息中预设的产品的数据存储上限时,按照循环覆盖式的策略,并根据First所指示的对应该产品的最旧一条数据记录在内存映射块中的位置,利用新存入的数据将最旧的数据记录覆盖掉。
较佳的,存入磁盘文件中的数据也可以与内存映射文件类似的循环覆盖的策略,相应的,磁盘文件也可引入头的概念,即磁盘文件的头中存放当前产品记录在磁盘文件中的状态。对于每个磁盘文件,其头的结构如下表所示:
First | Last | 保留区 | 验证码 | 记录1 | 记录2 | … | 记录N |
First | Last | 保留区 | XXX | 记录1 | 记录2 | … | 记录N |
First | Last | 保留区 | XXX | 记录1 | 记录2 | … | 记录N |
First | Last | 保留区 | XXX | 记录1 | 记录2 | … | 记录N |
First | Last | 保留区 | XXX | 记录1 | 记录2 | … | 记录N |
表2
其中,First和Last的作用和取值范围与表1中相同,此处不再赘述。此处的savedEnd取值始终为-1,其目的是为了与内存映射块的头保持一致。
为实现上述实时数据存储的方法,本发明还提供了一种实时数据存储的系统,如图3所示,该系统包括:信息读取模块10、分块模块20和数据存取模块30。信息读取模块10,用于读取数据库中预设的配置信息。分块模块20连接信息读取模块10,用于根据读取的配置信息确定内存映射块的数量,并根据所确定的内存映射块的数量对内存映射文件进行分块。数据存取模块30连接分块模块20,用于以内存映射块为单位执行数据的实时存取操作,具体为:控制各内存映射块分别响应不同的数据请求,并分别执行数据的实时存取,当内存映射块中的产品的数据记录达到产品的数据存储上限时,将该产品的数据记录写入磁盘文件中;当内存映射块中有对应该产品的新的数据记录时,按照循环覆盖式的策略对该新的数据记录进行存储。
作为本发明的一种较佳实施例,分块模块20进一步用于,根据配置信息生成内存映射文件名,并将生成的内存映射文件名与已有的内存映射文件名进行匹配;在匹配成功时,根据读取的配置信息确定内存映射文件中的内存映射块的数量;在匹配失败时,根据生成的内存映射文件名新创建一个内存映射文件,并根据读取的配置信息确定新创建的内存映射文件中的内存映射块的数量。
需要说明的是,本发明的实时数据存储的方法和系统能够适用于金融领域中的股票行情数据的存储,各个产品即为各只不同的股票,各股票可以按照行业板块的不同进行分类;采用本发明的实时数据存储的方法和系统,能够减少数据处理的时延,提高数据操作效率和系统性能,且方案的伸缩性较好。当然,本发明的实时数据存储的方法和系统并不仅限于在金融领域中的应用,对于其他领域的数据存储也是适用的。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (7)
1.一种实时数据存储的方法,其特征在于,该方法包括:
读取预设的配置信息,并根据读取的配置信息确定内存映射块的数量;
根据所确定的内存映射块的数量对内存映射文件进行分块;
以内存映射块为单位执行数据的实时存取操作;
其中,所述根据读取的配置信息确定内存映射块的数量,具体为:
根据所述配置信息中的产品类别生成内存映射文件名,并将生成的内存映射文件名与已有的内存映射文件名进行匹配;
如果匹配成功,则判断对应的内存映射文件已存在,并根据读取的配置信息确定所述内存映射文件中的内存映射块的数量;
如果匹配失败,则判断对应的内存映射文件不存在,并根据生成的内存映射文件名新创建一个内存映射文件,根据读取的配置信息确定新创建的内存映射文件中的内存映射块的数量。
2.根据权利要求1所述实时数据存储的方法,其特征在于,所述配置信息包括:产品类别、每个内存映射块的产品数量和产品的数据存储上限。
3.根据权利要求2所述实时数据存储的方法,其特征在于,所述根据读取的配置信息确定内存映射块的数量,具体为:将所述内存映射文件中的产品数量除以每个内存映射块的产品数量,得到的运算结果即为所述内存映射块的数量。
4.根据权利要求3所述实时数据存储的方法,其特征在于,该方法进一步包括:当所述运算结果存在余数时,将所述运算结果的整数部分加一后作为所述内存映射块的数量。
5.根据权利要求3或4所述实时数据存储的方法,其特征在于,所述以内存映射块为单位执行数据的实时存取操作,具体为:
各内存映射块分别响应不同的数据请求,并分别执行数据的实时存取,当所述内存映射块中的产品的数据记录达到产品的数据存储上限时,将所述产品的数据记录写入磁盘文件中;当所述内存映射块中有对应所述产品的新的数据记录时,按照循环覆盖式的策略对所述新的数据记录进行存储。
6.一种实时数据存储的系统,其特征在于,包括:
信息读取模块,用于读取预设的配置信息;
分块模块,用于根据读取的配置信息确定内存映射块的数量,并根据所确定的内存映射块的数量对内存映射文件进行分块;其中,所述根据读取的配置信息确定内存映射块的数量,具体为:根据所述配置信息中的产品类别生成内存映射文件名,并将生成的内存映射文件名与已有的内存映射文件名进行匹配;如果匹配成功,则判断对应的内存映射文件已存在,并根据读取的配置信息确定所述内存映射文件中的内存映射块的数量;如果匹配失败,则判断对应的内存映射文件不存在,并根据生成的内存映射文件名新创建一个内存映射文件,根据读取的配置信息确定新创建的内存映射文件中的内存映射块的数量;
数据存取模块,用于以内存映射块为单位执行数据的实时存取操作。
7.根据权利要求6所述实时数据存储的系统,其特征在于,所述配置信息包括:产品类别、每个内存映射块的产品数量和产品的数据存储上限。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100855206A CN101567002B (zh) | 2009-05-25 | 2009-05-25 | 一种实时数据存储的方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100855206A CN101567002B (zh) | 2009-05-25 | 2009-05-25 | 一种实时数据存储的方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101567002A CN101567002A (zh) | 2009-10-28 |
CN101567002B true CN101567002B (zh) | 2011-08-17 |
Family
ID=41283155
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009100855206A Expired - Fee Related CN101567002B (zh) | 2009-05-25 | 2009-05-25 | 一种实时数据存储的方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101567002B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101876922B (zh) * | 2009-10-30 | 2012-12-19 | 北京锐安科技有限公司 | 一种增强系统稳定性的方法 |
CN102591792B (zh) * | 2012-01-13 | 2015-04-29 | 从兴技术有限公司 | 一种内存数据的存储方法 |
CN103294710B (zh) * | 2012-02-28 | 2016-08-31 | 北京新媒传信科技有限公司 | 一种数据存取方法和装置 |
CN102868552B (zh) * | 2012-08-21 | 2015-11-18 | 广东电网公司电力科学研究院 | 数据发送方法 |
CN103473374B (zh) * | 2013-09-29 | 2017-01-11 | 北大医疗信息技术有限公司 | 患者数据分块系统和方法 |
CN105426420B (zh) * | 2015-11-03 | 2020-03-31 | 北京京东尚科信息技术有限公司 | 快速更新对象在数据库中状态的系统 |
CN107436947B (zh) * | 2017-08-03 | 2019-12-20 | 武汉烽火普天信息技术有限公司 | 一种大数据储存及并行处理方法 |
CN109960596B (zh) * | 2017-12-26 | 2021-04-02 | 中国移动通信集团公司 | 一种防止机器人抢单的方法及装置 |
-
2009
- 2009-05-25 CN CN2009100855206A patent/CN101567002B/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN101567002A (zh) | 2009-10-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101567002B (zh) | 一种实时数据存储的方法和系统 | |
CN103077183B (zh) | 一种分布式顺序表的数据导入方法及其系统 | |
US7689574B2 (en) | Index and method for extending and querying index | |
KR101180763B1 (ko) | 멀티프로세서 시스템, 멀티프로세서 시스템용 관리 장치 및 멀티프로세서 시스템용 관리 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체 | |
CN101510145B (zh) | 一种存储系统管理方法和装置 | |
CN105830059A (zh) | 文件访问方法、装置及存储设备 | |
CN106471501B (zh) | 数据查询的方法、数据对象的存储方法和数据系统 | |
CN102650931A (zh) | 一种写入数据的方法及系统 | |
CN104281717B (zh) | 一种建立海量id映射关系的方法 | |
CN103019884A (zh) | 基于虚拟机快照的内存页去重方法及装置 | |
CN111241353B (zh) | 一种图数据的分区方法、装置以及设备 | |
CN105320702A (zh) | 一种用户行为数据的分析方法、装置及智能电视 | |
CN110858210B (zh) | 数据查询方法及装置 | |
CN103559247B (zh) | 一种数据业务处理方法及装置 | |
CN106095332A (zh) | 一种数据重删方法及装置 | |
CN104765754A (zh) | 数据存储方法及装置 | |
CN112328700A (zh) | 一种分布式数据库 | |
CN103124970B (zh) | 对多个要素进行分组的方法、程序以及装置 | |
CN101441596A (zh) | 提高闪存介质读写速度的方法 | |
CN109460406A (zh) | 一种数据处理方法及装置 | |
CN102609364A (zh) | 缓存交换方法 | |
CN101122906A (zh) | 一种文档存储方法及系统 | |
CN104156316A (zh) | 一种Hadoop集群批处理作业的方法及系统 | |
CN114338506B (zh) | 一种类脑计算机操作系统的神经任务片内路由方法及装置 | |
CN102023812B (zh) | 一种raid级别变换方法和变换装置 |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20110817 Termination date: 20160525 |