Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 电子邮件程序/服务器如何存储和检索邮件?_Algorithm_Data Structures - Fatal编程技术网

Algorithm 电子邮件程序/服务器如何存储和检索邮件?

Algorithm 电子邮件程序/服务器如何存储和检索邮件?,algorithm,data-structures,Algorithm,Data Structures,例如,Eudora和GMail浏览数千封电子邮件并找到正确的信息集的速度让我感到惊讶。我使用Eudora,搜索速度非常快,能在几秒钟内浏览十年的电子邮件 所以我的问题是,它们如何存储和检索消息?存储数据的数据结构、索引和算法是什么?消息是如何存储在磁盘/数据库中的?如果搜索速度慢,我会感到惊讶。比如说,你有n=10000封电子邮件,m=1000个字符。任何像样的子串检测算法都会给你O(n*m)的速度。对于提供的n和m值,在现代PC上不到1秒 谈到存储,我认识的客户将所有电子邮件放在一个大文件中,

例如,Eudora和GMail浏览数千封电子邮件并找到正确的信息集的速度让我感到惊讶。我使用Eudora,搜索速度非常快,能在几秒钟内浏览十年的电子邮件


所以我的问题是,它们如何存储和检索消息?存储数据的数据结构、索引和算法是什么?消息是如何存储在磁盘/数据库中的?

如果搜索速度慢,我会感到惊讶。比如说,你有n=10000封电子邮件,m=1000个字符。任何像样的子串检测算法都会给你O(n*m)的速度。对于提供的n和m值,在现代PC上不到1秒

谈到存储,我认识的客户将所有电子邮件放在一个大文件中,每个客户使用自己的格式。这使您可以相当快地从磁盘读取所有消息

如果您感兴趣,这是一个经典的子字符串搜索算法(还有很多):

编辑

我并不是说任何电子邮件应用程序都使用简单的子字符串搜索,只是说使用它已经足够快了。

两者都使用相同的秘方,尽管使用了完全不同的技术:索引

Eudora对每个邮箱和文件夹使用mbox格式,这基本上是一个大文件,包含一个接一个的所有邮件。如果您检查这些文件,您会看到一个较小的文件,其名称和扩展名相同。IDX或类似的东西。这是一个索引,可以快速查找各个电子邮件的起始位置。Eudora的另一个明智之举是移除eamils的附件,这将邮箱的容量减少了一个数量级,从而加快了过程中的管理。这使得Eudora能够管理比大多数其他客户端多得多的邮箱


谷歌是索引大师,他们几十年来一直在为整个网络编制索引,所以他们将他们的交易应用到你的邮箱,允许你以极快的速度访问邮件,因为所有相关事实都是单独编制索引的。它们还拥有快速检索电子邮件等文档的特殊技术。

Eudora和Gmail是非常不同的动物,它们存储数据的方式也不同。大多数UNIX电子邮件程序将电子邮件存储为纯文本文件。Outlook将它们存储在数据库中。更笼统地回答您的问题:速度来自索引——因此,如果您将数据存储在索引数据库中,您可以非常快速地搜索数据。例如,谷歌能够如此快速地返回结果,因为它存储了它所抓取的网页的关键词索引。