CN110413407B - 一种大流量环境下还原文件的存储及快速索引方法 - Google Patents

一种大流量环境下还原文件的存储及快速索引方法 Download PDF

Info

Publication number
CN110413407B
CN110413407B CN201910568821.8A CN201910568821A CN110413407B CN 110413407 B CN110413407 B CN 110413407B CN 201910568821 A CN201910568821 A CN 201910568821A CN 110413407 B CN110413407 B CN 110413407B
Authority
CN
China
Prior art keywords
sub
file
main
memory space
emlstorage
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.)
Active
Application number
CN201910568821.8A
Other languages
English (en)
Other versions
CN110413407A (zh
Inventor
孙歆
李沁园
孙昌华
戴桦
韩嘉佳
吕磅
李霁远
汪自翔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
State Grid Zhejiang Electric Power Co Ltd
Electric Power Research Institute of State Grid Zhejiang Electric Power Co Ltd
Original Assignee
State Grid Zhejiang Electric Power Co Ltd
Electric Power Research Institute of State Grid Zhejiang Electric Power Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by State Grid Zhejiang Electric Power Co Ltd, Electric Power Research Institute of State Grid Zhejiang Electric Power Co Ltd filed Critical State Grid Zhejiang Electric Power Co Ltd
Priority to CN201910568821.8A priority Critical patent/CN110413407B/zh
Publication of CN110413407A publication Critical patent/CN110413407A/zh
Application granted granted Critical
Publication of CN110413407B publication Critical patent/CN110413407B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/13File access structures, e.g. distributed indices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种大流量环境下还原文件的存储及快速索引方法。本发明采用的技术方案为:基于网络流量捕获模块提取文件内容帧数据的存储过程;进行存储过程时设置特殊的存储结构和格式;所述文件内容帧数据的存储过程包括:预置一块内存空间用来存储所有文件,预置一张主表结构,主表动态绑定子表索引,子表动态绑定文件ID和文件内容帧数据索引,其中文件内容帧数据索引为预置内存空间存放帧数据时的首地址;所述进行存储过程时设置特殊的存储结构和格式包括:主表格式设计、子表格式设计和内存空间格式设计。本发明解决了传统APT检测产品,在大流量环境中还原文件时内存消耗大和碎片问题。

Description

一种大流量环境下还原文件的存储及快速索引方法
技术领域
本发明涉及文件处理领域,具体地说是一种对于高级持续性威胁(APT)攻击检测系统在还原文件时,对文件内存存储和快速索引的方法。
背景技术
高级持续性威胁(APT)攻击检测系统用于检测和防御APT(Advanced PersistentThreat)高级持续性威胁攻击和行为,通常该系统部署在关键网络入口处,通过实时捕获网络报文数据流量,分析流量行为,还原流量中的文件,并检测文件是否存在恶意行为。由于关键网络入口处的网络流量普遍较大,流量中的文件普遍较多,进行文件还原操作时,网络流量数据包收发存在时间间隔,还原文件时普遍用内存作为临时存储区域。
一般系统在还原文件时,每个TCP会话会预置或分配内存作为文件临时存储区域,内存消耗较大,内存碎片较严重。例如,一般系统在关键网路入口处TCP协议及上层应用协议传输文件的流较多时,系统会为每条流会话预置存储文件的内存空间,由于文件的大小不一,则会造成预置内存空间的浪费,同时存在还原文件操作较多时,内存碎片随着系统运行时间累积日趋严重,不利于内存空间的合理利用。
发明内容
本发明所要解决的技术问题是克服上述现有技术存在的缺陷,提供一种大流量环境下还原文件的存储及快速索引方法,其能够在网络流量较大的情况下,使还原文件占用较小的内存空间,减少内存碎片化,以满足快速文件索引,准确定位文件及内容。
为实现上述目的,本发明采用如下的技术方案:一种大流量环境下还原文件的存储及快速索引方法,其基于网络流量捕获模块提取文件内容帧数据的存储过程;进行存储过程时设置特殊的存储结构和格式;
所述文件内容帧数据的存储过程包括:预置一块内存空间用来存储所有文件,预置一张主表结构,主表动态绑定子表索引,子表动态绑定文件ID和文件内容帧数据索引,其中文件内容帧数据索引为预置内存空间存放帧数据时的首地址;
所述进行存储过程时设置特殊的存储结构和格式包括:主表格式设计、子表格式设计和内存空间格式设计。
进一步的,在外部模块获取整个文件内容时快速索引文件和文件内容;所述的快速索引文件和文件内容指通过主表、子表和内存空间,从中快速获取完整文件。本发明进行存储文件过程的对应模块是"文件存储模块",此模块会提供一个接口,接口功能是文件读取(从存储空间中还原文件,也就是本发明提到的快速索引文件)。外部模块指调用这个接口的其他模块(在APT检测系统中是指分析检测文件的模块)。
进一步的,所述的主表结构包含每个子表地址索引,一张主表存放N个子表地址,占用空间4*N字节。
进一步的,所述子表中每个文件对应一个4字节的FileID和一个4字节的LinkHead,共8字节;LinkHead结构为内存空间中每帧文件报文地址索引。
进一步的,所述内存空间中数据为每帧文件报文数据,每帧文件报文中包括下一跳帧数据地址索引NEXT,FileID,文件内容长度Len,文件内容Data。
进一步的,所述的FileID表示每个文件的ID值,从1开始累增,每个文件值唯一;通过FileID计算,获得2个变量sub_id和sub_offset,计算方法如下:
sub_id=FileID/emlsconf.sub_elem_num,
sub_offset=FileID%emlsconf.sub_elem_num。
进一步的,上述大流量环境下还原文件的存储及快速索引方法包括初始化阶段、Open文件阶段、还原文件时Write存入帧数据、老化处理阶段和快速索引Read文件内容阶段。
进一步的,初始化阶段为程序初始化阶段,主要为读取配置文件,分配必要空间,在程序整个生命周期只执行一次,过程如下:
步骤一,读取预置配置文件,该配置文件按本机内存大小在程序启动前配置,包括:
1)主表中包含的子表个数;
2)每个子表包含的文件个数;
3)内存空间的大小;
4)cache区大小;
将配置文件上述4项字段,读入结构emlsconf中;
步骤二,创建主表,为主表分配空间,空间大小为emlsconf.main_elem_num*emlstorage_main_table结构长度;其中emlstorage_main_table结构为主表中每项数据的结构;创建成功后将主表的首地址存入emlsconf.mainptr;
步骤三,创建子表前需做预处理操作,来检查主表emlsconf.mainptr中空闲位置,并返回index作为空闲位置的编号;
步骤四,创建子表,为子表分配空间,大小为emlsconf.sub_elem_num*emlstorage_sub_table结构长度;其中emlstorage_sub_table结构为子表中每项数据的结构;
步骤五,创建内存空间,大小为emlsconf.mem_len,创建成功后,内存空间首地址存入emlsfd.fd中;
步骤六,创建cache区,用于大块读取和写入缓存;另外,内存驱动普遍按页进行读写,emlsconf.max_eml_cache_len为页的整数倍;
步骤七,g_emlstorage_fileid初始化为0,g_emlstorage_fileid表示可存入的文件的id号,从0开始自增,最大为emlsconf.main_elem_num*emlsconf.sub_elem_num,若到达最大id后,从0开始。
更进一步的,步骤三中,检查方法为按结构emlstorage_main_table轮训主表,找到一个空块,每查找一次,index从0开始累加1。
更进一步的,步骤四中,在创建子表成功后,将子表首地址存入主表index位置,同时,emlsconf.max_sub_id自增1,其中emlsconf.max_sub_id表示目前主表中存在的子表最大个数。
本发明具有的有益效果是:本发明解决了传统APT检测产品,在大流量环境中还原文件时内存消耗大和碎片问题。本发明通过对内存空间重新设计,维护管理内存分配,从而达到高效紧密存储,快速索引文件的效果,可广泛应用于APT检测产品中。
附图说明
下面结合说明书附图和具体实施方式对本发明作进一步说明。
图1为本发明具体实施方式中主表结构图。图片概述:主表中包含每个子表地址索引,主表大小可配置,子表地址索引为4字节,即主表大小需4字节对齐。一张主表可存放N个子表地址,占用空间4*N字节。
图2为本发明具体实施方式中子表结构图。图片概述:子表可以有多个,子表的个数由主表大小决定;子表的大小可配置,单个子表越大存放的FileID越多,子表大小需按8字节对齐。每个子表地址索引存在主表中。子表中每个文件对应一个FileID(4字节)和一个LinkHead(4字节),共8字节。FileID结构见图4说明;LinkHead结构为内存空间中每帧文件报文地址索引。
图3为本发明具体实施方式中内存空间结构图。图片概述:内存空间大小可配置。内存空间中数据为每帧文件报文数据,每帧文件报文中包扩下一跳帧数据地址索引NEXT,FileID,文件内容长度Len,文件内容Data。
图4为本发明具体实施方式中FileID结构图。图片概述:FileID表示每个文件的ID值,从1开始累增,每个文件值唯一。通过FileID计算,可获得2个变量sub_id和sub_offset,计算方法如下:
sub_id=FileID/emlsconf.sub_elem_num,
sub_offset=FileID%emlsconf.sub_elem_num。
图5为本发明具体实施方式中主表、子表、内存空间关系图。
图6为本发明具体实施方式中初始化操作流程图。
图7为本发明具体实施方式中Open文件流程图。
图8为本发明具体实施方式中还原文件时Write存入帧数据流程图。
图9为本发明具体实施方式中检测并回收文件内存节点流程图。
图10为本发明具体实施方式中快速索引Read文件内容流程图。
具体实施方式
本实施例提供一种大流量环境下还原文件的存储及快速索引方法,主要为五个阶段:初始化阶段、Open文件阶段、还原文件时Write存入帧数据、老化处理阶段、快速索引Read文件内容阶段。各阶段如下分开叙述:
A.初始化阶段(如图6)
初始化阶段为程序初始化阶段,主要为读取配置文件,分配必要空间,在程序整个生命周期只执行一次,过程如下:
步骤一,读取预置配置文件,该配置文件可按本机内存大小在程序启动前配置。主要包括下面几项:
1)主表中可包含的子表个数;
2)每个子表可包含的文件个数;
3)内存空间的大小;
4)cache区大小,cache主要用于避免帧过小而造成内存浪费的问题。
进一步的,将配置文件上述4项字段,读入结构emlsconf中,结构体如下:
Figure BDA0002110385410000061
步骤二,创建主表,为主表分配空间,空间大小为emlsconf.main_elem_num*emlstorage_main_table结构长度。其中emlstorage_main_table结构为主表中每项数据的结构,具体结构如下:
Figure BDA0002110385410000062
进一步的,创建成功后将主表的首地址存入emlsconf.mainptr。
步骤三,创建子表前需做预处理操作,来检查主表emlsconf.mainptr中空闲位置,并返回index作为空闲位置的编号。检查方法为按结构emlstorage_main_table轮训主表,找到一个空块,每查找一次,index从0开始累加1。
步骤四,创建子表,为子表分配空间,大小为emlsconf.sub_elem_num*emlstorage_sub_table结构长度。其中emlstorage_sub_table结构为子表中每项数据的结构,具体结构如下:
Figure BDA0002110385410000071
进一步的,在创建子表成功后,将子表首地址存入主表index位置,同时,emlsconf.max_sub_id自增1。其中emlsconf.max_sub_id表示目前主表中存在的子表最大个数。
步骤五,创建内存空间,大小为emlsconf.mem_len,创建成功后,内存空间首地址存入emlsfd.fd中。其中emlsfd结构如下:
Figure BDA0002110385410000072
进一步的,内存空间前8字节保留,设置wseek为8,设置cseek为8。
步骤六,创建cache区,用于大块读取和写入缓存,避免少量字节不合理而造成内存浪费问题。比如在没有cache的情况下,文件内容帧数据为1字节,头部需占10字节,内存空间保存数据为11字节,若流量中此种数据较多,则头字节耗费大量的空间,这样是不合理的。所以增加cache区,当达到一定数据量后,在大块写入内存中,内存空间消耗少,同时效率最高。另外内存驱动普遍按页进行读写,emlsconf.max_eml_cache_len为页的整数倍。
进一步的,创建cache区成功后,将其地址存入g_emlcache_buf。
步骤七,g_emlstorage_fileid初始化为0,g_emlstorage_fileid表示可存入的文件的id号,从0开始自增。最大为emlsconf.main_elem_num*emlsconf.sub_elem_num。若到达最大id后,从0开始。
B.Open文件阶段(如图7)
Open文件操作为获取文件名后,预备存入操作,初始化相关表,操作如下:
步骤一,g_emlstorage_fileid累加1,表示下一个文件ID。
步骤二,判断g_emlstorage_fileid是否大于最大可用文件ID,即是否大于最大emlsconf.main_elem_num*emlsconf.sub_elem_num。如果大于则执行步骤三,表示已达到最大支持的文件个数,需重新跳转会第一个文件处,并清理过期无用文件,这里清理操作也就是老化机制;否则,执行步骤五。
步骤三,重置g_emlstorage_fileid为1。
步骤四,重置emlsfd.fd,重置emlsfd.wseek为8,重置emlsfd.cseek为8。
步骤五,由g_emlstorage_fileid计算出sub_id和sub_offset。其中sub_id表示文件所在的子表索引;sub_offset表示文件所在内存索引。计算公式为:sub_id=g_emlstorage_fileid/emlsconf.sub_elem_num,sub_offset=g_emlstorage_fileid%emlsconf.sub_elem_num。
步骤六,判断sub_id是否大于emlsconf.max_sub_id,即文件所在的子表索引是否大于目前最大的子表索引。如果大于,则执行步骤七,表示需要目前子表不足,需要创建新的子表;否则,执行步骤九。
步骤七,(与A.步骤三相同)创建子表前需做预处理操作,来检查主表emlsconf.mainptr中空闲位置,并返回index作为空闲位置的编号。检查方法为按结构emlstorage_main_table轮训主表,找到一个空块,每查找一次,index从0开始累加1。
步骤八,(与A.步骤四相同)创建子表,为子表分配空间,大小为emlsconf.sub_elem_num*emlstorage_sub_table结构长度。其中emlstorage_sub_table结构为子表中每项数据的结构。
步骤九,得到主表节点pmain_node和子表节点psub_node。其中pmain_node是结构体emlstorage_main_table的对象指针;psub_node是结构体emlstorage_sub_table的对象指针。计算公式如下:
Pmain_node=emlsconf.mainptr+sub_id;
psub_node=pmain_node->sub_addr+sub_offset。
步骤十,初始化psub_node为空。
进一步的,将g_emlstorage_fileid值写入psub_node->fileid做保存
C.还原文件时Write存入帧数据(如图8)
步骤一,网络流量捕获模块将提取文件内容帧数据和数据长度作为参数传入Write方法中。
进一步的,开始执行Write方法。
步骤二,由g_emlstorage_fileid计算得到sub_id和sub_offset。
步骤三,检测sub_id(当前文件内容所在的子表ID)是否大于emlsconf.max_sub_id(当前最大子表ID),若大于,则执行异常处理,结束流程;否则执行步骤四。
步骤四,通过计算公式emlsconf.mainptr+sub_id得到pmain_node,其中pmain_node表示当前sub_id在主表中的实际地址。检测pmain_node若为0则执行异常处理,结束流程;否则执行步骤五。
步骤五,通过计算公式pmain_node->sub_addr+sub_offset得到psub_node,其中psub_node表示表示当前sub_offset在子表的实际地址。检测psub_node若为0则执行异常处理,结束流程;否则执行步骤六。
步骤六,检测psub_node->fileid(Open操作时保存)和g_emlstorage_fileid(每个有文件的session值唯一)是否相等,表示检测当前准备Write操作和之前Open/Write操作,是否为同一个session。若相等,则执行步骤七;否则,执行异常处理,结束流程。
步骤七,执行预置方法“检测并回收文件内存节点方法即老化处理方法”,在后面说明。
步骤八,检测psub_node->linkhead是否等于0,即检测是否为第一次写入。若相等,则执行步骤九;若不相等,则执行步骤十。
步骤九,这里表示第一次Write操作,将初始化指针psub_node->linkhead=psub_node->linktail=emlsfd.wseek,即linkhead和linktail都设置为emlsfd.wseek内存当前位置。
进一步的,执行步骤十一。
步骤十,这里表示不是第一次Write操作,将emlsfd.wseek值保存在Psub_node->linktail中,说明:这里为了后面代码统一,临时保存,后面在写入内容数据后,linktail将会被再次更新。
步骤十一,将g_emlcache_buf地址赋予plinknew指针,其中g_emlcache_buf为全局临时缓存,程序预留的一块缓冲空间;其中plinknew为emlstorage_jmplink_table结构指针。
进一步的,设置plinknew->slen为len(传入参数);设置plinknew->identify_id为g_emlstorage_fileid;
进一步的,拷贝data(传入参数)到plinknew+linksize,其中linksize为sizeof(emlstorage_jmplink_table)结构的长度,即将data拷贝到plinknew结构的末尾处。
步骤十二,将plinknew写入内存空间emlsfd.wseek处,emlsfd.wseek累加,长度为Write数据的长度,即emlsfd.wseek=emlsfd.wseek+lenWrite方法结束。
D.检测并回收文件内存节点流程,即老化处理流程(图9)
步骤一,计算remainLen=pemlsfd->cseek-pemlsfd->wseek,其中pemlsfd->cseek文件末尾预算的长度,在写入前计算,用于老化处理操作,情况后方帧数据。其中pemlsfd->wseek为当前文件Write后的末尾地址。
进一步的,将len备份到bakLen中,其中len为传入参数,需要Write的文件帧长度。
进一步的,初始化recycleLen为0。
步骤二,需要Write入的数据=数据头emlstorage_jmplink_table结构+data。计算len=数据头长度+len。
步骤三,检测len<=remainLen,即Write需要的空间是否充足,若充足则结束老化流程;否则执行步骤四。
步骤四,计算len-=remainLen,即获取len为还需要的空间大小,表示此时空间与下一跳数据帧冲突,需要做老化清理了。
步骤五,检测recycleLen<len,其中recycleLen为已经回收的空间大小,从0开始,每下一跳帧数据,则累增。若不成立,则表示清理完成,结束老化流程;否则,执行步骤六。
步骤六,获取tmp临时对象指针,指向当前文件末尾pemlsfd->cseek,即下一跳文件帧结构。其中tmp为结构体emlstorage_jmplink_table指针。
步骤七,检测Tmp.identify_id等于0,若为真,表示刚开始使用后方数据,则执行pemlsfd->cseek+=(len-recycleLen),表示数据充足,结束老化流程;否则,执行步骤八。
步骤八,计算sub_id=tmp.identify_id/conf->sub_elem_num;计算sub_offset=tmp.identify_id%conf->sub_elem_num。
步骤九,检测sub_id>Conf->max_sub_id,若为真表示sub_id非法,永远不会为真,这里只是作为逻辑防范,此时将后方数据视为垃圾数据,执行pemlsfd->cseek+=(len-recycleLen)后结束老化流程;否则,执行步骤十。
步骤十,获取pmain_node=conf->mainptr+sub_id;获取psub_node=pmain_node->sub_addr+sub_offset。
步骤十一,清理此文件节点,此文件已老化。psub_node->linkhead=0;psub_node->linktail=0;psub_node->fileid=0;这里不必清除数据,只清除文件第一帧数据数据指针即可。
步骤十二,清理后,重新赋值recycleLen+=(tmp.slen+linksize);
Pemlsfd->cseek+=(tmp.slen+linksize)。
进一步的,跳到步骤五执行。
E.快速索引Read文件内容
步骤一,由g_emlstorage_fileid计算,得到sub_id和sub_offset。
步骤二,获取Pmain_node=emlsconf.mainptr+sub_id;
进一步的,检测pmain_node是否为0。若为0,则进行异常处理结束流程;否则执行步骤三。
步骤三,获取psub_node=pmain_node->sub_addr+sub_offset;
进一步的,检测psub_node是否为0。若为0,则进行异常处理结束流程;否则执行步骤四。
步骤四,检测psub_node->fileid==0,即检查fileid是否可用。若为0,则进行异常处理;否则执行步骤五。
步骤五,检测Psub_node->fileid==fileid,即检查fileid是否有效。若为0,则进行异常处理;否则执行步骤六。
步骤六,获取头节点指针p=psub_node->linkhead此时p指向内存空间文件帧数据第一帧开始,从开始遍历整个文件。p指针在后边会依次查看帧数据从而进行跳转。
步骤七,检测p是否为0,即是否存在下一跳。若为0,则Read结束;否则执行步骤八。
步骤八,从p中读取数据头emlstorage_jmplink_table结构到tmp临时指针中。
进一步的,检测读取的长度,是否为emlstorage_jmplink_table结构大小,若不等,则进行异常处理结束流程;否则,执行步骤九。
步骤九,从p+sizeof(emlstorage_jmplink_table)开始读取tmp.slen长度,存入g_emlcache_buf中,长度readlen累增读出的长度。其中g_emlcache_buf为最终的文件内容,readlen为文件长度。
步骤十,P=tmp.next;即跳到下一帧数据开头,准备Read操作。执行步骤七。
上述实施方式已经对本发明的一些细节进行了描述,但是不能理解为对本发明的限制,本领域的技术人员在不脱离本发明的原理和宗旨的情况下在本发明的范围内可以对其进行变化、修改、替换和变型。

Claims (8)

1.一种大流量环境下还原文件的存储及快速索引方法,其特征在于,基于网络流量捕获模块提取文件内容帧数据的存储过程;进行存储过程时设置特殊的存储结构和格式;
所述文件内容帧数据的存储过程包括:预置一块内存空间用来存储所有文件,预置一张主表结构,主表动态绑定子表索引,子表动态绑定文件ID和文件内容帧数据索引,其中文件内容帧数据索引为预置内存空间存放帧数据时的首地址;
所述进行存储过程时设置特殊的存储结构和格式包括:主表格式设计、子表格式设计和内存空间格式设计;
所述大流量环境下还原文件的存储及快速索引方法包括初始化阶段、Open文件阶段、还原文件时Write存入帧数据、老化处理阶段和快速索引Read文件内容阶段;
初始化阶段为程序初始化阶段,主要为读取配置文件,分配必要空间,在程序整个生命周期只执行一次,过程如下:
步骤一,读取预置配置文件,该配置文件按本机内存大小在程序启动前配置,包括:
1)主表中包含的子表个数;
2)每个子表包含的文件个数;
3)内存空间的大小;
4)cache区大小;
将配置文件上述4项字段,读入结构emlsconf中;
步骤二,创建主表,为主表分配空间,空间大小为emlsconf.main_elem_num *emlstorage_main_table结构长度;其中emlstorage_main_table结构为主表中每项数据的结构;创建成功后将主表的首地址存入emlsconf.mainptr;
步骤三,创建子表前需做预处理操作,来检查主表emlsconf.mainptr中空闲位置,并返回index作为空闲位置的编号;
步骤四,创建子表,为子表分配空间,大小为emlsconf.sub_elem_num * emlstorage_sub_table结构长度;其中emlstorage_sub_table结构为子表中每项数据的结构;
步骤五,创建内存空间,大小为emlsconf.mem_len,创建成功后,内存空间首地址存入emlsfd.fd中;
步骤六,创建cache区,用于大块读取和写入缓存;另外,内存驱动普遍按页进行读写,emlsconf.max_eml_cache_len为页的整数倍;
步骤七,g_emlstorage_fileid初始化为0,g_emlstorage_fileid表示可存入的文件的id号,从0开始自增,最大为emlsconf.main_elem_num * emlsconf.sub_elem_num,若到达最大id后,从0开始。
2.根据权利要求1所述的一种大流量环境下还原文件的存储及快速索引方法,其特征在于,在外部模块获取整个文件内容时快速索引文件和文件内容;所述的快速索引文件和文件内容指通过主表、子表和内存空间,从中快速获取完整文件。
3.根据权利要求1或2所述的一种大流量环境下还原文件的存储及快速索引方法,其特征在于,所述的主表结构包含每个子表地址索引,一张主表存放N个子表地址,占用空间4*N字节。
4.根据权利要求3所述的一种大流量环境下还原文件的存储及快速索引方法,其特征在于,所述子表中每个文件对应一个4字节的FileID和一个4字节的LinkHead,共8字节;LinkHead结构为内存空间中每帧文件报文地址索引。
5.根据权利要求4所述的一种大流量环境下还原文件的存储及快速索引方法,其特征在于,所述内存空间中数据为每帧文件报文数据,每帧文件报文中包括下一跳帧数据地址索引NEXT,FileID,文件内容长度Len,文件内容Data。
6.根据权利要求5所述的一种大流量环境下还原文件的存储及快速索引方法,其特征在于,所述的FileID表示每个文件的ID值,从1开始累增,每个文件值唯一;通过FileID计算,获得2个变量sub_id和sub_offset,计算方法如下:
sub_id=FileID/emlsconf.sub_elem_num,
sub_offset= FileID %emlsconf.sub_elem_num。
7.根据权利要求1所述的一种大流量环境下还原文件的存储及快速索引方法,其特征在于,步骤三中,检查方法为按结构emlstorage_main_table轮训主表,找到一个空块,每查找一次,index从0开始累加1。
8.根据权利要求1所述的一种大流量环境下还原文件的存储及快速索引方法,其特征在于,步骤四中,在创建子表成功后,将子表首地址存入主表index位置,同时,emlsconf.max_sub_id自增1,其中emlsconf.max_sub_id表示目前主表中存在的子表最大个数。
CN201910568821.8A 2019-06-27 2019-06-27 一种大流量环境下还原文件的存储及快速索引方法 Active CN110413407B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910568821.8A CN110413407B (zh) 2019-06-27 2019-06-27 一种大流量环境下还原文件的存储及快速索引方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910568821.8A CN110413407B (zh) 2019-06-27 2019-06-27 一种大流量环境下还原文件的存储及快速索引方法

Publications (2)

Publication Number Publication Date
CN110413407A CN110413407A (zh) 2019-11-05
CN110413407B true CN110413407B (zh) 2022-05-17

Family

ID=68358336

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910568821.8A Active CN110413407B (zh) 2019-06-27 2019-06-27 一种大流量环境下还原文件的存储及快速索引方法

Country Status (1)

Country Link
CN (1) CN110413407B (zh)

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6516320B1 (en) * 1999-03-08 2003-02-04 Pliant Technologies, Inc. Tiered hashing for data access
CN1763745A (zh) * 2005-09-06 2006-04-26 阎海强 一种面向结构的数据迁移的方法及系统
CN103177116B (zh) * 2013-04-08 2016-05-04 国电南瑞科技股份有限公司 一种基于两级索引的分布式日志处理和查询方法
CN103412884B (zh) * 2013-07-18 2016-12-28 华中科技大学 一种异构存储介质下嵌入式数据库的管理方法
CN106326239B (zh) * 2015-06-18 2020-01-31 阿里巴巴集团控股有限公司 分布式文件系统及其文件元信息管理方法

Also Published As

Publication number Publication date
CN110413407A (zh) 2019-11-05

Similar Documents

Publication Publication Date Title
CN101267361B (zh) 一种基于零拷贝技术的高速网络数据包捕获方法
CN102025636B (zh) 报文特征处理方法、装置及网络设备
WO2016011811A1 (zh) 一种内存管理方法、装置及存储介质
CN108733344A (zh) 数据读写方法、装置以及环形队列
CN102893265A (zh) 管理可独立访问的数据单元的存储
CN104778222A (zh) 基于usb存储设备的媒体库建立及更新方法
CN103685224A (zh) 网络入侵检测方法
CN107153620A (zh) 一种数据处理方法及装置
CN113660351B (zh) 数据通信方法、装置、通信终端及计算机可读存储介质
US20220335013A1 (en) Generating readable, compressed event trace logs from raw event trace logs
CN111241088A (zh) 数据写入方法、数据查询方法、装置及设备
CN109446147B (zh) 一种网络存储设备与pcie设备的数据交互方法
CN110413407B (zh) 一种大流量环境下还原文件的存储及快速索引方法
CN102629235A (zh) 一种提高ddr存储器读写速率的方法
TW520472B (en) Finalisation in incremental garbage collectors
CN114020529B (zh) 一种流表数据的备份方法、装置、网络设备和存储介质
CN109597566A (zh) 一种数据读取、存储方法及装置
CN104182360A (zh) 多核环境的跟踪日志输出处理方法及系统
CN105491158A (zh) 一种基于网络数据流的http内容还原方法及系统
CN110941597B (zh) 解压缩文件的清理方法、装置、计算设备及计算机存储介质
CN112235598A (zh) 一种视频结构化处理方法、装置及终端设备
CN109299132B (zh) Sql数据处理方法、系统以及电子设备
US8234524B1 (en) Protocol analysis with event present flags
CN112637602B (zh) 一种jpeg接口及数字图像处理系统
CN1110160C (zh) 含环形缓冲存储器的数据处理装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant