在我们公司的应用程序中,我们从服务器收集统计数据(负载,磁盘使用情况等)。由于存在大量数据,并且我们始终不需要所有数据,因此我们有一个“压缩”例程,它接收原始数据并计算最小值。对于许多数据点的最大值和平均值,将这些新值存储在同一个表中,并在几周后删除旧值。
现在我的任务是重写这个压缩例程,新例程必须将我们在一个表中保存一年的所有未压缩数据和另一个表中的“压缩”数据保存在一起。我现在主要担心的是如何处理连续写入数据库的数据以及是否使用“事务表”(我自己的术语,因为我不能提出更好的,我不是在谈论提交/ rollback transaction functions)。
截至目前,我们的数据收集器已将所有信息插入名为ovak_result
的表中,压缩数据将以ovak_resultcompressed
结尾。但创建一个名为ovak_resultuncompressed
的表并使用ovak_result
作为“临时存储”是否有任何特定的好处或缺点? ovak_result
将保持最小,这对于压缩例程是有益的,但我需要将所有数据从一个表连续地移动到另一个表中,并且ovak_result
中将不断读取,写入和删除。
MySQL中是否有任何机制来处理这类事情?
(请注意:我们在这里讨论相当大的数据集(未压缩表中约100 M行,压缩表中约1-10 M行)。此外,我可以做得很漂亮我想要的软件和硬件配置都很多,所以如果您有任何涉及MySQL配置或硬件设置的提示或想法,请将它们打开。)
答案 0 :(得分:0)
重申你的澄清。好的,我没有从你的描述中得到你的意思。仔细阅读,我看到你确实提到了最小值,最大值和平均值。
所以你想要的是一个物化视图,它可以为大型数据集更新聚合计算。一些RDBMS品牌(如Oracle)具有此功能,但MySQL没有。
尝试解决此问题的一个实验性产品称为 FlexViews (http://code.google.com/p/flexviews/)。这是MySQL的开源配套工具。您将查询定义为针对原始数据集的视图,FlexViews会持续监视MySQL二进制日志,当它看到相关更改时,它只更新视图中需要更新的行。
它非常有效,但它在您可以用作视图的查询类型方面有一些限制,而且它也是用PHP代码实现的,所以如果你有更高的流量更新你的基础,它还不够快表