Exchange、Coremail、Postfix 等主流邮件系统数据存储格式介绍

本文主要介绍主流邮件系统(如Exchange、Coremail、Postfix)的数据存储格式,旨在帮助大家对邮件系统的底层结构有更深刻的认识。由于小编能力有限,文中难免存在疏漏与不足之处,恳请各位读者指正。

1. 开源邮件系统数据存储

在开放源代码的世界里,主流电子邮件服务主要有Sendmail、Qmail、Postfix。存储格式最流行的有两种:Mbox和Maildir,它们都是开放的存储格式,因此兼容性比较好。

1.1 Mbox格式

Mbox格式是在基于UNIX的邮件服务器上存储邮件的传统方式。单独的邮件消息只是简单地连接在一起,并保存在一个文件中。在一条消息结束和下一条消息开始的地方放置一个特殊的标记。只有一个进程可以以读写模式访问Mbox文件。并发访问需要一个锁定机制。任何时候,当有人需要更新Mbox文件时,其他所有人都必须等待更新完成。

1.2 Maildir格式

Maildirs最初是在Qmail邮件服务器中实现的,据说是为了解决mbox文件的不足之处。单独的邮件消息保存在单独的文件中,每条消息一个文件。每个文件的命名都有明确的方法。向Maildir中添加新邮件的流程也是确定的。不需要锁定。多个进程可以同时使用Maildirs。

Maildir格式示例

Maildir格式示例

1.3 Mbx格式

Mbx存储格式是UW-IMAP服务器提供的原始Mbox格式的一个略有修改的版本。Mbx邮箱仍然需要锁定。与Mbox格式的主要区别在于,文件中的每条消息之前都有一个记录,该记录携带一些特定于消息的元数据。因此,过去需要重写整个Mbox文件才能执行的一些操作,现在可以通过更新固定大小的头部记录来实现。

1.4 Mbox与Maildir存储格式对比

主流观点认为Maildir在数据存储安全性、存储效率、并发访问效率、搜索效率、扩展能力方面均要优于Mbox。主要原因在于Mbox是多封邮件存储在一个文件中,涉及到文件锁。Maildir也有自身的缺点,Maildir较依赖文件系统,尤其是依赖对目录的索引能力,用ReiserFS会比较快,对于超大型的Maildir,读写性能将受到考验。相对而言,Mbox则不存在这个问题。

参考来源:

1. 关于Mbox与Maildir两种格式的性能比较:http://www.courier-mta.org - Benchmarking mbox versus maildir

2. Maildir格式介绍:https://cr.yp.to/proto/maildir.html

3. Mbox格式介绍:mbox(5)

4. https://www.cnblogs.com/valentine/archive/2011/04/21/2023393.html

2. Exchange Server数据存储

Exchange服务器的存储是由可扩展存储引擎 (ESE)来管理的。这个ESE引擎是微软专门为保存非关系型数据而开发,目前在微软的很多产品中都有广泛的应用,如:AD数据库、DHCP、WINS、SRS等等。ESE是一个数据库引擎,它以逻辑顺序存储信息。可以按顺序检索信息,也可以通过访问定义的索引来检索信息。数据库汇报是使用事务实现的,以确保安全操作。ESE 允许同时访问多个数据库,包括可用于系统恢复的事务日志文件数据库。ESE 可缩放到大型或小型应用程序。

Exchange的数据库是由EDB文件、STM文件和LOG文件组成的(注:不同版本会有不同,请注意甄别)。在这些文件里,微软使用了“B+树”的内部数据结构。ESE的引擎的任务之一,就是当IS服务(Information Store)请求访问数据库的时候,把这些请求转化为对内部数据结构的读写访问。B+树的特点是能够对存储在硬盘上的数据提供快速访问能力。微软利用“B+树”作为ESE的后台结构的主要原因,就是尽可能的提高访问数据时I/O性能。

ESE数据库示例

ESE数据库示例

参考来源:

1. http://www.5dmail.net/html/2004-11-12/20041112170608.htm

2. 深入剖析EXCHANGE SERVER的邮件存储和日志_微软 exchangeservice 数据库用的啥-CSDN博客

3.数据库概述 - Win32 apps | Microsoft Learn

3. Coremail 数据存储

Coremail作为国内主流的电子邮件系统,据公开资料显示,其采用了独有的“信筒”模型,并结合预读缓写等机制,这一设计极大地减少了实际的磁盘I/O操作次数,使得在相同的硬件设备条件下,Coremail能够实现更高的性能与更强的稳定性。在Coremail系统中,邮件数据通过创新的“信桶”存储机制进行管理,每个“信桶”能够存储多封邮件,并且这些邮件在存储时会应用加密和压缩技术,确保数据安全的同时优化存储效率。用户访问邮件时,只能通过邮件索引来读取相应的邮件数据,这一设计增强了数据访问的安全性和有序性。

Coremail系统将邮件数据和邮件索引数据分开存储,这两部分数据分别由不同的模块负责处理。每个模块都配备了高效的Cache机制,这一特性显著提升了数据的读写速度,为用户带来更加流畅的使用体验。索引与数据分离的设计模式还为Coremail系统提供了邮件数据单副本的能力。这意味着,一封同时发送给多个收件人的邮件,在系统中实际上仅需要在“信桶”中存储一次,之后只需分别更新每位用户的邮件索引即可。这种巧妙的设计模式极大地节约了存储空间,提高了系统资源的利用效率。

Coremail存储示意图

Coremail数据存储示意图

注意:上图根据公开资料整理而来,非Coremail官方提供,仅供参考。如需获取更准确的信息,建议联系Coremail官方(www.coremail.cn)获取。

参考来源:Exchange、Coremail、Postfix 等主流邮件系统数据存储格式介绍 | MailABC邮件知识百科

  • 12
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值