邮件数据库设计(架构)

时间:2013-02-01 07:51:05

标签: database email relational-database database-schema bigdata

目前我们正在开发一个相当大的应用程序,它必须处理大量的记录。

这个想法是必须存储电子邮件(带附件),并且通过web-api用户应该能够搜索他们存储的电子邮件。用户应该能够至少在以下项目中搜索(在他们自己的消息中,他们已导出到数据库/存储中):

  • 来自
  • 受试者
  • 日期(范围)
  • 附件(仅限姓名和类型)
  • 消息内容
  • (可选)邮箱/文件夹结构

该应用程序应该能够与大量用户和极端数量的电子邮件(从数百万到数十亿)轻松增长。用户应该能够下载整个原始邮件(带附件),以便他们可以将其导入到他们的电子邮件客户端。

我正在考虑将电子邮件索引到数据库中,并将带有附件的完整电子邮件与package一起存储到单独的存储中。通过这种方式,我应该尽可能地保持数据库负载,从而尽可能快地进行搜索。

我找到了几个用于处理this等电子邮件的数据库模式。我找不到任何能够处理数亿甚至数十亿条记录(电子邮件)的数据库。

这是保持简单,高效和快速的最有效方式还是我忘了什么?

//编辑 我的想法是在亚马逊云上运行它(也许任何与之相关的建议?)

2 个答案:

答案 0 :(得分:3)

您可以使用mongoDB数据库来获取此数据量。 以下是mongoDb的详细信息。http://www.mongodb.org/

在mongoDb中,mysql表被称为集合,行被称为文档。

Mongo以基于JSON的对象格式存储数据。

在这里制作数据库模式的一种可能方法。

from : string
to : string
subject: string
date (range): datetime
attachments (names & types only) : Object Array
message contents : string
(optional) mailbox / folder structure: string

for example:
from: from@gmail.com
to: to@gmail.com
subject: "test subject"
date: "current date",
attachments: {
 [0]=>{
   names: "attachments1",
   types: "text"
},
[1]=>{
  names: "attachments2",
   types: "pdf"
}
}

答案 1 :(得分:0)

您不希望将此类信息存储在RDBMS中。相反,你想扩展像lucene这样的东西。对于电子邮件,solr有一个email indexer。希望有所帮助...