CN110830361B - 邮件数据存储方法及装置 - Google Patents
邮件数据存储方法及装置 Download PDFInfo
- Publication number
- CN110830361B CN110830361B CN201911005109.3A CN201911005109A CN110830361B CN 110830361 B CN110830361 B CN 110830361B CN 201911005109 A CN201911005109 A CN 201911005109A CN 110830361 B CN110830361 B CN 110830361B
- Authority
- CN
- China
- Prior art keywords
- segment
- atomic
- segment body
- stored
- 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
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L51/00—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
- H04L51/42—Mailbox-related aspects, e.g. synchronisation of mailboxes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/04—Protocols for data compression, e.g. ROHC
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Information Transfer Between Computers (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请提供的邮件数据存储方法及装置,在所述方法中,首先,计算待存储邮件中各个原子段的段体标识;接着,采用段体标识替换待存储邮件中的原子段段体,得到压缩邮件数据,并存储该邮件数据;最后,检测该电子设备中是否已经存储有该待存储邮件中的原子段段体,根据检测结果,将未存储到电子设备的原子段段体保存到电子设备中。相对于现有技术以待存储邮件整体进行存储的方式,将邮件体以原子段段体进行存储的存储颗粒度更小,可以在邮件数据存储过程中,将不同邮件的邮件体中相同的原子段段体仅存储一次,如此可以减少邮件数据存储的存储冗余,节省存储资源。
Description
技术领域
本申请涉及数据存储技术领域,具体而言,涉及一种邮件数据存储方法及装置。
背景技术
电子邮件是人们在日常生活与办公中最常用的通讯手段之一。互联网上传输的电子邮件本质上是一段数据。
在使用电子邮件进行通讯时,会对已经发送或者已经接收的邮件数据进行存储,以方便用户随时查看。然而,在对邮件数据进行存储时,现有的邮件数据存储方式多是将不同邮件单独进行存储,在不同邮件中包括相同内容(比如,图片或附件)的情况下,这种邮件存储方式就会存在存储冗余,占用存储资源较多的缺点。
发明内容
有鉴于此,本申请的目的之一在于提供一种邮件数据存储方法及装置,用以解决现有邮件数据存储时存储冗余高,占用存储资源较多的技术问题。
第一方面,本申请提供一种邮件数据存储方法,应用于电子设备,所述方法包括:
获取待存储邮件,其中,所述待存储邮件包括邮件头和邮件体,所述邮件体包括至少一个原子段,每个原子段包括段头和段体;
根据所述待存储邮件所包括的各个原子段段体,计算所述各个原子段的段体标识;
利用所述各个原子段的段体标识替换所述待存储邮件中与各个段体标识对应的原子段段体,得到所述待存储邮件对应的压缩邮件数据,并存储所述压缩邮件数据;
根据所述压缩邮件数据中的任意一段体标识,检测所述电子设备中是否已经存储该任意一段体标识对应的原子段段体;
若已存储有该任意一段体标识对应的原子段段体,则不将该原子段段体进行存储,若未存储有该任意一段体标识对应的原子段段体,则将该原子段段体进行存储。
上述方法中,将待存储邮件的邮件体以原子段段体为单位进行存储,相对于现有技术以待存储邮件整体进行存储的方式,存储的颗粒度更小,可以在邮件数据存储过程中,将不同邮件的邮件体中相同的原子段段体仅存储一次,如此可以减少邮件数据存储的存储冗余,节省存储资源。
可选地,在本申请中,所述电子设备为邮件服务器,所述邮件头中包括邮箱标识,所述邮件服务器中存储压缩邮件数据表以及邮箱邮件记录表;所述压缩邮件数据表包括邮件数据标识及压缩邮件数据,所述邮箱邮件记录表包括邮箱标识及邮件数据标识;所述方法还包括:
根据所述待存储邮件的邮件头和邮件体,计算所述待存储邮件的邮件数据标识;
将所述邮箱标识及所述邮件数据标识对应存储至所述邮箱邮件记录表中;
查找所述压缩邮件数据表中是否存在所述邮件数据标识;
若不存在所述邮件数据标识,则将所述邮件数据标识存储在所述压缩邮件数据表中。
可选地,在本申请中,所述压缩邮件数据表还包括邮件被引用的次数,所述方法还包括:
若存在所述邮件数据标识,则将所述待存储邮件对应的邮件被引用的次数加一。
可选地,在本申请中,所述邮件服务器还存储第一段体信息表,所述第一段体信息表包括原子段的段体标识;所述根据所述压缩邮件数据中的任意一段体标识,检测所述电子设备中是否已经存储该任意一段体标识对应的原子段段体,包括:
查找所述第一段体信息表中是否存在所述压缩邮件数据中的任意一段体标识;
若存在,则确定已存储所述段体标识对应的原子段体;否则,确定未存储所述段体标识对应的原子段体。
可选地,在本申请中,所述第一段体信息表还包括各个原子段段体的引用次数;所述若已存储有该任意一段体标识对应的原子段段体,则不将该原子段段体进行存储,若未存储有该任意一段体标识对应的原子段段体,则将该原子段段体进行存储,包括:
若已存储该任意一段体标识对应的原子段段体,则将该原子段段体的引用次数加一;
若未存储该任意一段体标识对应的原子段段体,则将该原子段段体存储至所述第一段体信息表中,并将该原子段段体的引用次数配置为一。
可选地,在本申请中,所述第一段体信息表还包括段体内容和段体的存储路径;所述若未存储该任意一段体标识对应的原子段段体,则将原子段段体存储至所述第一段体信息表中,包括:
比较该原子段段体的数据量与预设数据量阈值之间的大小关系;
若该原子段段体的数据量不大于所述预设数据量阈值,则将该原子段段体存储至所述第一段体信息表包括的段体内容中;
若该原子段段体的数据量大于所述预设数据量阈值,则将该原子段段体存储至所述邮件服务器包括的文件***中,并将该原子段段体存储至所述文件***的存储路径保存至所述第一段体信息表包括的存储路径中。
可选地,在本申请中,所述方法还包括:
接收对一邮箱中的邮件进行下载的下载请求;
根据所述邮箱的邮箱标识,在所述邮箱邮件记录表中查找待下载邮件的邮件数据标识,并根据查找的邮件数据标识在所述压缩邮件数据表查找该邮件数据标识对应的压缩邮件数据;
根据查找到的压缩邮件数据中各个原子段的段体标识,在所述第一段体信息表中查找各个原子段段体;
采用各个原子段段体替换压缩邮件数据中对应的段体标识,得到所需下载的邮件。
可选地,在本申请中,所述第一段体信息表还包括存储位置,所述根据查找到的压缩邮件数据中各个原子段的段体标识,在所述第一段体信息表中查找各个原子段段体,包括:
根据存储位置,检测原子段的段体存储在段体内容还是存储路径中;
若存储在段体内容中,从所述第一段体信息表中的段体内容中获得原子段的段体;
若存储在存储路径中,根据所述第一段体信息表的存储路径中的存储路径获得原子段的段体。
可选地,在本申请中,所述方法还包括:
接收对一邮箱中的邮件进行删除的删除请求;
根据该邮箱的邮箱标识在所述邮箱邮件记录表中,查找待删除邮件的邮件数据标识;
根据所述待删除邮件的邮件数据标识在所述压缩邮件数据表中将该待删除邮件被引用次数减一处理;
若减一处理后该待删除邮件被引用次数不大于零,从所述压缩邮件数据表中获得该待删除邮件的压缩邮件数据;
将压缩邮件数据中的各个原子段段体的引用次数减一处理,若原子段段体的引用次数在减一处理后不大于零,将减一处理后引用次数不大于零的原子段段体从所述第一段体信息表中删除。
可选地,在本申请中,所述电子设备为邮件客户端,所述邮件头中包括邮箱标识,所述邮件客户端存储有第二段体信息表及压缩离线邮件数据表,所述第二段体信息表包括各个原子段的段体标识、原子段段体的引用次数、段体内容和段体的存储路径,所述压缩离线邮件数据表包括邮箱标识及压缩邮件数据,所述方法还包括:
根据所述待存储邮件的邮件头和邮件体,计算所述待存储邮件的邮件数据标识;
查找所述压缩离线邮件数据表中是否存在所述邮件数据标识;
若不存在所述邮件数据标识,则将所述邮件数据标识存储在所述压缩邮件数据表中;
所述根据所述待存储邮件所包括的各个原子段段体,计算所述各个原子段的段体标识包括:
在所述第二段体信息表中查找是否存在所述压缩邮件数据中的任意一段体标识;
若存在,则确定已存储所述段体标识对应的原子段体;否则,确定未存储所述段体标识对应的原子段体;
所述若未存储有该任意一段体标识对应的原子段段体,则将该原子段段体进行存储,包括:
在所述邮件客户端未存储该任意一段体标识对应的原子段段体时,比较该原子段段体的数据量与预设数据量阈值之间的大小;在该原子段段体的数据量不大于预设数据量阈值时,将该原子段段体存储到所述段体内容中,并将该原子段段体的引用次数进行加一处理;在该原子段的段体数据量大于预设数据量阈值时,将该原子段段体存储到所述邮件客户端的文件***中,并将对应的存储路径保存在所述存储路径中,并将该原子段段体的引用次数进行加一处理。
可选地,在本申请中,所述方法还包括:
接收从所述邮件客户端的存储空间读取一邮箱中邮件的请求;
根据待读取邮箱的邮箱标识,在所述压缩离线邮件数据表中查找待读取邮件的压缩邮件数据;
根据压缩邮件数据中各个原子段的段体标识,在所述第二段体信息表中查找各个原子段段体;
采用各个原子段段体替换压缩邮件数据中对应的段体标识,得到所需读取的邮件。
可选地,在本申请中,所述方法还包括:
接收对所述邮件客户端本地存储的邮件进行删除的删除请求;
根据所述待删除邮件的邮件数据标识在所述压缩离线邮件数据表中将该待删除邮件被引用次数进行减一处理;
若减一处理后该待删除邮件被引用次数不大于零,从所述压缩离线邮件数据表中获得该待删除邮件的压缩邮件数据;
将该待删除邮件的压缩邮件数据中的各个原子段段体的引用次数减一处理,若原子段段体的引用次数在减一处理后不大于零,将减一处理后引用次数不大于零的原子段段体从所述第二段体信息表中删除。
第二方面,本申请还提供一种邮件数据存储装置,应用于电子设备,所述装置包括:
获取模块,用于获取待存储邮件,其中,所述待存储邮件包括邮件头和邮件体,所述邮件体包括至少一个原子段,每个原子段包括段头和段体;
计算模块,用于根据所述待存储邮件所包括的各个原子段段体,计算所述各个原子段的段体标识;
替换模块,用于利用所述各个原子段的段体标识替换所述待存储邮件中与各个段体标识对应的原子段段体,得到所述待存储邮件对应的压缩邮件数据,并存储所述压缩邮件数据;
检测模块,用于根据所述压缩邮件数据中的任意一段体标识,检测所述电子设备中是否已经存储该任意一段体标识对应的原子段段体;
存储模块,用于若已存储有该任意一段体标识对应的原子段段体,则不将该原子段段体进行存储,若未存储有该任意一段体标识对应的原子段段体,则将该原子段段体进行存储。
第三方面,本申请还提供一种电子设备,所述电子设备包括处理器及存储有若干计算机指令的非易失性存储器,所述计算机指令被所述处理器执行时,所述电子设备执行第一方面所述的邮件数据存储方法。
第四方面,本申请还提供一种可读存储介质,所述可读存储介质包括计算机程序,所述计算机程序运行时控制所述可读存储介质所在电子设备执行第一方面所述的邮件数据存储方法。
相对于现有技术而言,本申请具有以下有益效果:
本申请提供的邮件数据存储方法及装置,首先,计算待存储邮件中各个原子段的段体标识;接着,采用段体标识替换待存储邮件中的原子段段体,得到压缩邮件数据,并存储该邮件数据;最后,检测该电子设备中是否已经存储有该待存储邮件中的原子段段体,根据检测结果,将未存储到电子设备的原子段段体保存到电子设备中。将待存储邮件的邮件体以原子段段体为单位进行存储,相对于现有技术以待存储邮件整体进行存储的方式,存储的颗粒度更小,可以在邮件数据存储过程中,将不同邮件的邮件体中相同的原子段段体仅存储一次,如此可以减少邮件数据存储的存储冗余,节省存储资源。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的多体邮件的结构示意图;
图2为适用于本申请实施例提供的邮件数据存储方案的应用场景图;
图3为本申请实施例提供的电子设备的结构框图;
图4为本申请第一实施例提供的邮件数据存储方法的流程示意图;
图5为本申请第二实施例提供的邮件数据存储方法的流程示意图;
图6为本申请第三实施例提供的下载邮件方法的流程示意图;
图7为本申请第四实施例提供的删除邮件方法的流程示意图;
图8为本申请第五实施例提供的邮件数据存储方法的流程示意图;
图9为本申请第六实施例提供的读取邮件方法的流程示意图;
图10为本申请第七实施例提供的删除邮件方法的流程示意图;
图11为本申请第七实施例提供邮件数据存储装置的功能模块框图。
图标:100-邮件服务器;200-邮件客户端;300-电子设备;311-存储器;312-处理器;313-通信单元;310-邮件数据存储装置;3101-获取模块;3102-计算模块;3103-替换模块;3104-检测模块;3105-存储模块。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
此外,若出现术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
需要说明的是,在不冲突的情况下,本申请的实施例中的特征可以相互结合。
在现有技术中,存在以下两种邮件数据存储方式:
第一种方式,在邮件服务器侧,每当邮件服务器接收到发送给其用户的邮件时,便会将一份邮件数据副本存储到用户的邮箱(邮件服务器为用户保留的一存储空间)中。在一封邮件被发送给同一个邮件服务器下多个不同用户时,多个用户的邮箱中就会存储多个一模一样的邮件。在邮件客户端,由于每封邮件都不相同,不存在邮件客户端中重复存储同一份邮件的情况。
第二种方式,在邮件服务器侧,每封邮件的邮件头包含一个识别字段(比如,message-id字段),这个识别字段由发送者的邮件服务器生成,并保证全局唯一。当一封邮件被发送给相同邮件服务器下多个用户的时候,在不考虑数据备份产生的副本的前提下,接收者的邮件服务器上只会保留一份识别字段相同的邮件数据,而不是每个接收者的邮箱中都存有一份相同识别字段的邮件,邮件服务器通过这种多邮箱引用同一封邮件数据方式可以有效节省存储空间。在邮件客户端,每封邮件都不相同,即不存在两封识别字段相同的邮件数据。因此,现有的邮件客户端也就不能按照识别字段对邮件数据去重。
上述两种方式的邮件数据存储方式存在以下缺陷:
第一种方式,相同的邮件数据在不同用户的邮箱中重复存储,这会浪费邮件服务器较多的存储资源。
第二种方式相对于第一种方式能够有效节省邮件数据对存储空间的占用,但是多封不同的邮件可能包含相同的内容(比如,在某个公告文件发布后,不同人在不同邮件中可能都会将该公告文件作为附件,这会导致该附件会被重复存在于大量识别字段不同的邮件中),对于这些相同内容的重复存储会造成存储空间的浪费。
在介绍本申请具体技术方案之前,首先对邮件的邮件结构进行介绍,不管是按照RFC822协议定义的邮件,还是MIME(Multipurpose Internet Mail Extension,多用途因特网邮件扩展)协议定义的邮件,可以按照邮件结构将其分为单体邮件和多体邮件。其中,单体邮件是指邮件体中只包含一段某一类型数据(比如,一段文本或一张图片)的邮件,多体邮件是指邮件体中包括多段不同或相同类型数据的邮件。
请参照图1,图1给出了一个典型的多体邮件的结构,一个多体邮件由多个段组成,多体邮件的邮件头中会声明一个段与段之间分割标记(比如,boundary)。一个段由段头和段体组成,段头与段体之间以空行分割,同时段体又可以分成多个子段,子段之间同样通过段头声明的boundary区分。
不包括子段的段称为原子段,例如图1中的段1.1、段1.2及段2均是原子段,其中,单体邮件可以看作邮件体只由一个原子段段体构成的特殊多体邮件。
基于上述邮件的结构,提出本申请的邮件数据存储方案,请参照图2,图2为本申请邮件数据存储方案的应用场景,在该应用场景中包括相互通信连接的邮件服务器100和邮件客户端200,其中,邮件客户端200是指安装有接收邮件和发送邮件功能的软件的个人电脑或智能手机等。在进行邮件发送时,邮件客户端200将待发送邮件首先发送至邮件服务器100,邮件服务器100将接收的邮件进行存储,并将该邮件转发至运行目的邮箱的邮件客户端200。
在本申请实施例中,邮件服务器100的数据库中存储并维护数据表。该数据表用于记录存储在邮件服务器100中的邮件的各项信息,具体地,数据表包括第一段体信息表(tbl_atom_segment_body表)、压缩邮件数据表(tbl_mail表)及邮箱邮件记录表(tbl_mail_box表)。
tbl_atom_segment_body表存储的是邮件服务器100中所有邮件中的原子段段体,每个原子段段体可能属于多封邮件,以表1所示的tbl_atom_segment_body表结构为例。
atom_segment_body_md5 | referer_num | content_or_file | content | file_path |
表1
表1中各个字段的含义如下:atom_segment_body_md5(原子段的段体标识):原子段段体的信息摘要值,使用md5算法生成,用作主键;referer_num(原子段段体的引用次数):表示有多少封邮件引用这个原子段段体;content_or_file(存储位置):取值为0或1,当为0的时候content字段有值,file_path字段为空,反之亦然;content(段体内容):该字段和file_path字段二选一,当content字段存在时,表示这个原子段段体数据量较小,直接存入content字段中;file_path(存储路径):该字段和content字段二选一,当file_path字段存在时,表示这个原子段段体数据量较大,存入file_path所指向的文本文件中。
tbl_mail表存储的是邮件服务器100所有压缩后的邮件数据,每个压缩后的邮件可能属于多个用户邮箱,以表2所示的tbl_mail表为例。
mail_data_md5 | referer_num | compressed_mail_data |
表2
表2中各个字段的含义如下:mail_data_md5(邮件数据标识):邮件数据的信息摘要值,使用md5算法生成,用作主键;referer_num(邮件被引用的次数):表示有多少邮箱记录引用这个压缩后的邮件;compressed_mail_data(压缩邮件数据):该字段存储压缩后的邮件数据(包括邮件头和压缩后的邮件体,压缩的含义可以是使用“[特殊标记字符串]+原子段段体md5+[特殊标记字符串]”来代替邮件体中的原子段段体)。
tbl_mail_box表存储的是邮件服务器100所有用户的邮箱中的邮件记录,以表3所示的tbl_mail_box表为例。
uuid | mail_box_address | mail_data_md5 | 其他业务字段 |
表3
表3中各个字段的含义如下:uuid:邮箱记录的唯一标识,用作主键;mail_box_address:用户的邮箱地址(表明这封邮件属于哪个用户);mail_data_md5(邮件数据标识):该字段引用tbl_mail表中的记录,表示邮箱内特定类型(type)文件夹内有一封mail_data_md5对应的邮件;其他业务字段:例如,邮件所在的文件夹。其中,uuid和mail_box_address为邮箱标识。
在本申请实施例中,邮件客户端200的数据库中也存储并维护数据表。该数据表用于记录存储在邮件客户端200中的邮件数据的各项信息,数据表包括第二段体信息表(tb2_atom_segment_body表)及压缩离线邮件数据表(tb2_mail_box表)。
tb2_atom_segment_body表存储的是邮件客户端200所有邮件中的原子段段体,每个原子段段体可能属于多封邮件,表结构和每个字段的含义与邮件服务器100中的tb1_atom_segment_body表相同,在此就不再赘述。
tb2_mail_box表存储的是邮件客户端200所有压缩后的离线邮件,以表4所示的tb2_mail_box表结构为例。
uuid | compressed_mail_data | 其他业务字段 |
表4
表4中各个字段的含义如下:uuid:邮箱记录的唯一标识,用作主键;compressed_mail_data:该字段存储压缩后的邮件;其他业务字段:例如,邮件所在的文件夹,uuid和compressed_mail_data和上面描述相同,在此不再赘述。
请参照图3,图3示出了一种电子设备300的结构示意图。所述电子设备300包括邮件数据存储装置310、存储器311、处理器312及通信单元313。在本申请实施例中,所述电子设备300可以是邮件服务器100,也可以是邮件客户端200。
所述存储器311、处理器312及通信单元313的各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。
其中,存储器311用于存储程序,所述处理器312在接收到执行指令后,执行所述程序。所述通信单元313用于通过网络建立所述电子设备300与其他网络设备之间的通信连接,并用于通过网络进行数据的接收和发送。
邮件数据存储装置310包括至少一个可以软件或固件(firmware)的形式存储于所述存储器311中或固化在所述电子设备300的操作***(英文:Operating System,简称:OS)中的软件功能模块。所述处理器312用于执行所述存储器311中存储的可执行模块,例如邮件数据存储装置310所包括的软件功能模块及计算机程序等。
应当理解的是,图3所示的结构仅为示意,所述电子设备300还可包括比图3中所示更多或者更少的组件,或者具有与图3所示不同的配置。图3中所示的各组件可以采用硬件、软件或其组合实现。
第一实施例
请参照图4,图4为本申请实施例提供的应用于图3中电子设备300的邮件数据存储方法的流程图,下面对所述方法包括的各个步骤进行详尽的阐述。
步骤S401,获取待存储邮件。邮件包括邮件头和邮件体,邮件体包括至少一个原子段,每个原子段包括段头和段体。
邮件体中的每一个原子段段体都表达了一段数据,这段数据可以是文本、图像、音频、附件等,各个原子段段体数据之间相互独立,没有关联关系。互联网中的邮件中存在着大量的重复信息。不同的邮件可能包含同一张图片、同一个文档,这表现为不同的邮件体中包含相同的原子段段体。
步骤S402,根据待存储邮件所包括的各个原子段段体,计算各个原子段的段体标识。
步骤S403,利用各个原子段的段体标识替换待存储邮件中与该各个段体标识对应的原子段段体,得到待存储邮件对应的压缩邮件数据,并存储压缩邮件数据。
步骤S404,根据压缩邮件数据中的任意一段体标识,检测电子设备中是否已经存储该任意一段体标识对应的原子段段体。
步骤S405,若已存储有该任意一段体标识对应的原子段段体,则不将该原子段段体进行存储,若未存储有该任意一段体标识对应的原子段段体,则将该原子段段体进行存储。
在存储原子段段体之前,检测电子设备300中是否已经存储了该原子段段体,确保相同的原子段段体不会被重复存储。相对于现有技术以待存储邮件整体进行存储的方式,将邮件体以原子段段体进行存储的存储颗粒度更小,在邮件数据存储过程中,不同邮件体中相同的原子段段体仅存储一次,如此可以减少邮件数据存储的存储冗余,节省存储资源。
第二实施例
本申请实施例提供一种在邮件服务器100上实现邮件数据存储的方法。在本申请实施例中,邮件数据存储的情形可以是邮件服务器100接收一份邮件并将其保存到用户收件箱,也可以是邮件服务器100在发送邮件后保存一份邮件副本到用户发件箱,还可以是邮件客户端200在写完草稿邮件后上传草稿邮件到邮件服务器100的用户草稿邮箱中。
请参照图5,图5为本申请实施例提供的应用于图2中邮件服务器100的邮件数据存储方法的一种流程图。
步骤S501,计算待存储邮件的邮件数据标识。
根据待存储邮件的邮件头和邮件体,计算该待存储邮件的邮件数据标识,其中邮件头中包括邮箱标识。
步骤S502,将邮箱标识、邮件数据标识对应存储至邮箱邮件记录表中。
具体地,根据所需存入邮箱的邮箱标识、待存储邮件的邮件数据标识,在邮箱邮件记录表中新增一用于记录该待存储邮件存入到对应邮箱的邮箱邮件记录表项。
步骤S503,查找压缩邮件数据表中查找是否存在待存储邮件的邮件数据标识。
在压缩邮件数据表中存在待存储邮件的邮件数据标识时,进入步骤S504;在压缩邮件数据表中不存在待存储邮件的邮件数据标识时,进入步骤S505。
步骤S504,将压缩邮件数据记录表项中该待存储邮件被引用次数加一处理,不对待存储邮件的内容进行存储。
步骤S505,将邮件数据标识存储在所述压缩邮件数据表中,获取待存储邮件所包括的原子段段体。
步骤S506,计算待存储邮件的各个原子段段体的段体标识。
步骤S507,利用各个原子段的段体标识替换待存储邮件中与该各个段体标识对应的原子段段体,得到待存储邮件对应的压缩邮件数据,并存储压缩邮件数据。
步骤S508,根据压缩邮件数据中的任意一段体标识,检测电子设备中是否已经存储该任意一段体标识对应的原子段段体。
若存在该任意一段体标识对应的原子段段体,则进入步骤S509;若不存在该任意一段体标识对应的原子段段体,则进入步骤S510。
步骤S509,将该任意一原子段段体的引用次数加一处理,并不将该任意一原子段段体进行存储。
步骤S510,将该任意一原子段段体存储在第一段体信息表中,并将该原子段段体的引用次数配置为一。
下面以具体示例进行说明:
首先,邮件服务器100得到一封待存储邮件,记为mail_data,假设该待存储邮件需要存入的邮箱地址为user_addr。计算mail_data的邮件数据标识,具体地,可以采用邮件数据的MD5值表示邮件数据标识,记为mail_data_md5。其中,邮箱标识可以包括uuid及mail_box_address,在tbl_mail_box表中新增一条邮箱邮件记录表项(uuid,user_addr,mail_data_md5,其他业务字段)。
接着,在tb1_mail表中检测是否存在主键为mail_data_md5的记录表项。在tb1_mail表中存在主键为mail_data_md5的记录表项时,将主键为mail_data_md5的记录表项中的邮件被引用次数referer_num更新为referer_num+1,结束流程。在tb1_mail表中不存在主键为mail_data_md5的记录表项时,解析得到的邮件mail_data中所有的原子段段体,假设原子段段体数量为n个,记每个原子段段体为atom_segment_body_i,1≤i≤n。
再接着,针对任意原子段段体atom_segment_body_i,计算该任意原子段的段体标识,本申请实施例中,采用原子段段体的MD5值作为段体标识,即可以得到该任意原子段的段体标识,记为atom_segment_body_i_md5。
使用“[特殊标记字符串]+原子段段体MD5+[特殊标记字符串]”替换掉mail_data中对应的原子段段体,得到压缩邮件数据compressed_mail_data。再向tbl_mail***一条压缩邮件数据记录表项(mail_data_md5,1,compressed_mail_data),将压缩邮件数据进行存储。
再接着,可以根据原子段段体的序列号i依次对邮件中的原子段段体进行以下操作:
在tbl_atom_segment_body表中查找是否存在主键为atom_segment_body_i_md5的记录表项。在存在主键为atom_segment_body_i_md5的记录表项时,将该记录表项中的referer_num更新为referer_num+1;在不存在主键为atom_segment_body_i_md5的记录表项时,在tbl_atom_segment_body表新增一条主键为atom_segment_body_i_md5的记录表项。
在本申请实施例中,在新增一条主键为atom_segment_body_i_md5的记录表项之前,还可以根据atom_segment_body_i的数据量与预设数据量阈值(比如,4096字符)的大小,确定atom_segment_body_i存储在记录表项中的段体内容(content)还是存储路径(file_path)中。
具体地,在atom_segment_body_i的数据量不大于预设数据量阈值时,将atom_segment_body_i存储在记录表项中的content,向tbl_atom_segment_body表中新增表项(atom_segment_body_i_md5,1,0,atom_segment_body_i,null)。在atom_segment_body_i的数据量大于预设数据量阈值时,将atom_segment_body_i存储在记录表项中的file_path字段中,向tbl_atom_segment_body表中新增表项(atom_segment_body_i_md5,1,1,null,file_path)。
重复上述过程,直到序列号i的取值为n时,结束对mail_data的存储。
本申请实施例提供的邮件数据存储方法,通过在数据库中维护三张数据表,记录待存储邮件在存储过程中的各项信息,确保待存储邮件的邮件体能以原子段段体为单位进行存储,相同的原子段段体只在邮件服务器100中存储一次,如此可以减少邮件数据存储的存储冗余,节省存储资源。
第三实施例
本实施例提供一种在采用第二实施例中方式存储邮件数据的基础上,进行邮件下载查看的方法,在本实施例中,下载查看邮件的方式可以是下载收件箱中的邮件、下载发件箱中的邮件或下载草稿箱中的邮件等。
请参照图6,图6示出了一种下载邮件的流程示意图,下面对具体流程进行介绍。
步骤S601,接收对一邮箱中的邮件进行下载的下载请求。
当用户通过邮件客户端200从邮件服务器100下载邮件时,邮件服务器100会通过POP3协议或IMAP协议将邮件数据传输到邮件客户端200上,然后邮件客户端200把邮件数据保存在用户的本地存储空间上。
步骤S602,根据邮箱的邮箱标识,在邮箱邮件记录表中查找待下载邮件的邮件数据标识,并根据查找的邮件数据标识在压缩邮件数据表查找该邮件数据标识对应的压缩邮件数据。
步骤S603,根据查找到的压缩邮件数据中各个原子段的段体标识,在第一段体信息表中查找各个原子段段体。
步骤S604,采用各个原子段段体替换压缩邮件数据中对应的段体标识,得到所需下载的邮件。
下面以具体示例进行说明。
假设邮件客户端200从邮件服务器100中下载一份uuid为08821a46-29dc-408d-80e7-fe64881bc34d的邮件。
首先,在tbl_mail_box表中根据uuid查找到该邮件的mail_data_md5,再根据该mail_data_md5从表tbl_mail中查找到该邮件压缩后的数据compressed_mail_data。
接着,解析compressed_mail_data中所有的“[特殊标记字符串]+原子段段体MD5+[特殊标记字符串]”,假设有n个,每一个原子段段体MD5使用atom_segment_body_i_md5来表示。
再接着,可以根据原子段段体的序列号i依次对邮件中的原子段段体进行以下操作:
从tbl_atom_segment_body表中查找到主键为atom_segment_body_i_md5的记录表项,记为record_i。检测record_i中的content_or_file字段是否为0,若content_or_file字段为0,取record_i的content字段的值替换compressed_mail_data中的“[特殊标记字符串]+atom_segment_body_i_md5+[特殊标记字符串]”;若content_or_file字段为1,读取record_i的file_path字段指向的文本文件的内容,用其内容替换compressed_mail_data中的“[特殊标记字符串]+atom_segment_body_i_md5+[特殊标记字符串]”。
最后,将得到的所有原子段段体atom_segment_body_i进行组合得到邮件数据mail_data,并将其返回给邮件客户端200。
本申请实施例提供的邮件数据下载方法,可以根据数据库中维护三张数据表中记录的各项信息,获取待下载邮件中所有的原子段段体,并通过替换压缩邮件数据中的段体标识恢复邮件数据,确保在减少邮件数据存储冗余的情况下,邮件数据可恢复。
第四实施例
本实施例提供一种在采用第二实施例中方式存储邮件数据的基础上,进行邮件删除的方法,在本实施例中,邮件删除的方式可以是删除收件箱中的邮件、删除发件箱中的邮件或删除草稿箱中的邮件等。
请参照图7,图7示出了一种删除邮件的流程示意图,下面对具体流程进行介绍。
步骤S701,接收对一邮箱中的邮件进行删除的删除请求;
步骤S702,根据该邮箱的邮箱标识在邮箱邮件记录表中,查找待删除邮件的邮件数据标识;
步骤S703,根据待删除邮件的邮件数据标识在压缩邮件数据表中将压缩邮件数据记录表项中该待删除邮件被引用次数减一处理;
步骤S704,若减一处理后该待删除邮件被引用次数不大于零,从压缩邮件数据表中获得该待删除邮件的压缩邮件数据;
步骤S705,将压缩邮件数据中的各个原子段段体的引用次数减一处理,若原子段段体的引用次数在减一处理后不大于零,将减一处理后引用次数不大于零的原子段段体从第一段体信息表中删除。
下面以具体示例进行说明。
假设邮件客户端200要从邮件服务器100中删除一封uuid为08821a46-29dc-408d-80e7-fe64881bc34d的邮件。
首先,从tbl_mail_box表中根据uuid查找到该邮件的mail_data_md5,再把表tbl_mail中主键为mail_data_md5的记录表项的referer_num更新为referer_num-1。判断更新后的referer_num是否大于0,若referer_num大于0流程结束,若referer_num不大于0继续后续流程。
接着,读取主键为mail_data_md5的记录表项中的compressed_mail_data,解析compressed_mail_data中所有的“[特殊标记字符串]+原子段段体MD5+[特殊标记字符串]”,假设有n个,每一个原子段段体MD5使用atom_segment_body_i_md5来表示。
再接着,可以根据原子段段体的序列号i依次对邮件中的原子段段体进行以下操作:
从tbl_atom_segment_body表中查找到主键为atom_segment_body_i_md5的记录,记为record_i,将record_i的referer_num更新为referer_num-1。检测更新后的record_i的referer_num是否大于0,若更新后的record_i的referer_num大于0,不对该原子段段体的record_i进行处理;若更新后的record_i的referer_num不大于0,从tbl_atom_segment_body表中删除record_i,若record_i的file_path不为空,将file_path指向的文件一并删除。
最后,从tbl_mail表中删除待删除邮件的记录表项。
本申请实施例提供的邮件数据删除方法,可以根据数据库中维护三张数据表中记录的各项信息,从已存储的邮件数据中,删除该邮件数据对应的原子段段体,确保在减少邮件数据存储冗余的情况下,邮件数据可删除。
第五实施例
本申请实施例提供一种在邮件客户端200上实现邮件数据存储的方法。请参照图8,图8示出了本申请实施例提供的应用于图2中邮件客户端200的邮件数据存储方法的一种流程图。
步骤S801,计算待存储邮件中任意一个原子段的段体标识,采用各个原子段的段体标识替换所述待存储邮件中与该各个段体标识对应的原子段段体,得到所述待存储邮件对应的压缩邮件数据。
步骤S802,在压缩离线邮件数据表中***一包括压缩邮件数据的压缩离线邮件数据记录表项。
步骤S803,在第二段体信息表中查找是否存在压缩邮件数据中的任意一原子段段体标识。
若存在该任意一原子段段体标识,结束流程;若不存在该任意一原子段段体标识,进入步骤S804;
步骤S804,将该任意一原子段段体进行存储。
具体地,在存储该任意一原子段段体时,比较该任意一原子段段体的数据量与预设数据量阈值之间的大小;在该任意一原子段段体的数据量不大于预设数据量阈值时,将该任意一原子段段体存储到新增的对应原子段段体信息记录表项的段体内容中,并将该任意一原子段段体的引用次数进行加一处理。在该任意一原子段段体的数据量大于预设数据量阈值时,将该任意一原子段段体存储到所述邮件客户端200的文件***中,并将对应的存储路径保存在新增的对应原子段段体信息记录表项的存储路径中,并将该任意一原子段段体的引用次数进行加一处理。
下面以具体示例进行说明。
假设邮件客户端200从邮件服务器100下载一封邮件,记为mail_data,并将其存入邮件客户端200的本地存储空间中。
首先,解析该mail_data中所有的原子段段体,假设有n个,对于每一个原子段段体atom_segment_body_i,计算其MD5,记为atom_segment_body_i_md5。使用“[特殊标记字符串]+原子段段体MD5+[特殊标记字符串]”替换mail_data中的所有原子段段体,得到compressed_mail_data。
接着,向tb2_mail_box***一条记录(uuid,compressed_mail_data,其他业务字段)。
再接着,可以根据原子段段体的序列号i依次对邮件中的原子段段体进行以下操作:
查找tb2_atom_segment_body表中是否有主键为atom_segment_body_i
_md5的记录表项,若存在主键为atom_segment_body_i_md5的记录表项,将该记录表项中的referer_num更新为referer_num+1;若不存在主键为atom_segment_body_i_md5的记录表项,在tb2_atom_segment_body表新增一条主键为atom_segment_body_i_md5的记录表项。
在本申请实施例中,在新增一条主键为atom_segment_body_i_md5的记录表项之前,还可以根据atom_segment_body_i的数据量与预设数据量阈值(比如,4096字符)的大小,确定atom_segment_body_i存储在记录表项中的段体内容字段(content)还是存储路径字段(file_path)中。
具体地,在atom_segment_body_i的数据量不大于预设数据量阈值时,将atom_segment_body_i存储在记录表项中的content字段,向tbl_atom_segment_body表中新增表项(atom_segment_body_i_md5,1,0,atom_segment_body_i,null)。在atom_segment_body_i的数据量大于预设数据量阈值时,将atom_segment_body_i存储在记录表项中的file_path字段中,向tbl_atom_segment_body表中新增表项(atom_segment_body_i_md5,1,1,null,file_path)。
在完成对mail_data中所有原子段段体进行上述操作后,完成对待存储邮件的存储。
本申请实施例提供的邮件数据存储方法,通过在数据库中维护二张数据表,记录待存储邮件在存储过程中的各项信息,确保待存储邮件的邮件体能以原子段段体为单位进行存储,相同的原子段段体只在邮件客户端200中存储一次,如此可以减少邮件数据存储的存储冗余,节省存储资源。
第六实施例
本实施例提供一种在采用第五实施例中方式存储邮件数据的基础上,从邮件客户端200的本地存储空间中读取邮件的方法。
请参照图9,图9示出了一种读取邮件的流程示意图,下面对具体流程进行介绍。
步骤S901,接收从邮件客户端的存储空间读取一邮箱中邮件的请求;
步骤S902,根据待读取邮箱的邮箱标识,在压缩离线邮件数据表中查找待读取邮件的压缩邮件数据;
步骤S903,根据压缩邮件数据中各个原子段的段体标识,在第二段体信息表中查找各个原子段段体;
步骤S904,采用各个原子段段体替换压缩邮件数据中对应的段体标识,得到所需读取的邮件。
下面以具体示例进行说明。
假设邮件客户端200从本地存储空间读取一份uuid为08821a46-29dc-408d-80e7-fe64881bc34d的邮件。
首先,从tb2_mail_box表中根据uuid查找到该邮件压缩后的数据compressed_mail_data。
接着,解析compressed_mail_data中所有的“[特殊标记字符串]+原子段段体MD5+[特殊标记字符串]”,假设有n个,每一个原子段段体MD5使用atom_segment_body_i_md5来表示。
再接着,可以根据原子段段体的序列号i依次对邮件中的原子段段体进行以下操作:
从tb2_atom_segment_body表中查找到主键为atom_segment_body_i_md5的记录表项,记为record_i。检测record_i中的content_or_file字段是否为0,若content_or_file字段为0,取record_i的content字段的值替换compressed_mail_data中的“[特殊标记字符串]+atom_segment_body_i_md5+[特殊标记字符串]”;若content_or_file字段为1,读取record_i的file_path字段指向的文本文件的内容,用其内容替换compressed_mail_data中的“[特殊标记字符串]+atom_segment_body_i_md5+[特殊标记字符串]”。
最后,将得到的所有原子段段体atom_segment_body_i进行组合得到邮件数据mail_data。
本申请实施例提供的邮件数据读取方法,可以根据数据库中维护二张数据表中记录的各项信息,获取待读取邮件中邮件体的所有原子段段体,并通过组合这些原子段段体的方式获得邮件数据,确保在减少邮件数据存储冗余的情况下,邮件数据可读取。
第七实施例
本实施例提供一种在采用第五实施例中方式存储邮件数据的基础上,进行邮件删除的方法。
请参照图10,图10示出了一种删除邮件的流程示意图,下面对具体流程进行介绍。
步骤S1001,接收对邮件客户端本地存储的邮件进行删除的删除请求;
步骤S1002,根据待删除邮件的邮件数据标识在压缩离线邮件数据表中将该待删除邮件被引用次数进行减一处理;
步骤S1003,若减一处理后该待删除邮件被引用次数不大于零,从压缩离线邮件数据表中获得该待删除邮件的压缩邮件数据;
步骤S1004,将该待删除邮件的压缩邮件数据中的各个原子段段体的引用次数减一处理,若原子段段体的引用次数在减一处理后不大于零,将减一处理后引用次数不大于零的原子段段体从第二段体信息表中删除。
下面以具体示例进行说明。
假设邮件客户端200要从本地存储空间中删除一封uuid为08821a46-29dc-408d-80e7-fe64881bc34d的邮件。
首先,从tb2_mail_box表中根据uuid查找到该邮件压缩后的数据compressed_mail_data。
接着,解析compressed_mail_data中所有的“[特殊标记字符串]+原子段段体MD5+[特殊标记字符串]”,假设有n个,每一个原子段段体MD5使用atom_segment_body_i_md5来表示。
再接着,可以根据原子段段体的序列号i依次对邮件中的原子段段体进行以下操作:
从tb2_atom_segment_body表中查找到主键为atom_segment_body_i_md5的记录表项,记为record_i,将record_i的referer_num更新为referer_num-1。检测更新后的record_i的referer_num是否大于0,若更新后的record_i的referer_num大于0,不对该原子段段体的record_i进行处理;若更新后的record_i的referer_num不大于0,从tb2_atom_segment_body表中删除record_i,若record_i的file_path不为空,将file_path指向的文件一并删除。
最后,从tb2_mail_box表中删除主键为uuid的记录表项。
本申请实施例提供的邮件数据删除方法,可以根据数据库中维护二张数据表中记录的各项信息,从已存储的邮件数据中,删除该邮件数据对应的原子段段体,确保在减少邮件数据存储冗余的情况下,邮件数据可删除。
第八实施例
本申请实施例还提供一种邮件数据存储装置310,与上面实施例不同的是,本邮件数据存储装置310是从虚拟装置的角度描述本申请方案的。请参照图11,邮件数据存储装置310可以包括获取模块3101、计算模块3102、替换模块3103、检测模块3104及存储模块3105。
下面对上述各功能模块进行详细介绍。获取模块3101,用于获取待存储邮件,其中,待存储邮件包括邮件头和邮件体,邮件体包括至少一个原子段,每个原子段包括段头和段体。
可以理解的是,该获取模块3101用于执行上述步骤S401,关于获取模块3101的详细实施方式可以参照上述对步骤S401有关的内容。
计算模块3102,用于根据待存储邮件所包括的各个原子段段体,计算各个原子段的段体标识。
可以理解的是,该计算模块3102用于执行上述步骤S402,关于计算模块3102的详细实施方式可以参照上述对步骤S402有关的内容。
替换模块3103,用于利用所述各个原子段的段体标识替换待存储邮件中与该各个段体标识对应的原子段段体,得到待存储邮件对应的压缩邮件数据,并存储压缩邮件数据;
可以理解的是,该替换模块3103用于执行上述步骤S403,关于替换模块3103的详细实施方式可以参照上述对步骤S403有关的内容。
检测模块3104,用于利用各个原子段的段体标识替换待存储邮件中与该各个段体标识对应的原子段段体,得到待存储邮件对应的压缩邮件数据,并存储压缩邮件数据。
可以理解的是,该检测模块3104用于执行上述步骤S404,关于检测模块3104的详细实施方式可以参照上述对步骤S404有关的内容。
存储模块3105,用于若已存储有该任意一段体标识对应的原子段段体,则不将该原子段段体进行存储,若未存储有该任意一段体标识对应的原子段段体,则将该原子段段体进行存储。
可以理解的是,该存储模块3105用于执行上述步骤S405,关于存储模块3105的详细实施方式可以参照上述对步骤S405有关的内容。
如果上述功能以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得电子设备300执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(英文:Read-Only Memory,简称:ROM)、随机存取存储器(英文:Random Access Memory,简称:RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (12)
1.一种邮件数据存储方法,其特征在于,应用于电子设备,所述方法包括:
获取待存储邮件,所述待存储邮件包括邮件头和邮件体,所述邮件体包括至少一个原子段,每个原子段包括段头和段体;
根据所述待存储邮件所包括的各个原子段段体,计算所述各个原子段的段体标识;
利用所述各个原子段的段体标识替换所述待存储邮件中与各个段体标识对应的原子段段体,得到所述待存储邮件对应的压缩邮件数据,并存储所述压缩邮件数据;
根据所述压缩邮件数据中的任意一段体标识,检测所述电子设备中是否已经存储该任意一段体标识对应的原子段段体;
若已存储有该任意一段体标识对应的原子段段体,则不将该原子段段体进行存储,若未存储有该任意一段体标识对应的原子段段体,则将该原子段段体进行存储;
其中,在所述电子设备为邮件服务器的情况下,所述邮件服务器中存储有第一段体信息表,所述第一段体信息表包括各个原子段段体的引用次数、段体内容和段体的存储路径,此时所述若未存储有该任意一段体标识对应的原子段段体,则将该原子段段体进行存储,包括:
若未存储该任意一段体标识对应的原子段段体,则将该原子段段体存储至所述第一段体信息表中,并将该原子段段体的引用次数配置为一,其中所述将该原子段段体存储至所述第一段体信息表中的步骤包括:
比较该原子段段体的数据量与预设数据量阈值之间的大小关系;
若该原子段段体的数据量不大于所述预设数据量阈值,则将该原子段段体存储至所述第一段体信息表包括的段体内容中;
若该原子段段体的数据量大于所述预设数据量阈值,则将该原子段段体存储至所述邮件服务器包括的文件***中,并将该原子段段体存储至所述文件***的存储路径保存至所述第一段体信息表包括的存储路径中。
2.如权利要求1所述的方法,其特征在于,所述邮件头中包括邮箱标识,所述邮件服务器中还存储压缩邮件数据表以及邮箱邮件记录表;所述压缩邮件数据表包括邮件数据标识及压缩邮件数据,所述邮箱邮件记录表包括邮箱标识及邮件数据标识;所述方法还包括:
根据所述待存储邮件的邮件头和邮件体,计算所述待存储邮件的邮件数据标识;
将所述邮箱标识及所述邮件数据标识对应存储至所述邮箱邮件记录表中;
查找所述压缩邮件数据表中是否存在所述邮件数据标识;
若不存在所述邮件数据标识,则将所述邮件数据标识存储在所述压缩邮件数据表中。
3.如权利要求2所述的方法,其特征在于,所述压缩邮件数据表还包括邮件被引用的次数,所述方法还包括:
若存在所述邮件数据标识,则将所述待存储邮件对应的邮件被引用的次数加一。
4.如权利要求3所述的方法,其特征在于,所述第一段体信息表还包括原子段的段体标识;所述根据所述压缩邮件数据中的任意一段体标识,检测所述电子设备中是否已经存储该任意一段体标识对应的原子段段体,包括:
查找所述第一段体信息表中是否存在所述压缩邮件数据中的任意一段体标识;
若存在,则确定已存储所述段体标识对应的原子段体;否则,确定未存储所述段体标识对应的原子段体。
5.如权利要求4所述的方法,其特征在于,所述若已存储有该任意一段体标识对应的原子段段体,则不将该原子段段体进行存储,包括:
若已存储该任意一段体标识对应的原子段段体,则将该原子段段体的引用次数加一。
6.如权利要求4所述的方法,其特征在于,所述方法还包括:
接收对一邮箱中的邮件进行下载的下载请求;
根据所述邮箱的邮箱标识,在所述邮箱邮件记录表中查找待下载邮件的邮件数据标识,并根据查找的邮件数据标识在所述压缩邮件数据表查找该邮件数据标识对应的压缩邮件数据;
根据查找到的压缩邮件数据中各个原子段的段体标识,在所述第一段体信息表中查找各个原子段段体;
采用各个原子段段体替换压缩邮件数据中对应的段体标识,得到所需下载的邮件。
7.如权利要求6所述的方法,其特征在于,所述第一段体信息表还包括存储位置,所述根据查找到的压缩邮件数据中各个原子段的段体标识,在所述第一段体信息表中查找各个原子段段体,包括:
根据存储位置,检测原子段的段体存储在段体内容还是存储路径中;
若存储在段体内容中,从所述第一段体信息表中的段体内容中获得原子段的段体;
若存储在存储路径中,根据所述第一段体信息表的存储路径中的存储路径获得原子段的段体。
8.如权利要求5-7中任意一项所述的方法,其特征在于,所述方法还包括:
接收对一邮箱中的邮件进行删除的删除请求;
根据该邮箱的邮箱标识在所述邮箱邮件记录表中,查找待删除邮件的邮件数据标识;
根据所述待删除邮件的邮件数据标识在所述压缩邮件数据表中将该待删除邮件被引用次数减一处理;
若减一处理后该待删除邮件被引用次数不大于零,从所述压缩邮件数据表中获得该待删除邮件的压缩邮件数据;
将压缩邮件数据中的各个原子段段体的引用次数减一处理,若原子段段体的引用次数在减一处理后不大于零,将减一处理后引用次数不大于零的原子段段体从所述第一段体信息表中删除。
9.如权利要求1所述的方法,其特征在于,在所述电子设备为邮件客户端的情况下,所述邮件头中包括邮箱标识,所述邮件客户端存储有第二段体信息表及压缩离线邮件数据表,所述第二段体信息表包括各个原子段的段体标识、原子段段体的引用次数、段体内容和段体的存储路径,所述压缩离线邮件数据表包括邮箱标识及压缩邮件数据,所述方法还包括:
根据所述待存储邮件的邮件头和邮件体,计算所述待存储邮件的邮件数据标识;
查找所述压缩离线邮件数据表中是否存在所述邮件数据标识;
若不存在所述邮件数据标识,则将所述邮件数据标识存储在所述压缩离线邮件数据表中;
所述根据所述待存储邮件所包括的各个原子段段体,计算所述各个原子段的段体标识包括:
在所述第二段体信息表中查找是否存在所述压缩邮件数据中的任意一段体标识;
若存在,则确定已存储所述段体标识对应的原子段体;否则,确定未存储所述段体标识对应的原子段体;
所述若未存储有该任意一段体标识对应的原子段段体,则将该原子段段体进行存储,包括:
在所述邮件客户端未存储该任意一段体标识对应的原子段段体时,比较该原子段段体的数据量与预设数据量阈值之间的大小;在该原子段段体的数据量不大于预设数据量阈值时,将该原子段段体存储到所述段体内容中,并将该原子段段体的引用次数进行加一处理;在该原子段的段体数据量大于预设数据量阈值时,将该原子段段体存储到所述邮件客户端的文件***中,并将对应的存储路径保存在所述存储路径中,并将该原子段段体的引用次数进行加一处理。
10.如权利要求9所述的方法,其特征在于,所述方法还包括:
接收从所述邮件客户端的存储空间读取一邮箱中邮件的请求;
根据待读取邮箱的邮箱标识,在所述压缩离线邮件数据表中查找待读取邮件的压缩邮件数据;
根据压缩邮件数据中各个原子段的段体标识,在所述第二段体信息表中查找各个原子段段体;
采用各个原子段段体替换压缩邮件数据中对应的段体标识,得到所需读取的邮件。
11.如权利要求10所述的方法,其特征在于,所述方法还包括:
接收对所述邮件客户端本地存储的邮件进行删除的删除请求;
根据待删除邮件的邮件数据标识在所述压缩离线邮件数据表中将该待删除邮件被引用次数进行减一处理;
若减一处理后该待删除邮件被引用次数不大于零,从所述压缩离线邮件数据表中获得该待删除邮件的压缩邮件数据;
将该待删除邮件的压缩邮件数据中的各个原子段段体的引用次数减一处理,若原子段段体的引用次数在减一处理后不大于零,将减一处理后引用次数不大于零的原子段段体从所述第二段体信息表中删除。
12.一种邮件数据存储装置,其特征在于,应用于电子设备,所述装置包括:
获取模块,用于获取待存储邮件,其中,所述待存储邮件包括邮件头和邮件体,所述邮件体包括至少一个原子段,每个原子段包括段头和段体;
计算模块,用于根据所述待存储邮件所包括的各个原子段段体,计算所述各个原子段的段体标识;
替换模块,用于利用所述各个原子段的段体标识替换所述待存储邮件中与各个段体标识对应的原子段段体,得到所述待存储邮件对应的压缩邮件数据,并存储所述压缩邮件数据;
检测模块,用于根据所述压缩邮件数据中的任意一段体标识,检测所述电子设备中是否已经存储该任意一段体标识对应的原子段段体;
存储模块,用于若已存储有该任意一段体标识对应的原子段段体,则不将该原子段段体进行存储,若未存储有该任意一段体标识对应的原子段段体,则将该原子段段体进行存储;
其中,在所述电子设备为邮件服务器的情况下,所述邮件服务器中存储有第一段体信息表,所述第一段体信息表包括各个原子段段体的引用次数、段体内容和段体的存储路径,此时所述存储模块在所述邮件服务器未存储有任意一段体标识对应的原子段段体时,将该原子段段体进行存储的方式,包括:
若未存储该任意一段体标识对应的原子段段体,则将该原子段段体存储至所述第一段体信息表中,并将该原子段段体的引用次数配置为一,其中所述将该原子段段体存储至所述第一段体信息表中的执行过程包括:
比较该原子段段体的数据量与预设数据量阈值之间的大小关系;
若该原子段段体的数据量不大于所述预设数据量阈值,则将该原子段段体存储至所述第一段体信息表包括的段体内容中;
若该原子段段体的数据量大于所述预设数据量阈值,则将该原子段段体存储至所述邮件服务器包括的文件***中,并将该原子段段体存储至所述文件***的存储路径保存至所述第一段体信息表包括的存储路径中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911005109.3A CN110830361B (zh) | 2019-10-22 | 2019-10-22 | 邮件数据存储方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911005109.3A CN110830361B (zh) | 2019-10-22 | 2019-10-22 | 邮件数据存储方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110830361A CN110830361A (zh) | 2020-02-21 |
CN110830361B true CN110830361B (zh) | 2021-12-07 |
Family
ID=69549927
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911005109.3A Active CN110830361B (zh) | 2019-10-22 | 2019-10-22 | 邮件数据存储方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110830361B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115580594B (zh) * | 2022-12-12 | 2023-05-09 | 四川大学 | 一种电子邮件处理传输方法、***和存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000194617A (ja) * | 1998-12-24 | 2000-07-14 | Nec Corp | 電子メール蓄積方法と電子メール蓄積装置 |
CN1735077A (zh) * | 2004-08-12 | 2006-02-15 | 上海华为技术有限公司 | 群发邮件处理方法 |
CN101599091A (zh) * | 2002-10-30 | 2009-12-09 | 河床技术股份有限公司 | 用于存储器中数据压缩的基于内容的分段模式及包括等级分段表示的传输 |
CN103823807A (zh) * | 2012-11-16 | 2014-05-28 | 深圳市腾讯计算机***有限公司 | 一种去除重复数据的方法、装置及*** |
CN103970852A (zh) * | 2014-05-06 | 2014-08-06 | 浪潮电子信息产业股份有限公司 | 一种备份服务器的数据重删方法 |
US8904137B1 (en) * | 2011-05-12 | 2014-12-02 | Symantec Corporation | Deduplication system space recycling through inode manipulation |
CN104504093A (zh) * | 2014-12-27 | 2015-04-08 | 宁波江东远通计算机有限公司 | 一种分布式邮件的存储与读取方法及装置 |
CN105871705A (zh) * | 2016-06-07 | 2016-08-17 | 北京赛思信安技术股份有限公司 | 海量电子邮件分析处理过程中的电子邮件内容重复判断的方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8401996B2 (en) * | 2009-03-30 | 2013-03-19 | Commvault Systems, Inc. | Storing a variable number of instances of data objects |
US9111261B2 (en) * | 2010-04-23 | 2015-08-18 | International Business Machines Corporation | Method and system for management of electronic mail communication |
US9646016B2 (en) * | 2014-02-20 | 2017-05-09 | 2Mandarins Ltd. | Methods circuits apparatuses systems and associated computer executable code for data deduplication |
-
2019
- 2019-10-22 CN CN201911005109.3A patent/CN110830361B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000194617A (ja) * | 1998-12-24 | 2000-07-14 | Nec Corp | 電子メール蓄積方法と電子メール蓄積装置 |
CN101599091A (zh) * | 2002-10-30 | 2009-12-09 | 河床技术股份有限公司 | 用于存储器中数据压缩的基于内容的分段模式及包括等级分段表示的传输 |
CN1735077A (zh) * | 2004-08-12 | 2006-02-15 | 上海华为技术有限公司 | 群发邮件处理方法 |
US8904137B1 (en) * | 2011-05-12 | 2014-12-02 | Symantec Corporation | Deduplication system space recycling through inode manipulation |
CN103823807A (zh) * | 2012-11-16 | 2014-05-28 | 深圳市腾讯计算机***有限公司 | 一种去除重复数据的方法、装置及*** |
CN103970852A (zh) * | 2014-05-06 | 2014-08-06 | 浪潮电子信息产业股份有限公司 | 一种备份服务器的数据重删方法 |
CN104504093A (zh) * | 2014-12-27 | 2015-04-08 | 宁波江东远通计算机有限公司 | 一种分布式邮件的存储与读取方法及装置 |
CN105871705A (zh) * | 2016-06-07 | 2016-08-17 | 北京赛思信安技术股份有限公司 | 海量电子邮件分析处理过程中的电子邮件内容重复判断的方法 |
Non-Patent Citations (2)
Title |
---|
"SAFE: Structure-aware file and email deduplication for cloud-based storage systems";Daehee Kim,等;《2013 IEEE 2nd International Conference on Cloud Networking (CloudNet)》;20140116;第130-137页 * |
王灿." 基于在线重复数据消除的海量数据处理关键技术研究".《中国博士学位论文全文数据库信息科技辑》.2012,I138-4. * |
Also Published As
Publication number | Publication date |
---|---|
CN110830361A (zh) | 2020-02-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11115361B2 (en) | Apparatus and method for maintaining a message thread with opt-in permanence for entries | |
US20230039505A1 (en) | Maintaining a message thread with opt-in permanence for entries | |
US8073822B2 (en) | Method and apparatus for managing electronic messages | |
CN101686209B (zh) | 消息转发***中存储消息的方法和装置 | |
CN106933614B (zh) | 一种单页面应用升级方法及装置 | |
US20110142071A1 (en) | Consolidating duplicate messages for a single destination on a computer network | |
CN102769687B (zh) | 信息群发***及方法 | |
US20110173272A1 (en) | Filtering of electonic mail messages destined for an internal network | |
US20090100183A1 (en) | Detection of Missing Recipients in Electronic Messages | |
KR100747466B1 (ko) | 추가 속성을 가지는 노드를 이용하는 장치 관리 방법 및장치 관리 클라이언트 | |
CN107800610B (zh) | 服务器、客户端、邮件显示方法及*** | |
CN110968431A (zh) | 一种消息处理方法、装置及设备 | |
US9667737B2 (en) | Publisher-assisted, broker-based caching in a publish-subscription environment | |
US9185181B2 (en) | Shared cache for potentially repetitive message data in a publish-subscription environment | |
US20080294743A1 (en) | Information processing device, computer readable recording medium, and information processing method | |
CN110830361B (zh) | 邮件数据存储方法及装置 | |
CN103503388B (zh) | 一种分布式队列消息读取方法及设备、*** | |
US8782148B2 (en) | Managing redundancy in electronic mail messages | |
US9131005B2 (en) | Broker designation and selection in a publish-subscription environment | |
CN105359117B (zh) | 邮件服务器、邮件发送/接收方法和邮件发送/接收程序 | |
US20120215858A1 (en) | Caching potentially repetitive message data in a publish-subscription environment | |
US20160085638A1 (en) | Computer system and method of identifying a failure | |
JP7347533B2 (ja) | 管理装置、管理方法、及び、プログラム | |
US11736595B2 (en) | Exchange of messages split into fragments for different recipients on client side | |
US8380687B1 (en) | Method and apparatus for providing a message trail of conversationally related messages |
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 |