0

我的应用程序在亚马逊云上运行,但在使用 mysql 作为核心时遇到了问题。该应用程序将成为电子邮件的存档。

Mysql 将保留电子邮件的元数据如下(在 Amazon RDS 数据库中)

- emails
 id (int)
 account_id (int)
 subject (varchar(255))
 date (datetime)
 fingerprint (varchar(64))
 subject (text)
 messagetext (longtext)

完整的 EML 文件存储在 Amazon S3 上,可以在 emails 表的 id 字段之后找到。一切正常,但我很快就遇到了性能问题。每个帐户很容易有 10 - 20k 封电子邮件,我有大约 2 到 3k 个帐户需要在这个数据库中连接。我存储电子邮件的元数据,以便可以搜索它们。

即使在中型数据库实例(多 az,http://aws.amazon.com/rds/)上,在大约 200 个账户(200 万条记录)之后,我的性能也会(大)下降。即使是简单的选择(当然有限制)运行速度也慢了很多。此外,插入和更新需要更长的时间。

索引大小约为 500MB,总表大小约为 9GB。

像 Amazon cloudsearch 这样的替代品似乎很昂贵(每 GB 0.98 美元 + 每 1k 批量上传 0.1 美元(最大 5MB))。Amazon RDS 的优势在于可以轻松创建可靠的数据库(备份、多 az)。

-- 示例查询(但即使是第一个查询也明显慢于喜欢 1s 而不是几毫秒):

"SELECT * FROM emails WHERE id = '10' LIMIT 1;"

"SELECT COUNT(*) FROM emails WHERE account_id = '5' LIMIT 1;"

"SELECT id, subject FROM emails WHERE subject LIKE '%query%' LIMIT 10;"
4

0 回答 0