法律状态公告日
法律状态信息
法律状态
2022-11-29
未缴年费专利权终止 IPC(主分类):G06F12/0866 专利号:ZL2014106172514 申请日:20141105 授权公告日:20171229
专利权的终止
2022-07-08
文件的公告送达 IPC(主分类):G06F12/0866 专利号:ZL2014106172514 专利申请号:2014106172514 收件人:张寒秋 文件名称:专利权终止通知书
文件的公告送达
2018-01-05
专利权人的姓名或者名称、地址的变更 IPC(主分类):G06F12/0866 变更前: 变更后: 申请日:20141105
专利权人的姓名或者名称、地址的变更
2017-12-29
授权
授权
2017-12-19
著录事项变更 IPC(主分类):G06F12/0866 变更前: 变更后: 申请日:20141105
著录事项变更
2015-05-20
实质审查的生效 IPC(主分类):G06F12/06 申请日:20141105
实质审查的生效
2015-04-22
公开
公开
查看全部
技术领域
本发明涉及一种在单一计算机上高效存储海量小记录的存储管理方法,属于信息存储相关技术领域。
背景技术
随着互联网技术的发展,尤其是大数据时代的来临,信息化社会的诸多领域产生了海量的数据,并且呈爆炸式增长。海量存储的需求面临严峻考验,这使得数据存储管理技术在信息系统中所处地位也越来越重要。
在很多应用系统中,经常需要在单机环境下管理大规模的日志记录。比较典型的场景是安全审计记录。这种场景具有如下特点:
1)这种记录的单条记录通常比较小。比如在信息安全中的审计日志记录,平均每条记录仅有几百个字节;
2)数量巨大。通常单机需要管理的日志数量达到几十亿条甚至更多,存储容量达到TB级甚至更大;
3)效率要求高。对入库效率要求非常高,达到每秒钟上万条条甚至更多的记录。而这种环境下的计算机处理能力通常还比较弱。
4)数据操作简单。一般为数据顺序入库,需要支持支持随机读取。不需要支持中间插入操作,记录更新频率较低,不需要支持事务。
在这种环境下,使用传统关系型数据库系统无论是在数据存储规模,还是入库效率等方面都不能满足要求。而直接存储于文件系统又将导致大量磁盘碎片的产生。所以有必要开发一种单机环境下面向海量小记录的高效存储管理技术。
在现有的NoSQL的研究中,对于海量数据的存储采用多机分布式的分片管理技术,不适合本发明所针对的单机环境。
发明内容
本发明的主要目的在于针对现有存储方法无法满足单机环境中海量小记录存储管理的需求的问题,提出一种面向单机的海量小记录高效存储管理方法,使得能够在单一计算机上高效的接收并存储大规模的小记录。
为达到上述目的,本发明是通过以下技术方案实现的:
一种面向单机的海量小记录高效存储管理方法,该方法至少包括如下几项内容:
A.数据接收及缓存:接收小记录数据,为避免频繁I/O请求以及造成磁盘碎片,先将记录存储在内存缓冲区中;
B.自动分块:所述内存缓冲区无法容纳新记录时,将所述内存缓冲区中的数据写入到磁盘存储器中,并清空所述内存缓冲区以写入新的所述接收的新记录。为防止单个文件太大影响I/O性能,限制每个数据文件的大小阈值。如果当前分块文件大小超过所述阈值,自动新建分块文件,并将新数据将写入到新分块文件中;
C.树状目录生成:为防止当个目录下文件太多影响I/O性能,限制每个文件夹下面的文件总数,以简化的树管理算法实现文件夹和分块文件的树状组织;
D.记录标识:采用特殊标识直接记录每个记录的物理地址,方便记录的访问。
优选的:
所述内存缓冲区的大小可配置。
所述块文件动态生成过程包括以下步骤:
步骤1.如果没有当前分块文件cFile,由树状目录生成算法获取当前工作目录cPath,在cPath中生成分块文件,将该块文件作为当前块文件cFile,结束;
步骤2.如果cFile剩余空间足以写入所述内存缓冲区的数据,结束;
步骤3.如果当前目录cPath中块文件总数没有超过预定阈值,则在当前目录中生成分块文件,并将该块文件作为当前工作块文件cFile,结束;
步骤4.由树的树状目录生成算法生成新的存储目录,将新的存储目录作为当前目录cPath,在cPath中生成块文件,并将该块文件作为当前块文件cFile。
所述树状目录结构可以采用B-树、B+树或AVL树结构;树状目录结构的阶数,单个文件夹下的文件夹的数量、块文件的数量和大小均是可配置的。
所述的树状目录生成算法可以采用简化的B-树、B+树或AVL树生成算法。简化的算法充分利用数据顺序插入的特征,避免树的旋转操作。
所述每一条记录被添加一个标识,所述标识由分块文件编号以及块内偏移组成。根据所述的分块文件标识可以定位到分块文件路径,根据所述块内偏移可 以定位到记录在块文件内部的起始位置。从而由所述记录标识可以直接定位记录的物理地址,方便记录的随机访问。
有益效果
本发明提供的方法具有如下优势:
1)更高的性能。本发明提出了一种基于单机实现海量小记录的存储管理方法。利用操作系统的文件目录结构实现自动生长的树结构,在此树结构上实现动态的数据存储和维护,可以达到恒定的高写入速度,同时降低存储对硬件性能的要求。
2)更容易管理海量数据。通过自动分片和自动的目录管理,可以很方便的实现数据的备份、删除等管理。
3)更好的处理复杂数据类型的能力。本发明可以根据用户应用领域的不同,以实际需要为导向定制每条记录的字段,从而增强了本发明处理复杂数据类型的能力。
附图说明
图1是本发明实施例的树型存储结构示意图;
图2是本发明实施例的工作流程示意图;
图3是本发明实施例的数据缓冲区域示意图;
图4是本发明实施例的数据缓存流程图;
图5是本发明实施例的块文件生成流程图;
图6是本发明实施例的B-树树状目录生成示意图;
图7是本发明实施例的B+树树状目录生成示意图。
具体实施方式
下面详细描述中以实例的方式给出了许多具体细节,以确保对本发明技术方法的透彻理解。但是,对于知道本领域基本常识的人,能够理解没有这些具体细节,本发明的实施例也能实现。另外,没有详细描述众所周知的方法、过程、部件和电路,以避免本发明的实现变得不清楚。
本发明的基本思想是:将小记录首先写入内存缓冲区,当内存缓冲区满时将缓冲区内容写入到块文件中;块文件被分散到自动生成的树状文件目录结构 中。
如图2所示,本发明具体工作流程如下:
1、接收用户提交的新记录;
2、生成记录标识,采用特殊标识直接记录每个记录的物理地址,方便记录的访问;
3、如果内存缓冲区已满,转到4;否则将新记录存入内存缓冲区,转到1;
4、如果当前分块文件已满,转5;否则将内存缓冲区追加到当前分块文件,转1;
5、如果当前目录已满,创建新的目录,并将新目录作为当前工作目录,在当前工作目录中创建新分块文件并将该文件作为当前分块文件,并将内存缓冲区追加到当前分块文件,转1。
实施例一:
本实施例为本发明中数据结构、参数等相关约定说明。
不失一般性,图1为B-树存储结构示意图。在设备磁盘某目录/Root/…下创建日志存储目录/data,/data文件夹相当于B-树的根节点,cFile为当前待写入数据的块文件,cFile所在的目录为当前工作目录cPath。
本发明采用自动分块的思想,将多个小记录连接成块文件的形式存储到磁盘中。本发明所述块文件指的是保存到磁盘存储器中的文件。本发明定义B-树的阶为M,也就是节点上单个文件夹下的最大文件夹数为M,最大文件数为M。定义单个分块文件的最大大小为fSize。记录在块文件中是顺序存储的,块文件在文件目录中也是顺序创建的,并为每个块文件分配一个全局唯一的ID号BID。
为实现记录的快速定位,可以为每一条记录赋予一个记录编号RID。该RID由BID和数据记录在块文件的偏移组成。如表1所示为数据记录定位结构信息,内容如下:
表1数据记录定位结构信息表
BID:记录所在的文件块的ID,可以根据该ID计算出其在磁盘中的文件路 径PATH;
OFFSET:记录在块文件中的偏移。
入库过程中,块文件大小要满足约定条件,单个文件夹下的块文件数也要满足约定条件。B-树是按依次递增的顺序创建的,块文件也是按照递增顺序依次建立,所以块文件的BID也是递增的。所以根据块文件的BID可快速计算块文件的真实路径。根据记录的RID可以计算出记录在磁盘中的物理地址,实现快速的记录存取。
实施例二:
本实施例为数据缓存机制的实现方式,如图3所示。由于接收到的数据记录速度很快,且记录比较小。如果每次接收到一条记录就立刻做写盘操作,将会造成磁盘I/O读写过于频繁,寻道时间过长,进而导致存储效率低下。为了避免频繁的写盘操作,本发明引入了数据缓存的机制。接收到的新记录不直接入库,而是先存入缓存区域中,只有在缓存空间满的情况下,才执行写盘操作。这种方式可以尽可能的减少磁盘写入次数,提高入库效率。
数据缓存机制中,本发明选择在内存中事先分配一块内存区作为数据缓存区,缓存区域大小可配置。如图3所示为内存缓存区,其中包括两个指针pBuffer、pBuffered,分别指向了缓存区已有数据记录的初始地址和末地址。
若缓存区域空闲区域大小足够存下新记录,即图3中302所指区域,则直接将记录插入到301区域尾部,进而尾指针后移;否则,要腾空缓存区,然后再插入新记录。
实施例三:
本实施例为数据缓存阶段流程,如图4所示,包括以下步骤:
步骤401:接收新记录;
步骤402:对新记录生成记录标识;
步骤403:判断内存缓冲区域是否已满,即其已用大小加上新记录大小是否超过所设置内存缓冲区最大值,如果未满转步骤405,否则转步骤404;
步骤404:获取当前块文件cFile,将内存缓存区域的数据写入当前块文件中,清空内存缓存区域,设置指针buffered的值为null;
步骤405:将记录暂存到内存缓冲区域中,调整指针buffered使其指向内存缓冲区域中数据记录的结束地址。
实施例四:
文件目录结构以及块文件的组织要合理,单个文件夹下文件的数量不能太大,单个文件的大小也不可以太大,否则记录入库的性能会下降。本实施例为块文件生成流程,如图5所示。包括以下步骤:
步骤501:读取内存缓冲区域中的数据;
步骤502:如果没有当前工作块文件cFile,由树的目录生成算法获取当前工作目录cPath,在cPath中生成块文件,将该块文件作为当前工作块文件cFile;
步骤503:判断当前工作块文件是否已满,即其大小加上内存缓冲区的数据长度是否超过阈值fSize。如果已满转步骤504,否则转步骤507;
步骤504:判断工作节点cPath下的块文件数是否达到阈值M,如果已达到M,转步骤505,否则转步骤506;
步骤505:依据树形目录结构定义生成新的目录,并将该目录作为新的工作目录cPath;
步骤506:在工作目录cPath下创建新的块文件,并将其作为当前工作块文件cFile;
步骤507:将内存缓冲区中的数据追加到当前工作块文件cFile的尾部;
实施例五:
本实施例为树状目录生成流程,根据本实施例,实现文件目录生成的数据结构可以是B-树,也可以是B+树以及其它公知的具有排序功能的树结构,如AVL。
下面以B-和B+树为例介绍目录结构的生成过程,其他数据结构以此类推。
B-树的生成过程是自上而下的,所有B-树节点下都存有块文件,中间节点同时存储了文件夹和块文件。基于B-树的目录生成流程如图6所示。包括以下步骤:
步骤601:在树为空时,在指定目录下创建日志存储目录/data,并以/data 文件夹作为B-树的根节点,将根节点记为当前目录cPath,即当前目录,结束;
步骤602:如果当前树满,转603。否则在当前树的叶子节点层从左到右的依次建立新的叶子节点。并将新节点标记为当前目录cPath,结束;
步骤603:在当前树的最左边的叶子节点下面建立新的叶子节点,并将新的节点标记为当前目录cPath,结束。此时树的层数增加。
如此生成存储目录结构,直到将磁盘空间填满。
B+树的生成过程是自下而上的,且块文件仅存储在B+树的叶节点上。基于B+树的目录生成流程,如图7所示。包括以下步骤:
步骤701:在树为空时,在指定目录下创建日志存储目录/data,并在/data目录下建立根节点R,将根节点R记为工作节点cPath,即当前目录,结束;
步骤702:如果当前树满,转703。否则在当前树的叶子节点层从左到右的依次建立新的叶子节点。并将新节点标记为当前目录cPath,结束;
步骤703:为树建立一个新的根节点R,并将原树作为左子树附加到R上,转步骤702。此时树的层数增加。
如此生成存储目录结构,直到将磁盘空间填满。
实施例六:
本实施例为本发明中怎样实现记录的快速定位。
本发明中对每一条新记录都生成一个标识,采用了特殊的标识直接记录记录的物理地址。
如实施例一所述,每一个记录都有一个编号RID,记录编号RID由表1所示定位结构中块编号BID和块内偏移OFFSET两部分组成,且该RID具有全局唯一性。
假设我们以整数为文件夹和块文件命名,即命名为0,1,2,3的方式。以实施例五中的B-树为例,已知BID为bid,则路径生成算法为:
算法GenPath:根据输入的bid生成块文件的路径。
根据以上算法,假设M=3,bid=7,则分块文件的相对路径为1/1。若bid=12,则分块文件的相对路径为0/0/0。
实施例七:
本实施例为本技术方案实现的实施例及其性能。
以下是本发明方法在工控机上的一个实现,工控机主要参数为:
CPU:I3,2.7GHZ;
内存:4G;
硬盘:企业级1TB,7200转;
操作系统:LINUX系统。
在磁盘根目录下建立/data目录作为存储系统的根目录,并采用单进程方式进行入库操作。
实际测试入库性能约为22.8万条/s,流量约100MB/s。而且随着入库记录数量的不断增长,入库速度不会随着记录量的增加而变慢。
以上详细介绍了本发明实施例所提供的一种面向单机环境的海量小记录高效存储管理方法。其有助于帮助理解本发明的核心思想及其技术细节。在所附的权利要求范围内,具有该领域常识的技术人员会发现本说明书内容不应理解 为用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护范围之内。
机译: 均匀薄,高效的大面积照明面板,具有两个间隔开的小槽,这些小槽的光源面向小面的坡度比背向光源的小面小
机译: 海量数据存储和检索系统,数据检索记录系统和海量数据存储库系统
机译: 访问控制装置具有提供给海量数据存储器的海量数据存储接口,该接口被操作员移除,并且处理单元在操作条件下通过该接口从海量数据存储器读取访问授权数据