Eudora和GMail的速度,例如通过浏览数以千计的电子邮件和找到正确的消息令我感到惊讶。我使用Eudora,在几秒钟内完成十年的电子邮件搜索非常快速。
所以我的问题是,他们如何存储和检索邮件?存储数据的哪些数据结构,索引,算法是什么?消息如何存储在磁盘/数据库中?
答案 0 :(得分:2)
如果搜索速度很慢,我会感到惊讶。比方说,你有n = 10000封电子邮件,每封m = 1000个字符。任何体面的子串检测算法都会给你O(n * m)的速度。对于n和m的提供值,它在现代PC上不到一秒。
谈到存储,我知道的客户将所有电子邮件放在一个大文件中,每个客户端都使用自己的格式。这使您可以合理快速地从磁盘读取所有消息。
如果你感兴趣,这是一个经典的子串搜索算法(还有更多):
http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm
修改强>
我没有声称任何电子邮件应用程序使用简单的子字符串搜索,只是使用它已经足够快了。
答案 1 :(得分:0)
两者都使用相同的秘诀,尽管采用完全不同的技术:索引。
Eudora为每个邮箱和文件夹使用mbox格式,这基本上是一个大文件,所有邮件都是一个接一个。如果您检查这些文件,则会看到一个名称和扩展名相同的较小文件.IDX或somthing。这是一个索引,可以快速查看各个电子邮件的开始位置。 Eudora的另一个明智之举就是删除了eamils上的附件,这使得大部分邮箱的数量减少了一个数量级,从而加快了管理过程中的管理速度。这使得Eudora能够管理比大多数其他客户端多一个数量级邮件的邮箱。
谷歌是索引的主人,他们几十年来一直在索引完整的网络,所以他们将他们的交易应用到你的邮箱,允许快速访问邮件,因为所有相关事实都是单独索引的。他们还有专门的技术来快速检索电子邮件等文件。