我是MySQL分区的新手,因此任何一个例子都会受到赞赏。
我正在尝试为在几个MyISAM表之间分配的数据创建一种老化机制。
我的问题实际上包括几个子问题。
相关表格是:
问题:
最后一个问题,您是否建议采用其他方法来实现老化机制(我正在编写Java实现产品,每天处理大约1 GB或原始数据并将结果存储在MySQL中)
答案 0 :(得分:1)
LOAD DATA非常快。我只有两个步骤(没有特定顺序) - LOAD DATA然后'delete .. where date< 10周'。自动增量将持续与您正在使用的数据类型一样长。如果你想要非常小心,你可以定期将它推回零。
数据进入“原始”表后,运行例程以创建“已处理”表。我在工作中使用v类似的过程。我们保留一个单独的表,其中包含指向所有“原始”表的“写”和“解析”指针。当新数据进入并被解析时,将设置适当的行指针。如果'raw'表被截断,你可以重置'write'指针但保留'parse'指针。 (当发生这种情况时,我们将偏移存储在另一个表中 - 只是为了确定)。
答案 1 :(得分:1)
很难对这个问题给出真正的答案,因为它取决于你的数据。但是,让我给你一些思考的东西。
我假设我们正在谈论某些带有最新数据的日志(因此不会跨越多年)。您可以按范围进行分区。您可以使用年/周编号(即201201,201202等)向表中添加一个字段。如果此问题与您关于导入多个表的问题有关,则可以轻松执行此操作,即导入脚本。
在运行中,即时重新分配您的数据(70GB?)。我不推荐它。但如果你有那个星期的数字,那么你可以做到。如果您以后想要将其更改为12天,则可以为该日期和分区添加一列。
那么它不会被自动删除,但是一个cron作业可以处理它吗?只需检查有多少分区,如果有3个(?)删除第一个分区。
分区需要在您分区的字段上具有主索引(如果要使用自动增量)。因此,您永远不能完全依赖自动增量ID。我没有看到解决方法。
我不确定你的意思。
如果您的数据只是按时间顺序排列的某些日志,那么您可能只是为每个时段使用单独的表。然后在开始新时段(00:00)之前,检查最后一个表的最后一个id,创建一个新表并将自动增量设置为该值+1。然后您的导入将决定何时开始新的期间,以便可以轻松更改。您的导入脚本可以使用一个小表来存储下一个句点。
答案 2 :(得分:0)
如果我建议,为每个相关列创建索引列也可以增强性能从多个相关表中删除旧数据,因为我们刚刚比较了索引号而不是字符串。
我想知道你的桌子是否正在分类。