Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何插入缺少的行并更新10M表中存在的行_Php_Mysql_Database_Postgresql_Import - Fatal编程技术网

Php 如何插入缺少的行并更新10M表中存在的行

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

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, 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+表格,工作速度太慢

使用PHP在事务块中创建更新和插入的SQL文件(开始…提交)。通过命令行psql加载文件。此方法不会减少获取/计算时间,但会在更新期间显著提高速度

如果你使用postgres 9.5+,那么你应该看看UPSERT的概念()
MERGE
(又称UPSERT)是一个不错的选择。在填充临时表和更新目标表之间,您是否执行了任何
分析
?这对效率有很大的影响。我有9.0,没有升级的能力。因此,向上插入并合并在这里不起作用。