版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。
本文网址:http://www.hzqbbc.com/blog/arch/2005/06/mbox_vs_maildir.html

June 27, 2005

Mbox vs Maildir - 两者原理和区别

在开放源代码的世界里,电子邮件服务器最主流的目前有三种,分别是sendmail, qmail, postfix。而存储格式最流行的有两种,Mbox和Maildir,它们都是开放的存储格式,因此兼容性比较好。

而mbox和maildir的历史,却不为大多数用户所了解。今天和一个朋友聊到mbox和maildir哪个好,顺便搜集一下mbox和maildir的资料,谈谈这两者的原理和区别,以及应该如何做选择。

Mbox的历史较Maildir悠久,sendmail支持mbox,qmail和postfix都支持mbox,其主要特点就是“所有邮件都存放到一个文件里”。每个邮件之间以特定的标记分割。

而Maildir则相反,每一封邮件保存成一个文件,每个文件名称一般有一定的规律,例如会包含时间戳、pid及inode节点号等。

除了mbox和maildir格式外,还有一个叫mbx的格式,它是对mbox的改进版本。主要用在UW-IMAP server里。它最大的特点是有一个针对mbox文件的索引,能改善读/写性能。但依然需要file lock。

随着qmail/postfix的普及,以及mbox的一些问题暴露,maildir得到了越来越多的应用。其中mbox的最主要问题是文件缩定(file lock),其次是大多数update操作的效能问题。

以下是引自courier-mta.org上的mbox和maildir的测试对比文章,介绍了mbox和maildir:

mbox mail storage format

This is the traditional way to store mail on UNIX-based mail servers.
Individual messages are simply concatenated together, and saved in a
single file. A special marker is placed where one message ends and the
next message begins. Only one process can access the mbox file in
read/write mode. Concurrent access requires a locking mechanism. Anytime
someone needs to update the mbox file, everyone else must wait for the
update to complete.

maildir mail storage format

Maildirs were originally implemented in the Qmail mail server, supposedly
to address the inadequacies of mbox files. Individual messages are saved
in separate files, one file per message. There is a defined method for
naming each file. There's a defined procedure for adding new messages to
the maildir. No locking is required. Multiple processes can use maildirs
at the same time.

mbx mail storage format

This is a slightly modified version of the original mbox format that's offered by the UW-IMAP server. mbx mailboxes still require locking. The
main difference from the mbox format is that each message in the file is
preceded by a record that carries some message-specific metadata. As
such, certain operations that used to require the entire mbox file to be
rewritten can now be implemented by updating the fixed-size header
record.

This benchmark focuses mainly on the mbox and maildirs formats. In March of 2003 an unrelated party conducted a similar benchmark for mbx
formats. See http://www.decisionsoft.com/pdw/mailbench.html
for more details.

Mbox vs Maildir之优缺点比较

这里给出一个基本的特性对比,读者很容易就清楚根据自己的应用到底应该选什么存储格式:

可靠性
优选是Maildir,因为mbox只有一个文件,一旦出问题之后,所有邮件都将损毁。

更新速度
这里主要指的是删除/增加邮件的能力,无疑Maildir完胜Mbox

搜索速度
这点Mbox因为是单文件,因此搜索的能力要强于maildir

并发访问能力
对于繁忙的邮件系统,多个进程同时访问同一封邮件是可能的事情,Mbox需要flock()的支持,而且如果某一个进程操作时间长,则其他所有进程都堵塞了。Maildir没有这个问题。在NFS等网络文件系统上,Maildir相对安全,Mbox不能用于此类型环境

扩充能力
现在的邮箱已经不是5年前甚至10年前的1MB,2MB而是100,200甚至1G/2G,Mbox应付那么大的容量已力不从心,无疑Maildir是比较适合的。

文件系统依赖
Maildir较依赖文件系统,尤其是依赖对目录的索引能力,用ReiserFS会比较快,对于超大型的maildir,读写性能将受到考验。相对而言Mbox则不存在这个问题。

综合结论

推荐使用Maildir格式,安全可靠,绝大部分操作都远快于Mbox。而且现今支持Maildir的软件越来越多,qmail/Postfix 都支持。

一些有用的链接

原理标准
http://cr.yp.to/proto/maildir.html
http://www.qmail.org/qmail-manual-html/man5/mbox.html

Benchmark/比较
http://www.courier-mta.org/mbox-vs-maildir/
http://www.decisionsoft.com/pdw/mailbench.html

转换工具
http://www.qmail.org/mbox2maildir
http://batleth.sapienti-sat.org/projects/mb2md/

转载于:https://blog.51cto.com/vicar/698856

Mbox vs Maildir - 两者原理和区别相关推荐

  1. 随机森林RF、XGBoost、GBDT和LightGBM的原理和区别

    随机森林RF.XGBoost.GBDT和LightGBM的原理和区别 https://www.cnblogs.com/hugechuanqi/p/10554156.html

  2. 旋转校正原理_「牛车实验室」四轮定位和动平衡如何选择?趣谈两种项目的原理和区别...

    [资讯-牛车网] 四轮定位和动平衡早已是大家耳熟能详的项目了,但在实际生活中我们发现,有的车主更换轮胎后去做了四轮定位,有的车主车轮被撞后去做了动平衡,整一个满拧,车子开起来反而不顺手了--那么今天, ...

  3. Dos攻击与DDos攻击原理与区别,怎么防护?

    Dos攻击与DDos攻击原理与区别,怎么防护? 1.原理: 1)DOS(Denial of Service)攻击,即拒绝服务,其主要危害是使计算机或网络无法提供正常的服务. 常见的DOS攻击手段有Te ...

  4. 浅谈iOS和Android后台实时消息推送的原理和区别

    http://www.52im.net/thread-286-1-1.html 前言 iOS和Android上的实时消息推送差异很大,往小了说是技术实现的差异,往大了说是系统实现理念的不同.实时消息推 ...

  5. 网桥和NAT原理和区别祥解

    网桥和NAT原理和区别祥解 网络桥接: 真机上的网卡是一个真实的物理设备,真机与外界进行通信需要网卡这个设备,网卡是由内核进行控制的真机上的虚拟机也是一个真实的设备,但是这个虚拟机的网卡是虚拟的,它也 ...

  6. 图文并茂,讲解TCP和UDP协议的原理以及区别

    TCP和UDP协议的区别以及原理 最近重新认知了一下TCP和UDP的原理以及区别,做一个简单的总结. 一.作用 首先,tcp和udp都是工作在传输层,用于程序之间传输数据的.数据一般包含:文件类型,视 ...

  7. Bagging与Boosting算法的原理与区别,Boosting算法之一Adaboost原理与代码实现

    1. Bagging和Boosting的原理与区别 在讲解Boosting之前,必须提一下Bagging算法.两者作为机器学习中集成学习的主要算法,其思想是必须理解和掌握的.总的来说Bagging和B ...

  8. LoRa终端两种入网方式OTAA与ABP工作原理的区别

    在之前的文章中介绍了"LoRa终端如何以OTAA方式入网TTN服务器",现在为大家介绍LoRa终端两种入网方式OTAA与ABP工作原理的区别,此文来自微信公众号"小七说L ...

  9. atitit 交换机 汇聚上联 网络克隆和标准共享的原理与区别

    atitit.交换机 汇聚上联.网络克隆和标准共享的原理与区别 1. 标准共享(标准化模式)1 2. 汇聚上联trunk1 2.1. 使用场合1 2.2. 背景1 2.3. 实现原理2 3. 网络克隆 ...

最新文章

  1. ROS与深度相机入门教程:(2) 在ROS中驱动Intel D435i深度相机采集数据(遇到的问题)
  2. SilverLight学习笔记--建立Silverlight自定义控件(1)--外观设计
  3. 用 pytorch 实现 一个rnn
  4. 快速开发mina(翻译)
  5. python deque索引超出范围_Python基础语法
  6. 摩尔斯电码转换python编码_Morse Code 用Python做个摩斯密码转换器
  7. 双引擎驱动Quick BI十亿数据0.3秒分析,首屏展示时间缩短30%
  8. 晨哥真有料丨自信一点!恋爱做自己,不要自卑,不要迎合!
  9. 26_多线程_第26天(Thread、线程创建、线程池)
  10. QT 播放器之界面布局
  11. c语言仿宋gb2312字体,仿宋gb2312字体官方下载|仿宋gb2312字体下载官方版 - 维维软件园...
  12. 乐优商城遇到的坑(四)之前台门户系统之Search.html
  13. Mysql大字段blob返回是数字_innodb使用大字段text,blob的一些优化建议(转)
  14. win10系统详细安装教程一
  15. 三大中值定理及简单例题
  16. 第三方代付入帐是什么意思
  17. java实现掌阅Ireader签到领取阅饼
  18. 【ShaderToy】基础篇之谈谈点、线的绘制
  19. Debian学习笔记
  20. Linux私房菜学习笔记

热门文章

  1. AMESim数据导出方法
  2. activimq java集成_Java消息队列-Spring整合ActiveMq
  3. aspen plus v11使用教程_Aspen Plus11.0安装教程
  4. docker镜像启动后端口号是多少_初识Docker
  5. iphone模拟器_应用日报 | Xcode 现身 5.4 英寸 iPhone 模拟器,和平精英上线特斯拉皮肤...
  6. Python 基础知识 D5
  7. convex optimization from stanford
  8. keras下的线性回归实例
  9. 计算机应用技术和信息化,浅析企业计算机应用技术和信息化建设
  10. linux 修改php配置,PHP部署时的几个配置修改说明