MailABC是科普电子邮件知识的个人Blog,接受交换友链。您可以关注公众号mailabc留言,或邮件联系feedback@mailabc.cn 。

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

邮箱运维 小胡子大魔王 4个月前 (07-10) 290次浏览 0个评论

开源邮件系统数据存储

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

Mbox格式

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

Maildir格式

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

Maildir格式示例

Mbx格式

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

Mbox与Maildir存储格式对比

主流观点认为Maildir在数据存储安全性、存储效率、并发访问效率、搜索效率、扩展能力方面均要优于Mbox。主要原因在于Mbox是多封邮件存储在一个文件中,涉及到文件锁。Maildir也有自身的缺点,Maildir较依赖文件系统,尤其是依赖对目录的索引能力,用ReiserFS会比较快,对于超大型的Maildir,读写性能将受到考验。相对而言,Mbox则不存在这个问题。
参考来源:
1. 关于Mbox与Maildir两种格式的性能比较:http://www.courier-mta.org/mbox-vs-maildir/
2. Maildir格式介绍:https://cr.yp.to/proto/maildir.html
3. Mbox格式介绍:http://qmail.org/qmail%2Dmanual%2Dhtml/man5/mbox.html
4. https://www.cnblogs.com/valentine/archive/2011/04/21/2023393.html

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. https://blog.csdn.net/kepa520/article/details/47054457
3. https://learn.microsoft.com/zh-cn/windows/win32/extensible-storage-engine/database-overview

Coremail 数据存储

Coremail作为国内主流的电子邮件系统,据公开资料显示,其采用了独有的“信筒”模型,并结合预读缓写等机制,这一设计极大地减少了实际的磁盘I/O操作次数,使得在相同的硬件设备条件下,Coremail能够实现更高的性能与更强的稳定性。在Coremail系统中,邮件数据通过创新的“信桶”存储机制进行管理,每个“信桶”能够存储多封邮件,并且这些邮件在存储时会应用加密和压缩技术,确保数据安全的同时优化存储效率。用户访问邮件时,只能通过邮件索引来读取相应的邮件数据,这一设计增强了数据访问的安全性和有序性。
Coremail系统将邮件数据和邮件索引数据分开存储,这两部分数据分别由不同的模块负责处理。每个模块都配备了高效的Cache机制,这一特性显著提升了数据的读写速度,为用户带来更加流畅的使用体验。索引与数据分离的设计模式还为Coremail系统提供了邮件数据单副本的能力。这意味着,一封同时发送给多个收件人的邮件,在系统中实际上仅需要在“信桶”中存储一次,之后只需分别更新每位用户的邮件索引即可。这种巧妙的设计模式极大地节约了存储空间,提高了系统资源的利用效率。
Coremail存储示意图

Coremail数据存储示意图

注意:上图根据公开资料整理而来,非Coremail官方提供,仅供参考。如需获取更准确的信息,建议联系Coremail官方(www.coremail.cn)获取。
参考资料:
1.https://baike.baidu.com/item/coremail%E9%82%AE%E4%BB%B6%E7%B3%BB%E7%BB%9F

未标注来源的文章均为原创作品,版权所有,转载请注明出处。非原创文章均已标注来源,如有侵权请告知。 如您喜欢本站,可以收藏加关注(扫码关注右上角微信公众号mailabc)。
喜欢 (2)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址