我有一个Python程序,该程序下载一个具有超过1亿个唯一值的文本文件,并遵循以下逻辑:
last_seen
日期(SELECT id WHERE <col> = <value>;
)我排队需要添加的条目,然后在收集了几百个之后将它们插入到批量语句中。
当前,该程序需要24个小时以上才能运行。我在存储值的列上创建了一个索引。
我当前正在使用MySQLdb。
似乎价值存在的检验正在占据运行时的最大份额。我可以寻求哪些途径来加快速度?
谢谢。
答案 0 :(得分:1)
您可以尝试将值加载到集合中,这样就可以进行查找而无需每次都从数据库中获取数据。假定该表未被其他任何人更新,并且您有足够的内存。
# Let's assume you have a function runquery, that executes the
# provided statement and returns a collection of values as strings.
existing_values = set(runquery('SELECT DISTINCT value FROM table'))
with open('big_file.txt') as f:
inserts = []
updates = []
for line in f:
value = line.strip()
if value in existing_values:
updates.append(value)
else:
existing_values.add(value)
inserts.append(value)
if len(inserts) > THRESHOLD or len(updates) > THRESHOLD:
# Do bulk updates and clear inserts and updates