Php 如何插入缺少的行并更新10M表中存在的行
Q:如何在相对较短的时间内插入缺少的行并更新数据源中存在的行 存在很少更新的Postgre表和功能不强的服务器(1Gb ram用于apache2和中间CPU)。有10米的记录。有些记录可以更新,有些记录可以添加 数据源是由php脚本生成的大型CSV文件 表格结构:Php 如何插入缺少的行并更新10M表中存在的行,php,mysql,database,postgresql,import,Php,Mysql,Database,Postgresql,Import,Q:如何在相对较短的时间内插入缺少的行并更新数据源中存在的行 存在很少更新的Postgre表和功能不强的服务器(1Gb ram用于apache2和中间CPU)。有10米的记录。有些记录可以更新,有些记录可以添加 数据源是由php脚本生成的大型CSV文件 表格结构: id (auto inc.) week_number (1-54) audience_id (int) channel_id (int) is_weekend (char, Y or N) start_time (hours, off
id (auto inc.)
week_number (1-54)
audience_id (int)
channel_id (int)
is_weekend (char, Y or N)
start_time (hours, offset in minutes after midnight)
rating (numberic. In fact main value)
评级字段由以下字段集决定:周数,观众id,频道id,是周末和开始时间让我们称之为未来的“复杂关键”
我所做的(php服务器端):
- 循环通过foreach(批选择)存在db数据,并将成对的“complex_key”=>分级存储在redis缓存中。接下来,逐行比较csv并准备新的数据集优化:尽我所能取消设置,优化阵列e.t.c结果:失败。内存限制。(php端,而非redis)
- 用于创建临时表。其想法是使用DB引擎来比较表并进行必要的更改。差不多。OFCI添加了包含“complex_key”散列的额外字段,并将其标记为索引。结果:如果我们比较1M+表格,工作速度太慢
MERGE
(又称UPSERT)是一个不错的选择。在填充临时表和更新目标表之间,您是否执行了任何分析
?这对效率有很大的影响。我有9.0,没有升级的能力。因此,向上插入并合并在这里不起作用。