本发明专利技术公开了一种大数据量记录的存储方法,将每个关键字对应的最后一条记录的地址存储在Hash桶;记录当前文件的长度为key_off1;采用Hash函数计算待存储记录中KEY数据的关键字;根据关键字检索Hash桶,获得关键字的最后一条记录的地址key_off2;将待存储记录中的KEY数据信息、VALUE数据信息、最后一条记录的地址key_off2构造成一个数据块,添加到当前文件的尾部;更新关键字对应的Hash桶的值为key_off1。采用了本发明专利技术的技术方案,在处理简单的、大数据量的记录存储和访问时,能够保持稳定的高速度存储数据。
【技术实现步骤摘要】
本专利技术涉及计算机
,尤其涉及一种大数据量记录的存储方法。
技术介绍
在设计UNIX/LINUX平台下的应用软件时,如果数据种类繁多,数据与数据之间关系比较复杂,就会选用一些大型的企业级数据库系统,如DB2,ORACLE、SYBASE等,如果软件规模不大,就倾向选用如MYSQL、POSTGRESQL等中小型数据库。但是在企业级应用开发中,如果涉及到重要的数据存储,一般都会选择更为严格的企业级数据库系统,MYSQL、POSTGRESQL一般都不予考虑。企业级的数据库系统在提供了丰富的关系型数据库功能的同时,必然在数据操作和访问的性能方面带来一些损耗。一般来说,企业级关系型数据库一般都是通过Client-Server的方式提交SQL语句来操作数据。在这个过程中,SQL语句解析的消耗和通讯的开销对性能的影响不可小视。当应用软件管理的数据类型较少,不需要Client-Server访问数据,并且查询条件单一、对数据操作要求高效率时,业界常用的是Berkeley DB,Berkeley DB中的每一个记录由数据标识和数据实体(即KEY数据/VALUE数据)构成。数据可以是简单的数据类型,也可以是复杂的数据类型,例如C语言中结构。Berkeley DB提供了一系列应用程序接口(API)来操作数据,应用程序和DB所提供的库在一起编译成为可执行程序。这种方式从两方面极大提高了效率。第一,DB库和应用程序运行在同一个地址空间,没有客户端程序和数据库服务器之间昂贵的网络通讯开销,也没有本地主机进程之间的通讯;第-->二,不需要对SQL代码解码,对数据的访问直截了当。虽然Berkeley DB能够方便的存储数据,但是随着数据量的加大,其索引的构建过程会随着数据量的加大而越来越慢,从而影响到数据添加的速度。当数据量达到一定程度的情况下,数据添加的速度根本无法满足生产的要求。
技术实现思路
本专利技术的目的在于提出一种大数据量记录的存储方法,在处理简单的、大数据量的记录存储和访问时,能够保持稳定地高速度存储数据。为达此目的,本专利技术采用以下技术方案:一种大数据量记录的存储方法,包括以下步骤:A、将每个关键字对应的最后一条记录的地址存储在Hash桶;B、记录当前文件的长度为key_off1;C、采用Hash函数计算待存储记录中KEY数据的关键字;D、根据所述关键字检索Hash桶,获得所述关键字的最后一条记录的地址key_off2;E、将所述待存储记录中的KEY数据信息、VALUE数据信息、所述最后一条记录的地址key_off2构造成一个数据块,添加到所述当前文件的尾部;F、更新所述关键字对应的Hash桶的值为key_off1。步骤E中,所述KEY数据信息包括所述KEY数据长度、所述KEY数据内容。步骤E中,所述VALUE数据信息包括所述VALUE数据长度、所述VALUE数据内容。步骤E中,所述数据块还包括记录类型。所述Hash桶的值通过MMAP映射到内存。采用了本专利技术的技术方案,这种新的索引构建方式使得无论数据量多大,-->数据库每次添加记录的开销从理论上来说是一致的,从而能够保证数据在存储的过程中,既构建索引,又能始终保持稳定的高速度。附图说明图1是本专利技术具体实施方式中数据库添加记录的流程图。具体实施方式下面结合附图并通过具体实施方式来进一步说明本专利技术的技术方案。在生产环境下,经常会有大数据量的记录需要存储,并且需要以某个简单的条件进行快速查询,所以对记录的某个部分需要建立索引,为此,设计了一个基于Hash索引的存储方案,下称Hulk DB。Hulk DB主要适应于简单、大数据量的记录存储和访问。Hulk DB对需要管理的记录看法很简单。数据库包含若干条记录,每一个记录由数据标识和数据实体(即KEY数据/VALUE数据)构成。数据可以是简单的数据类型,也可以是复杂的数据类型,例如C语言中的结构。Hulk DB对数据类型不做任何解释,完全由程序员自行处理。同时,由于Hulk DB不提供SQL查询,应用于对数据存储和访问性能要求比较高,查询相对简单的场合。Hulk DB采用Hash算法来构建索引。众所周之,在构造Hash函数时,要尽量使函数值分布均匀以减少冲突的发生,但是事实上冲突是不可避免的,所以在构造Hash函数的同时,必须考虑处理冲突的方法。Hulk DB采用链地址法来处理冲突,即将所有关键字相同的记录链接成一条反向的单向线性链表,每个数据块中保留的是相同关键字的上一个数据块的地址,并把链尾的地址放在Hash桶里面。这种解决冲突的方法,充分考虑到了在磁盘上存储数据的特点,有效地降低了磁盘操作的数量。同时,这种方式使得添加数据的IO操作是固定的,不会因为数据量的增加而增加IO操作,从-->而影响效率。Hulk DB把存放记录的地方叫做数据块,每一个数据块存放一条记录,每条记录都由一个KEY数据和一个VALUE数据组成。KEY数据和VALUE数据可以是简单的数据类型,也可以是复杂的数据类型,例如C语言中结构。Hulk DB对数据类型不做任何解释,完全由程序员自行处理。数据块结构如表1所示:表1 字段名称数据类型长度(byte)说明key_lenint4KEY数据的长度val_lenint4VALUE数据的长度data_tagint4记录类型,1表不有效数据,0表不已经删除的数据prev_offoff_t8Hash后的关键字相同的上一条记录的地址keyvoid变长KEY数据,是一个变长的空间,数据类型不定,长度由key_len决定valuevoid变长VALUE数据,是一个变长的空间,数据类型不定,长度由val_len决定Hulk DB采用单个文件来存储数据,在实际生成中,可以按照特定的条件(如日期等)对数据进行多文件存储,这个过程由应用决定。数据文件分三个部分:1、文件头(Header),文件头记录了该数据文件使用的Hash桶的大小;2、Hash桶,以数组方式存在,记录了数据块链尾数据的地址;3、数据块,顺序存储,在文件尾追加记录。下面具体介绍如何添加记录。图1是本专利技术具体实施方式中数据库添加记录的流程图。如图1所示,数据块添加记录的流程包括以下步骤:-->步骤101、将每个关键字对应的最后一条记录的地址存储在Hash桶;步骤102、记录当前文件的长度为key_off1;步骤103、采用Hash函数计算待存储记录中KEY数据的关键字;步骤104、根据待存储记录中KEY数据的关键字去检索Hash桶,获得该关键字的最后一条记录的地址key_off2;步骤105、将待存储记录中的KEY数据长度和数据内容信息、VALUE数据长度和数据内容信息、记录类型和最后一条记录的地址key_off2构造成一个数据块,添加到当前文件的尾部;步骤106、将该关键字对应的Hash桶的值更新为key_off1。Hulk DB在处理Hash桶的过程中,使用了MMAP文件映射内存的技术,即将Hash桶的值全部用MMAP技术映射到内存。这是因为,首先Hash桶相对而言不是很大,8个字节一个单元,一个100万容量的Hash桶只占用不到8M的空间;其次通过MMAP之后减少了IO的操作,提高了数据操作的性能。从上面的流程分析,如果不使用MMAP文件映射内本文档来自技高网...
【技术保护点】
一种大数据量记录的存储方法,其特征在于,包括以下步骤: A、将每个关键字对应的最后一条记录的地址存储在Hash桶; B、记录当前文件的长度为key_off1; C、采用Hash函数计算待存储记录中KEY数据的关键字; D、根据所述关键字检索Hash桶,获得所述关键字的最后一条记录的地址key_off2; E、将所述待存储记录中的KEY数据信息、VALUE数据信息、所述最后一条记录的地址key_off2构造成一个数据块,添加到所述当前文件的尾部; F、更新所述关键字对应的Hash桶的值为key_off1。
【技术特征摘要】
1、一种大数据量记录的存储方法,其特征在于,包括以下步骤:A、将每个关键字对应的最后一条记录的地址存储在Hash桶;B、记录当前文件的长度为key_off1;C、采用Hash函数计算待存储记录中KEY数据的关键字;D、根据所述关键字检索Hash桶,获得所述关键字的最后一条记录的地址key_off2;E、将所述待存储记录中的KEY数据信息、VALUE数据信息、所述最后一条记录的地址key_off2构造成一个数据块,添加到所述当前文件的尾部;F、更新所述关键字对应的Hash桶的值为key_of...
【专利技术属性】
技术研发人员:姜涛,辛宇,
申请(专利权)人:天柏宽带网络科技北京有限公司,
类型:发明
国别省市:11[中国|北京]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。