2013-02-27 87 views
1

我正在尝试开发一个应用程序,用户可以将其电子邮件导入并搜索其导入的电子邮件。由于这可能会被许多用户(容易10k +)使用,数据库设计至关重要。有了这些用户数量,数据库可能需要能够保存10亿行(电子邮件)。用于存储亿次电子邮件的数据库模式

应用程序需要能够在应用程序上发布搜索查询后快速返回记录。数据库将被严重搜索,我希望在创建数据库表时创建一个高效的数据库模式。我自己有很多关于MySQL的经验,但我已经阅读过某处我不应该那样去寻找MongoDB或者其他东西?差异如此之大,还是有什么办法可以继续使用MySQL?

  • 受试者
  • 日期(范围)
  • 附件(名称&类型只)
  • 消息内容
  • (可选)邮箱/文件夹结构

这些是可搜索的字段,当然所有的电子邮件都会有唯一的id和user_id的额外两个“列”。我发现了几个电子邮件的数据库模式,但是我找不到任何可以使用超过10亿行的模式的任何文档。

+1

那是一千万,还是一百万? ':)'。如果你真的想达到这个水平,可以获得一个外部服务来做到这一点 - 我怀疑必须有一个可以使用API​​与之交互的电子邮件存储解决方案。这就是说,你需要的是现实的:这可能是不成熟的优化? – halfer 2013-02-27 10:37:42

+0

存储1,000,000,000多封电子邮件。这个想法是在亚马逊云上运行(可扩展)。我的想法是将重要的(可搜索的)字段插入数据库后,将电子邮件存储到S3存储中。 – Floris 2013-02-27 12:57:12

+0

Solr呢? – 2013-02-27 19:49:42

回答

1

如果网站确实有近十亿条记录,那么如果需要的话,您可以将其移动到亚马逊服务器或另一个云主机(应该)允许表分区。

假设您不在具有限制的共享主机上,MySQL可以处理相当数量的数据。

所以,从简单开始,不要优化一个还不存在的问题,并且看看它是如何发展的。

+0

是的,MySQL与分片可能是一个好的开始。 – halfer 2013-02-27 14:04:44

+0

好点,我会补充说,让每个客户创建一个单独的表 - 因此你不会有一个超级表搜索,它不会永远找到结果。 – ulkas 2013-02-27 14:08:44

+1

@ulkas如果正确使用分片,只需几ms就可以查询表 – Sammaye 2013-02-27 16:02:19

相关问题