【发布时间】:2015-04-11 20:14:26
【问题描述】:
我有多个表。比如table1、table2、table3等
需要什么:
1. 从 table1 中获取特定行。 (例如:id = 203)
2.从table2中获取所有与id 203相关的值(例如:1,2,3,4,5,6,7....500)
3. 再次从 table3、table4 等中获取步骤 2 中与 table2 具有外键关系的所有 id 值。(数百万行)
4. 根据结果为以上 3 个步骤构建插入语句。
5. 在存档数据库中具有相同表名的受尊重表中插入步骤 4 的查询。即,简而言之,将部分数据归档到归档数据库中。
我的表现如何:
对于每个表,每当获得行时,创建插入语句并存储在每个表的特定数组中。一旦获取所有值直到第 3 步,创建插入语句并存储在数组中。然后为每个单独的数组运行循环并执行这些查询存档数据库。一旦查询成功执行,从主数据库中删除所有获取的行,然后提交事务。
结果:
到目前为止,上述方法对于 10-20mb 左右的小型 DB 数据非常有效。
问题:
对于大量行(比如超过 5gb),php 在获取行时抛出内存耗尽错误,因此无法在生产中工作。即使我已经将内存限制增加到 3gb。我不想再增加了。
我正在考虑的替代解决方案是,而不是使用数组来存储查询,将这些查询存储在文件中,然后在内部使用 infile 命令执行查询以存档 DB。
请建议如何实现上述问题?移至存档数据库后,需要移回具有类似功能的主数据库。
【问题讨论】:
标签: php mysql arrays out-of-memory archive