【发布时间】:2011-02-22 08:07:27
【问题描述】:
我正在解析日志并使用 SQLAlchemy 和 Python 将其插入 MySQL 或 SQLite。现在我打开一个到数据库的连接,当我遍历每一行时,我在解析后插入它(这只是一个现在的大表,对 SQL 不是很有经验)。然后在循环完成后关闭连接。总结代码为:
log_table = schema.Table('log_table', metadata,
schema.Column('id', types.Integer, primary_key=True),
schema.Column('time', types.DateTime),
schema.Column('ip', types.String(length=15))
....
engine = create_engine(...)
metadata.bind = engine
connection = engine.connect()
....
for line in file_to_parse:
m = line_regex.match(line)
if m:
fields = m.groupdict()
pythonified = pythoninfy_log(fields) #Turn them into ints, datatimes, etc
if use_sql:
ins = log_table.insert(values=pythonified)
connection.execute(ins)
parsed += 1
我的两个问题是:
- 有没有办法在这个基本框架中加快插入速度?也许有一个插入队列和一些插入线程、某种批量插入等?
- 当我使用 MySQL 时,对于大约 120 万条记录,插入时间为 15 分钟。使用 SQLite,插入时间是一个多小时。数据库引擎之间的时间差似乎是正确的,还是意味着我做错了什么?
【问题讨论】:
-
我还应该说明,当我想知道一种加速它的方法时,我的意思是我应该做一些基本的事情,而不是会给我带来很大的收获(即,在至少超过 25% 的时间速度增加)。速度在这里不是最重要的,我只是想知道我是否在以一种行人的方式做某事,因为这对我来说是全新的。
标签: python sql mysql sqlite sqlalchemy