1

在我们公司的一个应用程序中,我们从我们的服务器收集统计数据(负载、磁盘使用情况等)。由于有大量数据,而且我们并不总是需要所有数据,我们有一个“压缩”例程来获取原始数据并计算最小值。许多数据点的最大值和平均值,将这些新值存储在同一个表中,并在几周后删除旧值。

现在我的任务是重写这个压缩例程,新的例程必须将我们拥有的所有未压缩数据保存一年在一个表中,并将“压缩”数据保存在另一个表中。我现在主要关心的是如何处理不断写入数据库的数据以及是否使用“事务表”(我自己的术语,因为我想不出更好的,我不是在谈论提交/rollback 事务功能)。

截至目前,我们的数据收集器将所有信息插入到一个名为的表中ovak_result,压缩后的数据最终将以ovak_resultcompressed. ovak_resultuncompressed但是,创建一个名为并仅用ovak_result作“临时存储”的表有什么特定的好处或缺点吗?ovak_result将保持最小,这对压缩例程有好处,但我需要不断地将一个表中的所有数据洗牌到另一个表中,并且会不断地读取、写入和删除ovak_result.

MySQL中是否有任何机制来处理这些事情?

请注意:我们在这里谈论的是相当大的数据集(未压缩表中大约有 100 M 行,压缩表中大约有 1-10 M 行)。此外,我可以通过软件和硬件配置来做几乎我想做的事情因此,如果您有任何涉及 MySQL 配置或硬件设置的提示或想法,请直接提出。)

4

1 回答 1

0

尝试阅读有关ARCHIVE 存储引擎的信息。


重新澄清。好吧,我没有从你的描述中明白你的意思。仔细阅读,我看到您确实提到了最小值、最大值和平均值。

所以你想要的是一个物化视图,它可以更新大型数据集的聚合计算。一些 RDBMS 品牌(例如 Oracle)具有此功能,但 MySQL 没有。

一种尝试解决此问题的实验产品称为FlexViews (http://code.google.com/p/flexviews/)。这是 MySQL 的开源配套工具。您将查询定义为针对原始数据集的视图,FlexViews 会持续监控 MySQL 二进制日志,当它看到相关更改时,它只会更新视图中需要更新的行。

它非常有效,但是在您可以用作视图的查询类型方面有一些限制,而且它也是在 PHP 代码中实现的,因此如果您更新基表的流量非常大,它的速度还不够快。

于 2011-09-15T00:02:00.690 回答