电子邮件数据库设计(模式)

Posted

技术标签:

【中文标题】电子邮件数据库设计(模式)【英文标题】:Email database design (schema) 【发布时间】:2013-02-01 07:51:04 【问题描述】:

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

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

来自 到 主题 日期(范围) 附件(仅限名称和类型) 消息内容 (可选)邮箱/文件夹结构

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

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

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

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

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

【问题讨论】:

【参考方案1】:

您可以将 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"


【讨论】:

是否有任何可用的 mongo db 架构可供我用作提供如此大量数据的参考? http://docs.mongodb.org/manual/core/data-modeling/ 这包含了如何设计 mongodb 模式的详细信息。 因此,如果我得到这个 MongoDB,在单个数据库中保存超过 10 亿条记录并每天处理数百万条插入和搜索查询(如果架构正常)将毫无问题。如前所述,我们的想法是将其运行到亚马逊云中。由于电子邮件本身的大部分大小都是附件,我的想法是在亚马逊上运行一个数据库并将附件存储到 s3 存储中。 这取决于您如何设计数据库架构。***.com/questions/9702643/mysql-vs-mongodb-1000-reads 请查看此链接可能对您有所帮助。 目前我正在考虑采用一个简单但高效的架构,就像您在上面提供的架构一样。从邮件客户端导出到应用程序的电子邮件,我将使用应用程序从电子邮件中获取可索引字段(发件人、收件人、主题等)。这些字段将被插入到数据库中,而电子邮件(本身,带有附件)将被存储到 S3 中。电子邮件客户端将能够根据数据库中的字段查询应用程序以获取搜索结果。这是要走的路吗?【参考方案2】:

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

【讨论】:

思路是让邮件客户端(ms Outlook / apple mail)将邮件发送到存储(应用程序)。

以上是关于电子邮件数据库设计(模式)的主要内容,如果未能解决你的问题,请参考以下文章

CRM/ERP 企业管理软件中常见的七种程序设计模式

javaweb项目电子商城购物系统课程设计任务书及成绩评定和毕业设计与实现

:立项需求分析和结构设计

《.NET框架设计模式配置工具》电子书

关系数据库模式设计 - 如何直接从实体的字段集建模一对一映射

我应该在通知系统中使用哪种设计模式?