一种实时数据存储的方法和系统的制作方法

文档序号:6618926阅读:207来源:国知局

专利名称::一种实时数据存储的方法和系统的制作方法
技术领域
:本发明涉及数据的实时存储技术,尤其涉及一种实时数据存储的方法和系统。
背景技术
:随着信息产业与金融业的相互融合,金融行业的信息化水平和服务水平得到了长足的发展。目前,金融行业的数据量、数据种类和数据复杂度都达到了一定的规模和程度。随着金融行业的业务创新,诸如即时行情、手机钱包等一系列业务被开发出来,而这些业务都离不开实时数据的存储。目前的实时数据存储方案大多采用内存映射文件技术,具体为将数据先存入内存映射文件中,每个产品(存储时的基本单位)在内存映射文件中都有各自的空间,当某个空间被数据占用到一定大小时就将该空间内的数据存入磁盘文件中,从而将数据最终保留下来。由于数据先存入内存映射文件中,而内存中的数据存取速度很快,因此系统性能会有所提高。然而,现有方案在数据存取时都是单一执行的,即同一时间内只能响应一个请求来操作一个内存映射文件,但是通常一个内存映射文件中有很多产品存在,也就是说同一时间内只能响应一个请求来执行对内存文件内某个产品的处理;如果还有其他请求需要操作该内存映射文件的其他产品,那么只能等待前一个请求处理完后再执行下一个请求的处理。由此可以看出,这种在数据存取时的单一执行方式在对请求进行处理时存在较大延时,使得数据操作的效率、即系统性能不高;并且,现有方案对硬件的依赖性较强,当硬件性能发生变化时,无法动态的调整方案,使得方案的伸缩性不好。
发明内容有鉴于此,本发明的主要目的在于提供一种实时数据存储的方法和系统,以解决现有的实时数据存储存在较大延时、系统性能不高、方案伸缩性不好的问题。为达到上述目的,本发明的技术方案是这样实现的本发明提供了一种实时数据存储的方法,该方法包括读取预设的配置信息,并根据读取的配置信息确定内存映射块的数量;根据所确定的内存映射块的数量对内存映射文件进行分块;以内存映射块为单位执行数据的实时存取操作。所述配置信息包括产品类别、每个内存映射块的产品数量和产品的数据存储上限。所述根据读取的配置信息确定内存映射块的数量,具体为将所述内存映射文件中的产品数量除以每个内存映射块的产品数量,得到的运算结果即为所述内存映射块的数量。该方法进一步包括当所述运算结果存在余数时,将所述运算结果的整数部分加一后作为所述内存映射块的数量。'所述根据读取的配置信息确定内存映射块的数量,进一步包括根据所述配置信息中的产品类别生成内存映射文件名,并将生成的内存映射文件名与已有的内存映射文件名进行匹配;如果匹配成功,则判断对应的内存映射文件已存在,并根据读取的配置信息确定所述内存映射文件中的内存映射块的数量;如果匹配失败,则判断对应的内存映射文件不存在,并根据生成的内存映射文件名新创建一个内存映射文件,根据读取的配置信息确定新创建的内存映射文件中的内存映射块的数量。所述以内存映射块为单位执行数据的实时存取搡作,具体为各内存映射块分别响应不同的数据请求,并分别执行数据的实时存取,当5所述内存映射块中的产品的数据记录达到产品的数据存储上限时,将所述产品的数据记录写入磁盘文件中;当所述内存映射块中有对应所述产品的新的数据记录时,按照循环覆盖式的策略对所述新的数据记录进行存储。本发明还提供了一种实时数据存储的系统,包括信息读取模块,用于读取预设的配置信息;分块模块,用于根据读取的配置信息确定内存映射块的数量,并根据所确定的内存映射块的数量对内存映射文件进行分块;数据存取模块,用于以内存映射块为单位执行数据的实时存取操作。所述配置信息包括产品类别、每个内存映射块的产品数量和产品的数据存储上限。所述分块模块进一步用于,根据所述配置信息生成内存映射文件名,并将生成的内存映射文件名与已有的内存映射文件名进行匹配;在匹配成功时,根据读取的配置信息确定所述内存映射文件中的内存映射块的数量;在匹配失败时,根据生成的内存映射文件名新创建一个内存映射文件,并根据读取的配置信息确定新创建的内存映射文件中的内存映射块的数量。本发明所提供的一种实时数据存储的方法和系统,采用内存映射文件分块存取的方式使系统可以并行处理多个数据请求,从而减少了处理数据请求的延时;由于各内存映射块对数据请求的处理操作不会产生相互影响,因此提高了数据操作的效率,并提升了系统性能;由于分块的数量可以根据实际需要进行配置,从而使得方案的伸缩性较好。图l为本发明一种实时数据存储的方法流程图2为本发明实施例中的内存映射文件分块的示意图3为本发明一种实时数据存储的系统的组成结构示意图。具体实施例方式下面结合附图和具体实施例对本发明的技术方案进一步详细阐述。本发明提供一种实时数据存储的方法和系统,由该系统根据预设的配置信息确定内存映射文件中内存映射块的数量,再根据所确定的内存映射块的数量对内存映射文件进行分块,进而以内存映射块为单位执行数据的实时存取操作,实现系统并行处理多个数据请求。具体的操作流程如图1所示,主要包括以下步骤步骤IOI,系统启动时从数据库中读取配置信息。该配置信息是由用户根据实际需要预先设置好并存放在数据库中的,当系统启动时将数据库中存放的配置信息读入内存。本发明的配置信息中包括产品类别、每个内存映射块的产品数量和产品的数据存储上限等信息,且配置信息所包含的内容可以根据实际需要进行扩展。步骤102,根据配置信息中的产品类别生成内存映射文件名。本发明中对所有产品进行分类,从而每个产品都有自己所属的类别,而不同的类别存储的数据格式是不一样的。系统根据配置信息中的产品类别生成对应的内存映射文件名,用于存储对应该类别的产品的数据。步骤103,根据内存映射文件名判断内存映射文件是否存在,如果存在,则执行步骤105;否则,执行步骤104。将生成的内存映射文件名与已有的内存映射文件名进行匹配,如果匹配成功,则判断对应的内存映射文件存在,执行步骤105;否则判断对应的内存映射文件不存在,执行步骤104。内存映射文件(MemoryMappedFiles)实质上是一个文件贮存在系统内存中,该文件可以被任何程序所访问,所以它具有可在各个程序间共享的特性。同时,由于所有的数据存取搡作都在内存中进行,因此它具备处理快速的特点。本发明中将产品作为存储的基本单位,且一个内存映射文件中包含至少一个产7步骤104,根据生成的内存映射文件名新创建一个内存映射文件,操作完成后,转到步骤105。当判断生成的内存映射文件名所对应的内存映射文件不存在时,表明生成的内存映射文件名为新的文件名,从而需要在内存中新创建一个与之对应的内存映射文件。步骤105,根据配置信息中的每个内存映射块的产品数量,确定内存映射文件中内存映射块的数量,并按照该数量对内存映射文件进行分块。所谓分块如图2所示,是对内存映射文件进行分块,每个内存映射文件根据配置信息的不同可以被分成一个或多个内存映射块。分块的操作遵循以下原则内存映射文件中的产品数量/每个内存映射块的产品数量=分块数量;其中,内存映射文件中的产品数量是动态的变化的;每个内存映射块的产品数量是在配置信息中设置的,当配置信息未更改时,每个内存映射块的产品数量是固定不变的,从而随着内存映射文件中的产品数量的增加,分块数量也会相应增加。在实际应用中,也可以配置信息的更改来灵活调节分块数量,如果需要获得较多的分块数量,则只需在配置信息中设置每个内存映射块的产品数量较小即可,即只需通过简单的配置信息的更改,可方便实现方案的调整,使得方案具有较好的伸缩性。另外,如果"内存映射文件中的产品数量/每个内存块的产品数量"的结果有余数出现,那么分块数量在该结果取整数的基础上加一。步骤106,以内存映射块为单位执行数据的实时存取搡作。在对内存映射文件进行分块划分后,所得各内存映射块可以分别响应不同的数据请求,并分别执行数据的实时存取;在执行数据存储的过程中,当内存映射块中的某个产品的数据记录达到配置信息中预设的产品的数据存储上限时,将该产品的数据记录写入磁盘文件中;当内存映射块中有对应该产品的新的数据记录时,按照循环覆盖式的策略,由新存入的数据记录覆盖掉最旧的数据记录,以保证能够存入新的数据记录。需要指出的是,将产品的数据记录写入磁盘文件的操作不会影响内存映射块对数据的实时存取操作。但是,当产品的数据记录使得为该产品分配的存储空间满时,系统需要强制将该产品的数据记录写入磁盘文件中,以保证新数据在内存映射文件中的正常存入。此外,由于内存映射文件中存在很多产品,每个产品的数据记录存储都是釆用循环覆盖的策略,那么为了能正确得到所需的数据,本发明为每个产品引入头的概念,即产品的头中存放当前产品记录在内存映射文件中的状态。对于每个内存映射块,其头的结构如下表所示FirstLastsavcdEnd保留区验证码记录1记录2…记录nFirstLastsavedEnd保留区XXX记录1记录2…记录nFirstLastsavedEnd保留区XXX记录1记录2…记录nFirstLastsavedEnd保留区XXX记录1记录2…记录n记录nFirstLastsavedEnd保留区XXX记录1记录2…表1其中,表1中的每一行分别对应一个产品,First表示对应该产品的最旧一条数据记录在内存映射块中的位置,有数据时以0为基数,First的取值范围为从-l到MAX-l的整数。例如First取值为-l时,表示没有对应该产品的数据记录写入内存映射块;First取值为0时,表示内存映射块中的最旧一条数据位于记录1的位置;First取值为MAX-1时,表示内存映射块中的最旧一条数据位于记录n的位置。Last表示最新一条数据在内存映射块中的位置,取值范围与First相同,不再赘述。savedEnd的状态值表示当前产品对应的存储空间中已经写入到文件中的最后一条记录的位置。验证码是用于验证数据准确性所使用的状态码,验证码的计算规则为9First+Last+savedEnd-验证码。当某个产品的数据记录达到配置信息中预设的产品的数据存储上限时,按照循环覆盖式的策略,并根据First所指示的对应该产品的最旧一条数据记录在内存映射块中的位置,利用新存入的数据将最旧的数据记录覆盖掉。较佳的,存入磁盘文件中的数据也可以与内存映射文件类似的循环覆盖的策略,相应的,磁盘文件也可引入头的概念,即磁盘文伴的头中存放当前产品记录在磁盘文件中的状态。对于每个磁盘文件,其头的结构如下表所示<table>tableseeoriginaldocumentpage10</column></row><table>表2其中,First和Last的作用和取值范围与表1中相同,此处不再赘述。此处的savedEnd取值始终为-l,其目的是为了与内存映射块的头保持一致。为实现上述实时数据存储的方法,本发明还提供了一种实时数据存储的系统,如图3所示,该系统包括信息读取模块IO、分块模块20和数据存取模块30。信息读取模块IO,用于读取数据库中预设的配置信息。分块模块20连接信息读取模块IO,用于根据读取的配置信息确定内存映射块的数量,并根据所确定的内存映射块的数量对内存映射文件进行分块。数据存取模块30连接分块模块20,用于以内存映射块为单位执行数据的实时存取操作,具体为控制各内存映射块分别响应不同的数据请求,并分别执行数据的实时存取,当内存映射块中的产品的数据记录达到产品的数据存储上限时,将该产品的数据记录写入磁盘文件中;当内存映射块中有对应该产品的新的数据记录时,按照循环覆盖式的策略对该新的数据记录进行存储。作为本发明的一种较佳实施例,分块模块20进一步用于,根据配置信息生成内存映射文件名,并将生成的内存映射文件名与已有的内存映射文件名进行匹配;在匹配成功时,根据读取的配置信息确定内存映射文件中的内存映射块的数量;在匹配失败时,根据生成的内存映射文件名新创建一个内存映射文件,并根据读取的配置信息确定新创建的内存映射文件中的内存映射块的数量。需要说明的是,本发明的实时数据存储的方法和系统能够适用于金融领域中的股票行情数据的存储,各个产品即为各只不同的股票,各股票可以按照行业板块的不同进行分类;釆用本发明的实时数据存储的方法和系统,能够减少数据处理的时延,提高数据操作效率和系统性能,且方案的伸缩性较好。当然,本发明的实时数据存储的方法和系统并不仅限于在金融领域中的应用,对于其他领域的数据存储也是适用的。以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。权利要求1、一种实时数据存储的方法,其特征在于,该方法包括读取预设的配置信息,并根据读取的配置信息确定内存映射块的数量;根据所确定的内存映射块的数量对内存映射文件进行分块;以内存映射块为单位执行数据的实时存取操作。2、根据权利要求l所述实时数据存储的方法,其特征在于,所述配置信息包括产品类别、每个内存映射块的产品数量和产品的数据存储上限。3、根据权利要求2所述实时数据存储的方法,其特征在于,所述根据读取的配置信息确定内存映射块的数量,具体为将所述内存映射文件中的产品数量除以每个内存映射块的产品数量,得到的运算结果即为所述内存映射块的数量。4、根据权利要求3所述实时数据存储的方法,其特征在于,该方法进一步包括当所述运算结果存在佘数时,将所述运算结果的整数部分加一后作为所述内存映射块的数量。5、根据权利要求3或4所述实时数据存储的方法,其特征在于,所述根据读取的配置信息确定内存映射块的数量,进一步包括根据所述配置信息中的产品类别生成内存映射文件名,并将生成的内存映射文件名与已有的内存映射文件名进行匹配;如果匹配成功,则判断对应的内存映射文件已存在,并根据读取的配置信息确定所述内存映射文件中的内存映射块的数量;如果匹配失败,则判断对应的内存映射文件不存在,并根据生成的内存映射文件名新创建一个内存映射文件,根据读取的配置信息确定新创建的内存映射文件中的内存映射块的数量。6、根据权利要求5所述实时数据存储的方法,其特征在于,所述以内存映射块为单位执行数据的实时存取操作,具体为各内存映射块分别响应不同的数据请求,并分别执行数据的实时存取,当所述内存映射块中的产品的数据记录达到产品的数据存储上限时,将所述产品的数据记录写入磁盘文件中;当所述内存映射块中有对应所述产品的新的数据记录时,按照循环覆盖式的策略对所述新的数据记录进行存储。7、一种实时数据存储的系统,其特征在于,包括信息读取模块,用于读取预设的配置信息;分块模块,用于根据读取的配置信息确定内存映射块的数量,并根据所确定的内存映射块的数量对内存映射文件进行分块;数据存取模块,用于以内存映射块为单位执行数据的实时存取操作。8、根据权利要求7所述实时数据存储的系统,其特征在于,所述配置信息包括产品类别、每个内存映射块的产品数量和产品的数据存储上限。9、根据权利要求8所述实时数据存储的系统,其特征在于,所述分块模块进一步用于,根据所述配置信息生成内存映射文件名,并将生成的内存映射文件名与已有的内存映射文件名进行匹配;在匹配成功时,根据读取的配置信息确定所述内存映射文件中的内存映射块的数量;在匹配失败时,根据生成的内存映射文件名新创建一个内存映射文件,并根据读取的配置信息确定新创建的内存映射文件中的内存映射块的数量。全文摘要本发明公开了一种实时数据存储的方法,包括读取预设的配置信息,并根据读取的配置信息确定内存映射块的数量;根据所确定的内存映射块的数量对内存映射文件进行分块;以内存映射块为单位执行数据的实时存取操作。本发明还公开了一种实时数据存储的系统,采用内存映射文件分块存取的方式使系统可以并行处理多个数据请求,从而提升系统性能;由于分块的数量可以根据实际需要进行配置,使得方案的伸缩性较好。文档编号G06F17/30GK101567002SQ200910085520公开日2009年10月28日申请日期2009年5月25日优先权日2009年5月25日发明者徐立中,王小龙,宇田申请人:北京中企开源信息技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1