流式数据存储方法及装置与流程

文档序号:12720132阅读:972来源:国知局
流式数据存储方法及装置与流程

本发明涉及互联网技术领域,具体涉及一种流式数据存储方法及装置。



背景技术:

在互联网的很多应用场景中,例如消息推送和网络直播等,均会使用到流式数据。流式数据的特点是每时每刻都有数据产生,而且数据到达时间也不是匀速的。现有技术中,大多是利用消息队列来解决对流式数据的存储问题。

在实际应用场景中,所产生的流式数据的数据量可能是海量的。然而,消息队列在面临高并发大量数据时,将无法快速地完成数据处理。因此,现有的流式数据存储方案中存在着数据处理效率较低的问题。



技术实现要素:

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的流式数据存储方法及装置。

根据本发明的一个方面,提供了一种流式数据存储方法,该方法包括:

获取待存储的数据以及数据的原数据值的数据长度,确定用于存储原数据值的存储文件以及用于管理存储文件的管理文件;其中,管理文件存储有多个单位存储空间管理标识,每个单位存储空间管理标识用于标记存储文件的对应的单位存储空间的已占用状态或未占用状态;

在管理文件中查找满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识,将原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的存储文件的至少一个单位存储空间,并获取原数据值在存储文件中的存储位置;

将至少一个标记为未占用状态的单位存储空间管理标识进行修改,修改后的单位存储空间管理标识被标记为已占用状态;

得到包含存储文件的标识、存储位置和数据长度的新数据值,根据数据的原数据键和新数据值,构建数据键值对形式的实例数据,将实例数据写入数据库中。

根据本发明的另一方面,提供了一种流式数据存储装置,该装置包括:

数据获取模块,适于获取待存储的数据以及数据的原数据值的数据长度;

确定模块,适于确定用于存储原数据值的存储文件以及用于管理存储文件的管理文件;其中,管理文件存储有多个单位存储空间管理标识,每个单位存储空间管理标识用于标记存储文件的对应的单位存储空间的已占用状态或未占用状态;

查找模块,适于在管理文件中查找满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识;

存储模块,适于将原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的存储文件的至少一个单位存储空间;

存储位置获取模块,适于获取原数据值在存储文件中的存储位置;

修改模块,适于将至少一个标记为未占用状态的单位存储空间管理标识进行修改,修改后的单位存储空间管理标识被标记为已占用状态;

生成模块,适于得到包含存储文件的标识、存储位置和数据长度的新数据值;

写入模块,适于根据数据的原数据键和新数据值,构建数据键值对形式的实例数据,将实例数据写入数据库中。

根据本发明提供的技术方案,获取待存储的数据以及数据的原数据值的数据长度,确定用于存储原数据值的存储文件以及用于管理存储文件的管理文件,接着在管理文件中查找满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识,将原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的存储文件的至少一个单位存储空间,并获取原数据值在存储文件中的存储位置,将至少一个标记为未占用状态的单位存储空间管理标识进行修改,然后得到包含存储文件的标识、存储位置和数据长度的新数据值,根据数据的原数据键和新数据值,构建数据键值对形式的实例数据,将实例数据写入数据库中。根据本发明提供的技术方案,不仅利用管理文件有效地实现了对存储文件的空间使用情况的管理,而且能够方便地将待存储的数据的原数据值转化为所占空间较小的新数据值,从而节省了存储空间,优化了存储方式,提高了数据处理效率,提升面临高并发流式数据时的吞吐量。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1示出了根据本发明一个实施例的流式数据存储方法的流程示意图;

图2示出了根据本发明另一个实施例的流式数据存储方法的流程示意图;

图3示出了根据本发明一个实施例的流式数据存储装置的结构框图;

图4示出了根据本发明另一个实施例的流式数据存储装置的结构框图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

键值存储数据库,这是一种NoSQL(非关系型数据库)模型,其数据按照数据键值对的形式进行组织、索引和存储。KV存储非常适合不涉及过多数据关系业务关系的业务数据,同时能有效减少读写磁盘的次数,比SQL数据库存储拥有更好的读写性能。

目前在生产环境,使用较多的K-V存储有Memcached,Redis,LevelDB等。在通信方面,主要使用专有的二进制协议,这样做的好处是协议解析的的性能比较高,不足的地方在于通用性差,需要为不同的语言实现专门的客户端,开发成本高,同时二进制协议的可调试性差,导致定位问题困难;在架构设计方面,上述存储的分布式基本都需要客户端来实现,Redis从3.0之后开始支持集群,但从生产环境中的测试情况来看,单点故障导致集群不可用的情况依然存在,且Redis的定位是缓存,对于持久化的支持程度有限。

针对以上传统方法的不足,本发明的发明人提出了一种新的分布式数据存储系统架构,并基于此系统进一步提出了一种流式数据存储方法及装置。该分布式数据存储系统包括:客户端、Linux虚拟服务器集群、分布式组件和存储引擎,如下所介绍的流式数据存储方法具体为存储引擎中各个存储节点所采用的数据存储方案。

在分布式数据存储系统中,将分布式组件与存储引擎分离,存储引擎只负责数据存储,以及对外提供http接口,以供分布式组件根据所提供的http接口向对应的存储节点写入数据,其中,存储引擎包括多个存储节点,各个存储节点是相互独立的,存储节点彼此之间不会直接进行通信,从而降低了存储引擎的复杂度。

本系统中,分布式组件向存储引擎写入数据时,能够根据Key来进行负载均衡,将数据写入指定的存储节点。分布式组件作为客户端与存储引擎之间的反向代理,对客户端屏蔽负载均衡的细节,保证存储节点的http接口的透明性。当某一个存储节点宕机时,分布式组件会自动对数据写请求进行负载均衡,保证整个系统依然可用,从而解决KV存储的单点限制。

另外,分布式组件中的每个节点都是独立的,当某一节点宕机时,服务器集群会自动将数据写请求发送至分布式组件中的其他可用的节点,从而解决了单点限制。当需要提高系统的吞吐率时,也只需要简单地增加节点即可实现。

目前业界主流的存储对于replica的实现存在两种模式:

模式一:1Primary-1Replica Shard

模式二:1Primary-N Replica Shards

分布式组件选用了工程上更加可行的模式一。模式二由于一份数据具有更多的备份,因此具备更高的的可用性,但同时带来了更多的数据一致性问题和实现的复杂度。模式一在高可用性方面不如模式二,但在实现难度方面要小很多,且分布式组件自身的定位是分布式kv存储,而不是分布式数据库,因此相对而言,模式一更加适用。

在本发明中,分布式组件为反向代理服务器,具体可以是Nginx服务器,nginx是高吞吐高并发的http反向代理,由于分布式组件并不需要对存储节点上的数据进行合并(merge),因此为了提高系统的吞吐量和并发量,分布式组件的进程模型为1master-N worker,其中master进程会对worker进程进行自动保活,这一点保证了分布式组件单个节点的高可用性和高吞吐性。由于各个进程是独立的,因此对于少部分用到共享数据的接口,需要利用共享内存来进行通信。

Nginx服务器现有的负载均衡策略将存储节点地址等细节完全对外屏蔽了,也就是说,对于开发者来说这些细节是透明的,因此,无法将数据写入指定的存储节点,从而限定了定制化的负载均衡的实现,本发明提供的流式数据存储方法及装置能够实现定制化的负载均衡,实现将数据写入指定的存储节点。

下面通过几个具体的实施例对本发明提出的存储引擎内部使用的流式数据存储方法进行详细描述。需要说明的是,本发明提供的流式数据存储方法不局限于上述系统框架,也可以在其它类似的系统框架中实现。

图1示出了根据本发明一个实施例的流式数据存储方法的流程示意图,如图1所示,该方法包括如下步骤:

步骤S100,获取待存储的数据以及数据的原数据值的数据长度。

待存储的数据为流式数据,待存储的数据具体为K-V存储数据,其包含数据键key和数据值value。存储引擎接收到待存储的数据的写入请求后,首先获取待存储的数据以及数据的原数据值的数据长度。其中,利用数据长度表示所占用的空间大小。例如,数据的原数据值所占空间为5KB,则该原数据值的数据长度为5KB;又如,数据的原数据值所占空间为3MB,则该原数据值的数据长度为3MB。

步骤S101,确定用于存储原数据值的存储文件以及用于管理存储文件的管理文件。

具体地,在步骤S101中,可按照预设顺序或根据待存储的数据的原数据键确定用于存储该原数据值的存储文件以及用于管理该存储文件的管理文件。

其中,管理文件用于管理存储文件的空间使用情况。管理文件存储有多个单位存储空间管理标识,每个单位存储空间管理标识用于标记存储文件的对应的单位存储空间的已占用状态或未占用状态。

步骤S102,在管理文件中查找满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识。

在一个具体的示例中,单位存储空间为1KB存储空间,单位存储空间管理标识可包括“1”和“0”两种标识。“1”用于标记存储文件的对应的单位存储空间为已占用状态,“0”用于标记存储文件的对应的单位存储空间为未占用状态。

假设,原数据值的数据长度为5KB,则数据长度除以1KB得到5,那么在步骤S102中,在所确定的管理文件中查找满足数据长度要求的连续的“0”,即在所确定的管理文件中查找5个连续的“0”,如果在该管理文件中查找到5个连续的“0”,则说明对应的存储文件中存在对应的连续的5KB的未占用的存储空间;又如,原数据值的数据长度为3MB,则数据长度除以1KB得到3072,那么在步骤S102中,在所确定的管理文件中查找满足数据长度要求的连续的“0”,即在所确定的管理文件中查找3072个连续的“0”,如果在该管理文件中查找到3072个连续的“0”,则说明对应的存储文件中存在对应的连续的3MB的未占用的存储空间。

步骤S103,将原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的存储文件的至少一个单位存储空间,并获取原数据值在存储文件中的存储位置。

在查找到满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识的情况下,在步骤S103中,将原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的存储文件的至少一个单位存储空间,并获取原数据值在存储文件中的存储位置。存储位置的获取是为了能够方便地从存储文件中查找到所存储的原数据值,其中,该存储位置是相对于起始存储位置的,其中,起始存储位置可为0。假设原数据值的数据长度为5KB,原数据值存储至存储文件的第3个单位存储空间至第7个单位存储空间,那么该原数据值在该存储文件中的存储位置为3。

步骤S104,将至少一个标记为未占用状态的单位存储空间管理标识进行修改,修改后的单位存储空间管理标识被标记为已占用状态。

在将原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的存储文件的至少一个单位存储空间之后,所对应的存储文件的至少一个单位存储空间由未占用状态变为已占用状态,因此,在步骤S104中,需要将至少一个标记为未占用状态的单位存储空间管理标识进行修改,修改后的单位存储空间管理标识被标记为已占用状态。

步骤S105,得到包含存储文件的标识、存储位置和数据长度的新数据值。

其中,新数据值包括:存储文件的标识、原数据值在存储文件中的存储位置和原数据值的数据长度。利用该方法,能够将待存储的数据的原数据值转化为所占空间较小的新数据值。

步骤S106,根据数据的原数据键和新数据值,构建数据键值对形式的实例数据,将实例数据写入数据库中。

具体地,可将原数据键作为数据键,将新数据值作为数据键对应的数据值,构建数据键值对形式的实例数据,即将原key作为数据键,将新value作为数据键对应的数据值,构建数据键值对形式的实例数据。在构建了实例数据之后,将所构建的实例数据写入数据库中。由于新数据值所占空间小于待存储的数据的原数据值所占空间,利用新数据值作为数据值,能够节省存储空间,有助于提高数据处理效率,提升面临高并发流式数据时的吞吐量。

根据本发明实施例提供的流式数据存储方法,获取待存储的数据以及数据的原数据值的数据长度,确定用于存储原数据值的存储文件以及用于管理存储文件的管理文件,接着在管理文件中查找满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识,将原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的存储文件的至少一个单位存储空间,并获取原数据值在存储文件中的存储位置,将至少一个标记为未占用状态的单位存储空间管理标识进行修改,然后得到包含存储文件的标识、存储位置和数据长度的新数据值,根据数据的原数据键和新数据值,构建数据键值对形式的实例数据,将实例数据写入数据库中。根据本发明提供的技术方案,不仅利用管理文件有效地实现了对存储文件的空间使用情况的管理,而且能够方便地将待存储的数据的原数据值转化为所占空间较小的新数据值,从而节省了存储空间,优化了存储方式,提高了数据处理效率,提升面临高并发流式数据时的吞吐量。

图2示出了根据本发明另一个实施例的流式数据存储方法的流程示意图,如图2所示,该方法包括如下步骤:

步骤S200,预先创建第一存储文件、第二存储文件、第一管理文件和第二管理文件,并在系统内存中预先创建分别与第一存储文件、第二存储文件、第一管理文件和第二管理文件相映射的内存块。

其中,步骤S200即为预先创建存储文件和管理文件,并在系统内存中预先创建分别与存储文件和管理文件相映射的内存块的步骤。具体地,在该实施例中,存储文件包括:第一存储文件和与第一存储文件对应的第二存储文件;管理文件包括:第一管理文件和与第一管理文件对应的第二管理文件。其中,第一存储文件和与第一存储文件对应的第二存储文件具有相同的标识,第一管理文件和与第一管理文件对应的第二管理文件具有相同的标识。第一管理文件用于管理第一存储文件;第二管理文件用于管理第二存储文件。

在一个具体的示例中,创建256个第一存储文件,每个第一存储文件的大小为64MB,同时在系统内存中预先创建256个内存块,每个内存块大小为64MB,256个内存块与256个第一存储文件一一映射;其中,内存块和第一存储文件的映射可以通过系统接口实现,例如UNIX系统中的mmap接口。

创建256个第二存储文件,每个第二存储文件的大小为2GB,同时在系统内存中预先创建256个内存块,每个内存块大小为2GB,256个内存块与256个第一存储文件一一映射。可选地,为了避免占用过多的内存,可不在系统内存中创建与第二存储文件相映射的内存块。

与256个第一存储文件一一对应,创建256个第一管理文件,每个第一管理文件的大小为8KB,同时在系统内存中预先创建256个内存块,每个内存块大小为8KB,256个内存块与256个第一管理文件一一映射。第一管理文件用于管理第一存储文件。

与256个第二存储文件一一对应,创建256个第二管理文件,每个第二管理文件的大小为256KB,同时在系统内存中预先创建256个内存块,每个内存块大小为256KB,256个内存块与256个第二管理文件一一映射。第二管理文件用于管理第二存储文件。

256个第一管理文件与256个第一存储文件一一对应,256个第二管理文件与256个第二存储文件一一对应,使用bitmap算法,第一管理文件可有效地管理第一存储文件的空间使用情况,第二管理文件可有效地管理第二存储文件的空间使用情况。第一管理文件中的每一比特对应于第一存储文件的一个单位存储空间,单位存储空间为1KB存储空间,即第一管理文件中的每一比特对应于第一存储文件的1KB存储空间。同理,第二管理文件中的每一比特对应于第二存储文件的一个单位存储空间。具体地,当第一管理文件中某比特上所存储的单位存储空间管理标识为“1”时,可表示该第一管理文件对应的第一存储文件对应的1KB存储空间为已占用状态;当第一管理文件中某比特上所存储的单位存储空间管理标识为“0”时,可表示该第一管理文件对应的第一存储文件对应的1KB存储空间为未占用状态。因此,大小为8KB的第一管理文件可以管理大小为64MB的第一存储文件,大小为256KB的第二管理文件可以管理大小为2GB的第二存储文件。

步骤S201,获取待存储的数据以及数据的原数据值的数据长度。

以消息队列为例,大部分消息队列对于流式数据,会为每一个数据块分配一个ID,一般情况下,ID分配方式为循环自增方式,那么可将该ID作为该条流式数据的数据键,将流式数据的具体数据内容作为数据键对应的数据值,从而得到K-V形式的待存储的数据。存储引擎接收到待存储的数据的写入请求后,首先获取待存储的数据以及数据的原数据值的数据长度。例如,数据的原数据值所占空间为5KB,则该原数据值的数据长度为5KB。

在获取了待存储的数据以及数据的原数据值的数据长度之后,可根据数据的原数据键对应的哈希值确定用于存储该原数据值的存储文件以及用于管理存储文件的管理文件。具体地,可通过步骤S202和步骤S203进行实现。

步骤S202,对数据的原数据键进行计算,得到原数据键对应的哈希值。

步骤S203,根据计算得到的哈希值,确定用于存储原数据值的第一存储文件、第二存储文件、用于管理第一存储文件的第一管理文件以及用于管理第二存储文件的第二管理文件。

其中,第一管理文件和第二管理文件存储有多个单位存储空间管理标识,第一管理文件中的每个单位存储空间管理标识用于标记对应的第一存储文件的对应的单位存储空间的已占用状态或未占用状态,第二管理文件中的每个单位存储空间管理标识用于标记对应的第二存储文件的对应的单位存储空间的已占用状态或未占用状态。单位存储空间管理标识可包括“1”和“0”两种标识。“1”用于标记对应的单位存储空间为已占用状态,“0”用于标记对应的单位存储空间为未占用状态。

具体地,该哈希值所对应的数值范围可为0-255,那么可根据该哈希值所对应的数值确定第一存储文件的标识、第二存储文件的标识、第一管理文件的标识以及第二管理文件的标识,从而确定了第一存储文件、第二存储文件、第一管理文件和第二管理文件。例如,计算得到的哈希值所对应的数值为26,那么在步骤S203中将标识为26的第一存储文件和标识为26的第二存储文件确定为用于存储原数据值的存储文件,同时还确定了标识为26的第一管理文件和标识为26的第二管理文件。

其中,标识为26的第一存储文件和标识为26的第二存储文件相对应,标识为26的第一管理文件用于管理标识为26的第一存储文件,标识为26的第二管理文件用于管理标识为26的第二存储文件。具体地,标识为26的第一管理文件中的每个单位存储空间管理标识用于标记标识为26的第一存储文件的对应的单位存储空间的已占用状态或未占用状态,标识为26的第二管理文件中的每个单位存储空间管理标识用于标记标识为26的第二存储文件的对应的单位存储空间的已占用状态或未占用状态。

步骤S204,在第一管理文件中查找是否存在满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识;若是,则执行步骤S205;若否,则执行步骤S207。

如果在第一管理文件中查找到存在满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识,说明对应的第一存储文件中存在对应的满足数据长度要求的连续的未占用的存储空间,则执行步骤S205;如果在第一管理文件中未查找到存在满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识,说明对应的第一存储文件中不存在对应的满足数据长度要求的连续的未占用的存储空间,则执行步骤S207。

以原数据值的数据长度为5KB为例,在步骤S204中,在第一管理文件中查找是否存在满足数据长度要求的连续的“0”,即在第一管理文件中查找是否存在5个连续的“0”。如果在该第一管理文件中查找到5个连续的“0”,则说明对应的第一存储文件中存在对应的连续的5KB的未占用的存储空间;如果在该第一管理文件中未查找到5个连续的“0”,则说明对应的第一存储文件中不存在对应的连续的5KB的未占用的存储空间。

步骤S205,将原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的第一存储文件的至少一个单位存储空间。

如果在第一管理文件中查找到满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识,说明对应的第一存储文件中存在对应的满足数据长度要求的连续的未占用的存储空间,那么在步骤S205中将原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的第一存储文件的至少一个单位存储空间。

具体地,可通过系统接口,以内存映射方式,将原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的第一存储文件的至少一个单位存储空间,从而将较慢的磁盘读写转化为极快的内存读写,有效地提高了读写性能。

步骤S206,获取原数据值在第一存储文件中的存储位置。

为了能够方便地从第一存储文件中查找到所存储的原数据值,在步骤S206中,获取原数据值在第一存储文件中的存储位置。假设原数据值的数据长度为5KB,原数据值存储至第一存储文件的第3个单位存储空间至第7个单位存储空间,那么该原数据值在该第一存储文件中的存储位置为3。

步骤S207,在第二管理文件中查找是否存在满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识;若是,则执行步骤S208。

如果在第一管理文件中未查找到满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识,那么在步骤S207中,在第二管理文件中查找是否存在满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识。

如果在第二管理文件中查找到存在满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识,说明对应的第二存储文件中存在对应的满足数据长度要求的连续的未占用的存储空间,则执行步骤S208。

另外,本领域技术人员还可根据实际需要对存储文件和管理文件进行扩充,此处不做限定。例如,在第二管理文件中未查找到存在满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识的情况下,可创建第三存储文件和第三管理文件,并在系统内存中创建分别与第三存储文件和第三管理文件相映射的内存块,然后在第三管理文件中查找是否存在满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识,将原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的第三存储文件的至少一个单位存储空间,并获取原数据值在第三存储文件中的存储位置。

步骤S208,将原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的第二存储文件的至少一个单位存储空间。

如果在第二管理文件中查找到满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识,说明对应的第二存储文件中存在对应的满足数据长度要求的连续的未占用的存储空间,那么在步骤S208中将原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的第二存储文件的至少一个单位存储空间。

具体地,可通过系统接口,以内存映射方式,将原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的第二存储文件的至少一个单位存储空间,从而将较慢的磁盘读写转化为极快的内存读写,有效地提高了读写性能。

步骤S209,获取原数据值在第二存储文件中的存储位置。

为了能够方便地从第二存储文件中查找到所存储的原数据值,在步骤S209中,获取原数据值在第二存储文件中的存储位置。

步骤S210,将至少一个标记为未占用状态的单位存储空间管理标识进行修改,修改后的单位存储空间管理标识被标记为已占用状态。

在将原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的第一存储文件或第二存储文件的至少一个单位存储空间之后,所对应的第一存储文件或第二存储文件的至少一个单位存储空间由未占用状态变为已占用状态,因此,在步骤S210中,需要将至少一个标记为未占用状态的单位存储空间管理标识进行修改,修改后的单位存储空间管理标识被标记为已占用状态。

步骤S211,得到包含存储文件的标识、存储标记位、存储位置和数据长度的新数据值。

在步骤S203中所确定的第一存储文件和第二存储文件具有相同的标识,此处的存储文件的标识即为第一存储文件和第二存储文件的标识。

其中,存储标记位用于标记原数据值存储至第一存储文件或第二存储文件,在一个具体的示例中,当存储标记位为“0”时,表示原数据值存储在第一存储文件中;当存储标记位为“1”时,表示原数据值存储在第二存储文件中。

在本发明实施例中,新数据值的大小为9字节,其中,使用1字节的空间存储存储文件的标识;使用4字节的空间存储存储标记位和存储位置,具体地,这4字节中的第1个比特用于存储存储标记位,这4字节中的第2个比特至第32个比特用于存储原数据值在第一存储文件或第二存储文件中的存储位置;另外,使用4字节的空间存储数据长度。利用该方法,能够将待存储的数据的原数据值转化为所占空间较小的新数据值。

步骤S212,根据数据的原数据键和新数据值,构建数据键值对形式的实例数据,将实例数据写入数据库中。

其中,可将原数据键作为数据键,将新数据值作为数据键对应的数据值,构建数据键值对形式的实例数据。在构建了实例数据之后,将所构建的实例数据写入数据库中。由于新数据值所占空间小于待存储的数据的原数据值所占空间,利用新数据值作为数据值,能够节省存储空间,有助于提高数据处理效率,提升面临高并发流式数据时的吞吐量。

根据本发明实施例提供的流式数据存储方法,查询某条待查询的数据的具体过程如下:

(1)根据该条待查询的数据的原key,从数据库中查找以该原key为数据键的实例数据,从查找到的实例数据中获取数据值,该数据值即为该条待查询的数据的新value。

(2)根据新value所包含的存储文件的标识和存储标记位,确定该条待查询的数据的原value存储在哪一个第一存储文件或哪一个第二存储文件中。

(3)根据新value所包含的存储位置和数据长度,从所确定的第一存储文件或第二存储文件中获取所存储的原value。该原value即为该待查询的数据的原key对应的数据值。具体地,在所确定的第一存储文件或第二存储文件中从存储位置所对应的单位存储空间开始,获取满足数据长度要求的至少一个单位存储空间中的存储内容,所获取的存储内容即为原value。

根据本发明实施例提供的流式数据存储方法,删除某条待删除的数据的具体过程如下:

(1)根据该条待删除的数据的原key,从数据库中查找以该原key为数据键的实例数据,从查找到的实例数据中获取数据值,该数据值即为该条待删除的数据的新value。

(2)根据新value所包含的存储文件的标识和存储标记位,确定该条待删除的数据的原value存储在哪一个第一存储文件或哪一个第二存储文件中。

(3)根据新value所包含的存储位置和数据长度,从所确定的第一存储文件或第二存储文件中删除所存储的原value,并在所对应的第一管理文件或第二管理文件中,将对应的至少一个标记为已占用状态的单位存储空间管理标识进行修改,修改后的单位存储空间管理标识被标记为未占用状态,最后从数据库中删除以该原key为数据键的实例数据。

根据本发明实施例提供的流式数据存储方法,利用第一管理文件和第二管理文件有效地实现了对第一存储文件和第二存储文件的空间使用情况的管理;在系统内存中预先创建了分别与第一存储文件、第二存储文件、第一管理文件和第二管理文件相映射的内存块,因此可将读写文件操作通过读写内存完成,将较慢的磁盘读写转化为极快的内存读写,从而有效地提高了读写性能;能够将待存储的数据的原数据值转化为所占空间较小的新数据值,节省了存储空间,优化了存储方式,有助于提高数据处理效率,提升面临高并发流式数据时的吞吐量。

图3示出了根据本发明一个实施例的流式数据存储装置的结构框图,如图3所示,该装置包括:数据获取模块301、确定模块302、查找模块303、存储模块304、存储位置获取模块305、修改模块306、生成模块307和写入模块308。

数据获取模块301适于:获取待存储的数据以及数据的原数据值的数据长度。

确定模块302适于:确定用于存储原数据值的存储文件以及用于管理存储文件的管理文件。

具体地,管理文件存储有多个单位存储空间管理标识,每个单位存储空间管理标识用于标记存储文件的对应的单位存储空间的已占用状态或未占用状态;

查找模块303适于:在管理文件中查找满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识。

存储模块304适于:将原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的存储文件的至少一个单位存储空间。

其中,存储模块304进一步适于:通过系统接口,以内存映射方式,将原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的存储文件的至少一个单位存储空间。

存储位置获取模块305适于:获取原数据值在存储文件中的存储位置。

修改模块306适于:将至少一个标记为未占用状态的单位存储空间管理标识进行修改,修改后的单位存储空间管理标识被标记为已占用状态。

生成模块307适于:得到包含存储文件的标识、存储位置和数据长度的新数据值。

其中,新数据值包括:存储文件的标识、原数据值在存储文件中的存储位置和原数据值的数据长度。利用该装置,能够将待存储的数据的原数据值转化为所占空间较小的新数据值。

写入模块308适于:根据数据的原数据键和新数据值,构建数据键值对形式的实例数据,将实例数据写入数据库中。

根据本发明实施例提供的流式数据存储装置,数据获取模块获取待存储的数据以及数据的原数据值的数据长度,确定模块确定用于存储原数据值的存储文件以及用于管理存储文件的管理文件,查找模块在管理文件中查找满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识,存储模块将原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的存储文件的至少一个单位存储空间,存储位置获取模块获取原数据值在存储文件中的存储位置,修改模块将至少一个标记为未占用状态的单位存储空间管理标识进行修改,生成模块得到包含存储文件的标识、存储位置和数据长度的新数据值,写入模块根据数据的原数据键和新数据值,构建数据键值对形式的实例数据,将实例数据写入数据库中。根据本发明提供的技术方案,不仅利用管理文件有效地实现了对存储文件的空间使用情况的管理,而且能够方便地将待存储的数据的原数据值转化为所占空间较小的新数据值,从而节省了存储空间,优化了存储方式,提高了数据处理效率,提升面临高并发流式数据时的吞吐量。

图4示出了根据本发明另一个实施例的流式数据存储装置的结构框图,如图4所示,该装置包括:创建模块401、数据获取模块402、确定模块403、查找模块404、存储模块405、存储位置获取模块406、修改模块407、生成模块408和写入模块409。其中,查找模块404包括:第一查找单元4041和第二查找单元4042。

创建模块401适于:预先创建存储文件和管理文件,并在系统内存中预先创建分别与存储文件和管理文件相映射的内存块。

其中,存储文件包括:第一存储文件和与第一存储文件对应的第二存储文件;管理文件包括:第一管理文件和与第一管理文件对应的第二管理文件。也就是说,创建模块401预先创建第一存储文件、第二存储文件、第一管理文件和第二管理文件,并在系统内存中预先创建分别与第一存储文件、第二存储文件、第一管理文件和第二管理文件相映射的内存块。

其中,第一存储文件和与第一存储文件对应的第二存储文件具有相同的标识;第一管理文件和与第一管理文件对应的第二管理文件具有相同的标识;第一管理文件用于管理第一存储文件;第二管理文件用于管理第二存储文件。

其中,创建模块401与确定模块403、查找模块404、存储模块405、存储位置获取模块406以及修改模块407均有连接关系,为了便于查看,图中并未示出全部的连接关系。

数据获取模块402适于:获取待存储的数据以及数据的原数据值的数据长度。

确定模块403适于:对数据的原数据键进行计算,得到原数据键对应的哈希值;根据计算得到的哈希值,确定用于存储原数据值的存储文件以及用于管理存储文件的管理文件。

具体地,确定模块403根据计算得到的哈希值,确定用于存储原数据值的第一存储文件、第二存储文件、用于管理第一存储文件的第一管理文件以及用于管理第二存储文件的第二管理文件。

其中,第一管理文件和第二管理文件存储有多个单位存储空间管理标识,第一管理文件中的每个单位存储空间管理标识用于标记第一存储文件的对应的单位存储空间的已占用状态或未占用状态,第二管理文件中的每个单位存储空间管理标识用于标记第二存储文件的对应的单位存储空间的已占用状态或未占用状态。

查找模块404中的第一查找单元4041适于:在第一管理文件中查找是否存在满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识。

第二查找单元4042适于:若第一查找单元4041在所第一管理文件中未查找到满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识,则在第二管理文件中查找是否存在满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识。

存储模块405适于:若第一查找单元4041在第一管理文件中查找到满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识,则将原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的第一存储文件的至少一个单位存储空间;若第二查找单元4042在第二管理文件中查找到满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识,则将原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的第二存储文件的至少一个单位存储空间。

存储位置获取模块406适于:获取原数据值在第一存储文件或第二存储文件中的存储位置。

如果存储模块405将原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的第一存储文件的至少一个单位存储空间,则存储位置获取模块406获取原数据值在第一存储文件中的存储位置;如果存储模块405将原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的第二存储文件的至少一个单位存储空间,则存储位置获取模块406获取原数据值在第二存储文件中的存储位置。

修改模块407适于:将至少一个标记为未占用状态的单位存储空间管理标识进行修改,修改后的单位存储空间管理标识被标记为已占用状态。

生成模块408适于:得到包含存储文件的标识、存储标记位、存储位置和数据长度的新数据值。

其中,确定模块403所确定的第一存储文件和第二存储文件具有相同的标识,此处的存储文件的标识即为第一存储文件和第二存储文件的标识。该新数据值除了包括存储文件的标识、存储位置和数据长度,还包括用于标记原数据值存储至第一存储文件或第二存储文件的存储标记位。利用该装置,能够将待存储的数据的原数据值转化为所占空间较小的新数据值。

写入模块409适于:根据数据的原数据键和新数据值,构建数据键值对形式的实例数据,将实例数据写入数据库中。

根据本发明实施例提供的流式数据存储装置,利用第一管理文件和第二管理文件有效地实现了对第一存储文件和第二存储文件的空间使用情况的管理;在系统内存中预先创建了分别与第一存储文件、第二存储文件、第一管理文件和第二管理文件相映射的内存块,因此可将读写文件操作通过读写内存完成,将较慢的磁盘读写转化为极快的内存读写,从而有效地提高了读写性能;能够将待存储的数据的原数据值转化为所占空间较小的新数据值,节省了存储空间,优化了存储方式,有助于提高数据处理效率,提升面临高并发流式数据时的吞吐量。

在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

本发明公开了:

A1、一种流式数据存储方法,包括:

获取待存储的数据以及所述数据的原数据值的数据长度,确定用于存储所述原数据值的存储文件以及用于管理所述存储文件的管理文件;其中,所述管理文件存储有多个单位存储空间管理标识,每个单位存储空间管理标识用于标记所述存储文件的对应的单位存储空间的已占用状态或未占用状态;

在所述管理文件中查找满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识,将所述原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的所述存储文件的至少一个单位存储空间,并获取所述原数据值在所述存储文件中的存储位置;

将所述至少一个标记为未占用状态的单位存储空间管理标识进行修改,修改后的单位存储空间管理标识被标记为已占用状态;

得到包含所述存储文件的标识、所述存储位置和所述数据长度的新数据值,根据所述数据的原数据键和新数据值,构建数据键值对形式的实例数据,将所述实例数据写入数据库中。

A2、根据A1所述的方法,所述确定用于存储所述原数据值的存储文件以及用于管理所述存储文件的管理文件进一步包括:

对所述数据的原数据键进行计算,得到原数据键对应的哈希值;

根据计算得到的哈希值,确定用于存储所述原数据值的存储文件以及用于管理所述存储文件的管理文件。

A3、根据A1所述的方法,在所述获取待存储的数据以及所述数据的原数据值的数据长度之前,所述方法还包括:

预先创建存储文件和管理文件,并在系统内存中预先创建分别与存储文件和管理文件相映射的内存块。

A4、根据A1所述的方法,所述存储文件包括:第一存储文件和与第一存储文件对应的第二存储文件;所述管理文件包括:第一管理文件和与第一管理文件对应的第二管理文件;

其中,所述第一存储文件和与第一存储文件对应的所述第二存储文件具有相同的标识;所述第一管理文件和与第一管理文件对应的所述第二管理文件具有相同的标识;所述第一管理文件用于管理所述第一存储文件;所述第二管理文件用于管理所述第二存储文件。

A5、根据A4所述的方法,所述在所述管理文件中查找满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识,将所述原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的所述存储文件的至少一个单位存储空间,并获取所述原数据值在所述存储文件中的存储位置进一步包括:

在所述第一管理文件中查找是否存在满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识;

若在所述第一管理文件中查找到满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识,则将所述原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的所述第一存储文件的至少一个单位存储空间,并获取所述原数据值在所述第一存储文件中的存储位置;

若在所述第一管理文件中未查找到满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识,则在所述第二管理文件中查找是否存在满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识;

若在所述第二管理文件中查找到满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识,则将所述原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的所述第二存储文件的至少一个单位存储空间,并获取所述原数据值在所述第二存储文件中的存储位置。

A6、根据A5所述的方法,所述新数据值还包括:用于标记所述原数据值存储至第一存储文件或第二存储文件的存储标记位。

A7、根据A1-A6任一项所述的方法,所述将所述原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的所述存储文件的至少一个单位存储空间进一步包括:

通过系统接口,以内存映射方式,将所述原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的所述存储文件的至少一个单位存储空间。

本发明还公开了:

B8、一种流式数据存储装置,包括:

数据获取模块,适于获取待存储的数据以及所述数据的原数据值的数据长度;

确定模块,适于确定用于存储所述原数据值的存储文件以及用于管理所述存储文件的管理文件;其中,所述管理文件存储有多个单位存储空间管理标识,每个单位存储空间管理标识用于标记所述存储文件的对应的单位存储空间的已占用状态或未占用状态;

查找模块,适于在所述管理文件中查找满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识;

存储模块,适于将所述原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的所述存储文件的至少一个单位存储空间;

存储位置获取模块,适于获取所述原数据值在所述存储文件中的存储位置;

修改模块,适于将所述至少一个标记为未占用状态的单位存储空间管理标识进行修改,修改后的单位存储空间管理标识被标记为已占用状态;

生成模块,适于得到包含所述存储文件的标识、所述存储位置和所述数据长度的新数据值;

写入模块,适于根据所述数据的原数据键和新数据值,构建数据键值对形式的实例数据,将所述实例数据写入数据库中。

B9、根据B8所述的装置,所述确定模块进一步适于:

对所述数据的原数据键进行计算,得到原数据键对应的哈希值;

根据计算得到的哈希值,确定用于存储所述原数据值的存储文件以及用于管理所述存储文件的管理文件。

B10、根据B8所述的装置,所述装置还包括:

创建模块,适于预先创建存储文件和管理文件,并在系统内存中预先创建分别与存储文件和管理文件相映射的内存块。

B11、根据B8所述的装置,所述存储文件包括:第一存储文件和与第一存储文件对应的第二存储文件;所述管理文件包括:第一管理文件和与第一管理文件对应的第二管理文件;

其中,所述第一存储文件和与第一存储文件对应的所述第二存储文件具有相同的标识;所述第一管理文件和与第一管理文件对应的所述第二管理文件具有相同的标识;所述第一管理文件用于管理所述第一存储文件;所述第二管理文件用于管理所述第二存储文件。

B12、根据B11所述的装置,所述查找模块包括:第一查找单元和第二查找单元;

所述第一查找单元适于:在所述第一管理文件中查找是否存在满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识;

所述第二查找单元适于:若所述第一查找单元在所述第一管理文件中未查找到满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识,则在所述第二管理文件中查找是否存在满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识;

所述存储模块进一步适于:若所述第一查找单元在所述第一管理文件中查找到满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识,则将所述原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的所述第一存储文件的至少一个单位存储空间;若所述第二查找单元在所述第二管理文件中查找到满足数据长度要求的连续的至少一个标记为未占用状态的单位存储空间管理标识,则将所述原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的所述第二存储文件的至少一个单位存储空间。

B13、根据B12所述的装置,所述新数据值还包括:用于标记所述原数据值存储至第一存储文件或第二存储文件的存储标记位。

B14、根据B8-B13任一项所述的装置,所述存储模块进一步适于:

通过系统接口,以内存映射方式,将所述原数据值存储至所查找到的至少一个标记为未占用状态的单位存储空间管理标识对应的所述存储文件的至少一个单位存储空间。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1