我想要加载到SQLite内存数据库中的大型数据集。我计划从Postgres导出的文件中加载数据。什么文件格式和加载机制最快?
目前我正在考虑以下两个选项:
哪个更快?还有第三个更快的选择吗?
这将作为Python 3脚本的一部分完成。这会影响选择吗?
如果没有人有这方面的经验,我会确保稍后发布基准作为答案。
编辑:这个问题引起了人们的注意。从评论来看,这似乎是由于缺乏基准测试。如果没有,请告诉我如何改进这个问题。我绝对不希望任何人为我进行基准测试。我只是希望有人事先有批量加载到SQLite的经验。
答案 0 :(得分:1)
事实证明,使用pg_dump并以高效的方式插入语句没有很好的方法。当我们使用CSV和pg_dump策略时,我们最终会从源文件中逐行插入。我们将使用CSV方法,使用executemany
每批加载10000行。
import sqlite3
from datetime import datetime
import csv
conn = sqlite3.connect(":memory:")
cur = conn.cursor()
create_query = """
CREATE VIRTUAL TABLE my_table USING fts4(
id INTEGER,
my_field TEXT
);
"""
cur.execute(create_query)
csv.field_size_limit(2147483647)
from_time = datetime.now()
with open('test.csv', 'r', encoding="utf8") as file:
csv_file = csv.reader(file)
header = next(csv_file)
query_template = """
INSERT INTO my_table (id, my_field)
VALUES (?, ?);
"""
for batch in split_iterable_by_size(csv_file, 10000):
cur.executemany(query_template, batch)
conn.commit()
在我们的系统和数据集上,这需要2小时30分钟。我们没有测试替代方案。