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

Posted

技术标签:

【中文标题】Mysql - 归档数据,使用哪种解决方案?【英文标题】:Mysql - Archiving data, which solution to use? 【发布时间】:2011-03-07 02:31:16 【问题描述】:

我使用的是 mysql 5.x,并且有一个主表包含所有客户的统计信息。我想对其进行报告,但不想在同一张表上运行,所以我每天晚上都在考虑将数据移动到仅用于报告的不同表中。我的问题是为每个客户提供一个单独的表格来存档还是只为所有客户提供一个存档表格是否有益?系统中可能有数千个客户,如果我决定按客户分解它,这可能意味着数千个存档表。你的想法?

【问题讨论】:

请问您为什么不想在您的主表上运行报告?另外,您是如何生成报告的;您使用的是 php、Python 还是任何其他脚本语言? @indienick 使用php5,我不想锁定表,因为主表每天都使用很多。其次,我希望索引特定于报告,而不是在主表上有一堆索引,它们会执行大量插入和更新。我只是想如果有 100 个人同时在主表之外运行报告,而另外 100 个人使用它进行许多插入和更新,那将会很慢。还有尺寸,如果我被客户拆开,桌子的尺寸会更小。 【参考方案1】:

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

如果你有统计数据,那么我建议像下面这样总结它

    将最近 1 个月的数据保留在同一个主表中。 maintable_quartely 表中的季度数据/半年度数据,其中包含基于报告要求的平均或汇总数据 maintable_archieve 中的剩余旧数据包含 > 根据报告要求平均或汇总的季度或半年度数据

如果你想把整个东西放在一起,你需要把三个表组合起来。

其他方式,使用mysql复制和master进行插入、更新、删除和slave进行选择

【讨论】:

【参考方案2】:

我认为这完全是一种组织数据的方式;如果您要处理诸如客户和订单之类的事情,无论如何它们应该是单独的表。

根据可用的资源,您可能会做类似的事情

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 数据库上运行任何报告,而不会影响实时数据的运行运行时间。

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

【讨论】:

以上是关于Mysql - 归档数据,使用哪种解决方案?的主要内容,如果未能解决你的问题,请参考以下文章

如何对MySQL中的大表进行数据归档

如何解决Oracle数据库归档日志占满磁盘空间

决定使用哪种缓存策略?

SQL Server数据归档的解决方案

mysql数据库表里中文乱码应该选哪种编码?

mysql数据库表里中文乱码应该选哪种编码?