python - 在 MySQL 中快速插入 10 亿行

标签 python mysql sql

我目前正在尝试在 MySQL 表中插入大约 10 亿行数据。我从 .JSON 文件目录中提取数据,其中每个 .JSON 文件包含约 200K 行。总共有 5K 个文件。

我当前正在做的事情是遍历每个文件并创建一个包含我要插入的行的元组。我将此元组放入一个列表中,在浏览完整个 JSON 文件后,我将行列表插入 MySQL 中。这比一次将每一行插入 SQL 更快,但这仍然需要 3 天多的时间,而且我没有多余的时间。

我最初创建了一个列表,每个列表包含 200,000,000 行(生成速度很快),但插入 MySQL 的时间太长。这就是为什么我不仅仅每 200,000 行插入一次。有人对如何加快速度有任何建议吗?

path = *path to my file*
for filename in glob.glob(os.path.join(path, '*.JSON')):
    myList = []
    with open(filename) as json_data:
        j = json.load(json_data)
        for i in j["rows"]:
            name = i["values"][0][0]
            age = i["values"][0][1]
            gender = i["values"][0][2]
            data = (**None**,name,age,gender)
            myList.append(data)
        cursor = conn.cursor()
        q = """INSERT INTO nordic_data values (%s,%s,%s,%s)"""
        cursor.executemany(q, myList)
        conn.commit()

最佳答案

有很多潜在的东西,但我想到了一些想法:

  1. 将每个 X 插入包装到一个事务中。
  2. 从表中删除索引,插入 X 行,然后重新创建索引。

插入必须更新索引,因此每次插入都会修改表上的索引。

关于python - 在 MySQL 中快速插入 10 亿行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45473833/

相关文章:

python - 为 QTextEdit 设置字体被忽略,没有明显的原因

php - 计算并格式化与 PHP 时间戳的时间差

mysql - 经典的asp参数查询到MYSQL

sql - 左连接两个引用表以获得正确的值

sql - 对现有表进行分区

php - 如何计算不同的日期时间戳并根据固定百分比过滤条目?

python - Django 中的 'Cannot assign' 错误问题

python - 为什么我不能调用 del [ :] on a dict?

python - Julia UndefVarError : unshift! 未定义

mysql - 尝试使用 capistrano 进行部署 - 不断收到 pg bundle 错误 - 但我没有使用 pg