Mysql - 存档数据,使用哪种解决方案?

时间:2011-03-07 02:31:16

标签: mysql reporting archive

我使用的是MySQL 5.x,并且有一个主表可以为所有客户提供统计数据。我想对它进行报告,但不想在同一个表上运行它,所以我想每晚都将数据移动到另一个只用于报告的表中。我的问题是,为每个客户建立一个单独的表来存档也是有益的,或者只为所有客户提供一个存档表?如果我决定由客户分解,系统中可能有数千个客户可能意味着数千个存档表。你的想法?

2 个答案:

答案 0 :(得分:0)

如果您为每个客户使用个人,则表格的数量会增加。

如果你有统计数据,我建议总结如下

  1. 将最近1个月的数据保存在同一主表中。
  2. 在maintainble_quartely表中的四分之一数据/半年数据,其中包含基于报告要求的平均或汇总数据
  3. 在maintable_archieve中重新保存旧数据,其中包含>根据报告要求平均或汇总的四分之一或半年数据
  4. 如果你想把整个事情放在一起,你需要结合三个表。

    其他方式,使用mysql replication和master进行插入,更新,删除和从属选择

答案 1 :(得分:0)

我认为这只是组织数据的一种方式;如果您正在处理客户和订单等事务,那么它们应该是单独的表格。

根据可用资源,您可能会执行类似

的操作
CREATE TEMPORARY TABLE `new_table` LIKE `old_table`;
INSERT INTO `new_table` SELECT * FROM `old_table`;

如果您有完整的表格副本,您希望获得报告。如果您的资源有限,您可以批量处理,如下所示:

CREATE TEMPORARY TABLE `new_table` LIKE `old_table`;
INSERT INTO `new_table` SELECT * FROM `old_table` LIMIT 100;

......并在下一次迭代中:

DROP TABLE `new_table`;
CREATE TEMPORARY TABLE `new_table` LIKE `old_table`;
INSERT INTO `new_table` SELECT * FROM `old_table` LIMIT 100 OFFSET 100;

就归档信息而言,它取决于您正在使用的环境。例如,在环境中我的东西可以工作,它是24/7并且需求极高。我有一个临时数据引擎,它将所有数据保存在RAM内数据库中,当一条记录被视为“关闭”时,它被移动到MySQL数据库进行存档。这样,当需要时,我可以在MySQL数据库上运行任何报告,而不会影响实时数据的运行运行时间。

我可以就如何存档您的数据提供一些想法,但这需要您提供您正在处理的数量和需求类型的描述。