Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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
Mysql 处理大型重叠数据集-仅更新增量_Mysql - Fatal编程技术网

Mysql 处理大型重叠数据集-仅更新增量

Mysql 处理大型重叠数据集-仅更新增量,mysql,Mysql,我的Python应用程序生成一个CSV文件,其中包含几百条唯一的记录,每行一行。它每小时运行一次,并且经常在每次运行中数据保持不变。如果有变化,则变化很小,例如 删除了一条记录 增加了一些新记录 对现有记录的偶尔更新 每个记录只有四个简单字段(名称、日期、id、描述),到项目达到最大值时,记录不会超过10000条,因此可以将所有记录都包含在一个表中 将更改合并到表中的最佳方法是什么 我正在考虑的几种方法是: 1) 清空表并在每次运行时重新填充。 2) 将最新数据写入临时表,并运行DB作业将更

我的Python应用程序生成一个CSV文件,其中包含几百条唯一的记录,每行一行。它每小时运行一次,并且经常在每次运行中数据保持不变。如果有变化,则变化很小,例如

  • 删除了一条记录
  • 增加了一些新记录
  • 对现有记录的偶尔更新
每个记录只有四个简单字段(名称、日期、id、描述),到项目达到最大值时,记录不会超过10000条,因此可以将所有记录都包含在一个表中

将更改合并到表中的最佳方法是什么

我正在考虑的几种方法是: 1) 清空表并在每次运行时重新填充。 2) 将最新数据写入临时表,并运行DB作业将更改合并到主表中。 3) 将现有表数据读入我的python脚本,收集新数据,找出差异,运行多个“CRUD”操作以逐个应用更改

有人能提出更好的办法吗


谢谢

我会用以下方法:

  • 将新的CSV文件加载到第二个表中

  • 删除主表中第二个表中缺少的行:

    DELETE m FROM main_table AS m
    LEFT OUTER JOIN new_table AS t ON m.id = t.id
    WHERE t.id IS NULL;
    
  • 使用重复密钥更新时插入来更新需要更新的行。对于已经包含相同值的每一行,这将变成一个no-op

    INSERT INTO main_table (id, name, date, description)
      SELECT id, name, date, description FROM new_table
    ON DUPLICATE KEY UPDATE
      name = VALUES(name), date = VALUES(date), description = VALUES(description);
    
  • 用完第二张桌子就把它放下

  • 这是假设
    id
    是主键,并且表中没有其他唯一键

    如果数据集大小为10000行,那么这应该足够快,可以在一批中完成。一旦数据集变大10倍,您可能需要重新考虑解决方案,例如,一次处理10000行