我有一个在php中运行的应用程序,它会创建大量数据。有时需要将一些数据移动到存档表中并继续仅使用最近的数据,例如上个月的数据。
当应用程序继续在此数据库上运行时,实现此目的的最佳方法是什么。我们在一个表格中讨论了高达30Gb的数据。
我现在尝试了什么,但我不满意是这样的: 在php脚本中,我创建了第二个表,并使用循环将我要归档的数据传输到新表。现在我们有近2x 30Gb的数据。使用第二个脚本,我现在从10个数据集中删除第一个表中的过时数据,希望我不会重载数据库和复制到两个从数据库。
这是最好的方法,还是有人有更好的方法?
答案 0 :(得分:2)
PARTITIONing是删除旧数据的最佳方式。但是,要将数据“移动”到存档,您需要一个足够新的版本(5.6.8)来拥有“可传输的表空间”;那会更快。
以下是删除大量行的技术的一般性讨论;它也可以适用于插入另一个表:http://mysql.rjweb.org/doc.php/deletebig
以下是帮助每月(或每周)清除分区表中数据的代码:http://mysql.rjweb.org/doc.php/partitionmaint它提供了有关如何最好地为“时间序列”布局分区的提示,就像您似乎有
可传输表空间要求您首先对表进行PARTITION。然后......:http://dev.mysql.com/doc/refman/5.6/en/tablespace-copying.html和http://www.percona.com/blog/2014/12/09/mysql-5-6-transportable-tablespaces-best-practices/