1

目前我正在尝试在 Amazon RDS 的 mysql 中存储大量电子邮件(100M+)。我制作了一个单独的 emails_bodies 表,但它变得越来越大。

使用 Amazon RDS,表大小刚刚超过 1GB,大约有 40k 封电子邮件。原始(电子邮件)文件保存在 Amazon S3 上,正文(纯文本)仅在数据库中用于搜索。使用更高的用户数(很容易计算超过 1 亿封电子邮件),我会使用 TB 的 mysql 存储。

CREATE TABLE `emails` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `accounts_id` int(10) unsigned NOT NULL,
  `ehash` varchar(32) NOT NULL,
  `subject` text NOT NULL,
  `body` longtext NOT NULL,
  `html` tinyint(1) unsigned NOT NULL,
  `size` int(10) unsigned NOT NULL,
  `datetime` datetime NOT NULL,
  `created` datetime NOT NULL,
  `last_updated` datetime NOT NULL,
  PRIMARY KEY (`id`),
  KEY `ehash` (`ehash`),
  KEY `accounts_id` (`accounts_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE `bodies` (
  `bodies_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `bodies_emails_id` int(10) unsigned NOT NULL,
  `bodies_body` longtext NOT NULL,
  PRIMARY KEY (`bodies_id`),
  UNIQUE KEY `bodies_emails_id` (`bodies_emails_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
4

1 回答 1

0

根据我的计算,每个身体平均消耗25K。对于电子邮件正文来说,这相当可观。如果只从多部分正文中提取文本部分,则可以减少该数量,但如果您的唯一目的是搜索。我确信平均大小将减少到仅 1k 或更少。

于 2013-05-30T13:38:11.967 回答