2017-06-12 18 views
0

我有一个网站发送电子邮件,整个发送的电子邮件已保存在名为emails的mysql数据库表中。现在emails桌子的尺寸增长非常快。发送的电子邮件表格变得太大

我已经尝试了一些东西来减小表的大小。例如,我将电子邮件的正文存储为gzip ped和base64编码的字符串。但是这张桌子现在已经达到7.5GB,而且还在快速增长。

这似乎不是一个好的做法,我怎么做,所以我应该如何以正确的方式存储这些电子邮件?我想将blob中的gzipped body存储起来,但我恐怕没有多大帮助。

我很感激任何想法我应该怎么做,或者你如何解决这个问题,如果它发生。

+0

是否存在与不断扩大规模的问题吗?我会记住你正在创建的任何数据重复 – Takarii

+0

@Takarii我有问题这张大桌子。它在某些情况下会减慢mysql的速度。如果我优化它会更好。而备份创作也很长。 (当然,我从复制的数据库创建备份) – MrRP

回答

0

将邮件内容保存在磁盘上,并将数据库表中的引用保存到正确的文件中。只有当你不经常使用它时,当你想搜索内容时它是不可选的,但考虑到你使用的base64编码解决方案,我不认为是这样。

+0

这是一个好主意,但在这种情况下,我应该为此设置不同的备份。当然这不是一个大问题。是的,我现在不在表格中搜索我有一个索引表进行搜索。 – MrRP

+1

不是一个好的解决方案。存储到一个平面文件将会放慢速度,甚至比一张大桌子放慢速度 – Takarii

0

我们通常会将发送的邮件移动到sentemail表中的不同数据库中。因为大多数情况下,我们不需要将发送的电子邮件转到任何搜索条件。我们已将每个周末和上周的电子邮件运行的作业传送到不同的数据库以进行存档。在当前的实时数据库中只存储了一周的电子邮件,PK始终记录系统启动后发送的电子邮件数量

+0

肯定会将相同的问题移动到不同的系统? – Takarii

+0

主分贝越来越清洁它是正确的,但我仍然有不同的分贝大表。或者你的意思是我应该为每个档案创建新表格? – MrRP

+0

不同的数据库上没有大表。但是如果您不再使用这些电子邮件,通常您不需要访问它。在我的情况。我们只是发送/重新发送密码,所以它是完全没问题,如果我移动它们 –

1

您应该在email表中保存邮件内容一次,并管理所有收件人在不同的表中。并将您的旧数据存储到mongoDB中。 MongoDB是大数据的最佳选择。通过cron的二级数据管理,设置一个特定的时间范围,如二级数据库中的2m数据移位。当你需要使用旧数据时,连接mongoDB并检索数据。

转到:http://www.theserverside.com/feature/How-NoSQL-MySQL-and-MogoDB-worked-together-to-solve-a-big-data-problem

http://linuxpitstop.com/migrate-mysql-to-mongodb-using-mongify-utility-linux/

+0

谢谢,我会研究这个解决方案。 – MrRP