【问题标题】:Mass insert of data with intermediate lookups using Python and MySQL使用 Python 和 MySQL 通过中间查找大量插入数据
【发布时间】:2015-02-18 08:42:03
【问题描述】:

我有一个大小为几 G 的文件,每行都包含一个 JSON 哈希。文档本身不是一个有效的 JSON 文档,但是我无法控制这些数据的生成,所以我无法更改它。

需要读取 JSON,需要对 JSON 中的某些“字段”执行查找,然后将这些查找的结果插入 MySQL 数据库。

目前,处理这个文件需要几个小时,我认为这是因为我在每一行上插入和提交而不是使用 executemany,但是我正在努力找出如何最好地解决这个问题,因为我需要将查找作为过程的一部分,然后插入到多个表中。

流程如下:

1) 遍历文件,边走边读每一行

2) 对于每一行,判断是否需要插入数据库

3) 如果确实需要将该行插入数据库,请查找各种 JSON 字段的外键并用 FK id 替换它们

4) 将“新”行插入数据库。

问题出现在 (3) 处,因为在某些情况下,FK id 是通过插入数据子集创建的。

简而言之,我需要大量插入嵌套数据结构,其中嵌套数据的各个部分需要插入到不同的表中,同时保持引用完整性。

感谢大家的帮助,

马特

【问题讨论】:

    标签: python mysql json database


    【解决方案1】:
    • 1) 过滤掉可以忽略的行。
    • 2) 计算表依赖关系图并按表将行划分为多个文件。
    • 3) 为没有依赖关系的表插入所有行;可选地,缓存这些,这样您就不必询问数据库您刚刚告诉它的查找内容。
    • N) 使用该缓存 + 执行插入行所需的任何数据库查找,这些行取决于在步骤 N-1 中插入的行。

    将所有这些作为多个过程执行,以便您可以验证每个阶段。使用批量插入并考虑禁用 FK 验证。

    【讨论】:

    • 谢谢,我试试看。希望你一切都好:)
    猜你喜欢
    • 1970-01-01
    • 2016-12-22
    • 2011-10-09
    • 2018-04-22
    • 2019-09-03
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多