Maildir 和 Mbox 之间有哪些实际区别?

Maildir 和 Mbox 之间有哪些实际区别?

虽然我了解这两种存储格式的基本知识(Maildir 下每封电子邮件 1 个文件 vs. mbox 下每个邮箱 1 个文件),但我想知道这两者的实际含义是什么 -

  • 一种存储格式是否比另一种更具可扩展性?
  • 是否存在数据完整性问题/差异?
  • 是否存在明确定义的情况,在哪些情况下应该使用一种格式而不是另一种格式?

答案1

不要从 postfix 管理邮箱。永远不要。重定向邮件,通过具有适当功能的 POP/IMAP 服务器进行传送。对于 dovecot,dovecot-ldaakadeliver可以做所有事情,甚至更多,例如用户控制的邮件过滤、配额管理、自动回复等。

无论如何,maildir 是一种较新且更受欢迎的格式,因为与邮箱相比,它有很多改进。Maildir 为每个文件夹都提供了一个索引,可以控制重复项、过期时间,甚至全文搜索。此外,maildir 在处理大量邮件时速度明显更快。Dovecot 可以轻松操作包含 30 万封邮件的 maildir,速度没有任何明显的减慢。邮箱这么大本身就是一个问题。此外,大多数现代 POP/IMAP 服务器都有很多实用程序,可用于大型基础设施中的常见任务。

答案2

如果您使用 NFS 存储邮件,不要在任何情况下都使用 mbox。如果您想要一个可扩展的解决方案,Maildir 是最佳选择。

mbox 格式的主要问题是文件锁定 - 如果您有多个邮件服务器,或者多个进程同时尝试访问邮箱,则邮箱损坏的风险很大。此外,检查邮箱并删除大量邮件也很困难,例如当您遭遇退回风暴时。

当您拥有多个邮件服务器或一台服务器上的多个进程时,Maildir 可以无故障运行,并在 IMAP 或 POP 服务器访问同一帐户的同时向该帐户发送电子邮件。

Maildir 的主要问题是,如果您使用的文件系统在处理过多 inode 时会变慢,并且您的备份系统不擅长处理多个文件。至于文件系统,当我在 ISP 担任电子邮件系统管理员时,VXFS 是最好的选择。对于备份,我没有任何建议;不幸的是,它们中的大多数似乎是为处理数据库服务器而不是处理大量小文件而设计的。

答案3

解决具体问题:

一种存储格式是否比另一种更具可扩展性?

mbox 越大就越难管理。由于它将所有内容都存储在一个大 blob 中,因此很难增量备份,并且这种访问会在备份过程中锁定 mbox 以防止写入。如果出现损坏,则修复或恢复会变得更加困难 - 可以说,存储的邮件越多,风险就越大。

Maildir 的可扩展性依赖于底层文件系统,因为它通常会创建许多小文件,每封邮件一个。如果您有很多电子邮件,Maildir 通常更容易处理,也更快捷。

是否存在数据完整性问题/差异?

是的,主要问题是 mbox 需要对整个档案进行读/写文件锁定,这意味着读取必须等待写入,并且每个单独的写入必须等待所有其他访问。如果以无法锁定的方式使用它,例如通过 NFS 共享,档案很容易损坏。任何随机损坏都可能影响整个档案,而不是单个消息。

使用 Maildir,对于大多数操作,锁定可以在单个邮件级别进行,任何文件的损坏都只会影响该邮件。如果需要,可以从邮件本身重建邮件中的任何索引。

是否存在明确定义的情况,在哪些情况下应该使用一种格式而不是另一种格式?

更确切地说,Maildir 开始取代 mbox 成为普遍首选的格式,而且没有任何明显的缺点。

它的主要限制是它会创建很多很多小文件,这可能会给某些文件系统带来压力,并且/或者效率低下(具体取决于文件系统集群大小)。对于现代文件系统来说,这不是什么大问题。它还可以告知您的备份策略,但总的来说,它确实为您的备份策略选择提供了更大的灵活性。

答案4

Mbox 在邮箱内搜索文本并将新邮件附加到邮件文件时速度很快,但它容易损坏邮件,并且可能与网络文件系统发生问题。此外,文件锁定可能是一个问题。

使用 Maildir,检索特定邮件的速度更快,并且不会因文件锁定或网络文件系统而出现问题(例如:使用 Maildir,您可以将不同的邮件文件夹存储在不同的 NFS 共享中,而使用 Mbox 则无法实现这一点)。当文件系统无法高效处理大量文件时,您可能会遇到 Maildir 问题。

我知道您需要一个可扩展的解决方案,在您选择一个或另一个之前,请务必阅读此文档:(即使您不使用 Courier)

对 mbox 与 maildir 进行基准测试

相关内容