Python connection.commit()性能影响
在将大型日志文件解析到sqlite数据库中时,如果每次插入后不调用Python connection.commit()性能影响,python,sqlite,Python,Sqlite,在将大型日志文件解析到sqlite数据库中时,如果每次插入后不调用connection.commit(),性能是否有显著提高,或者这没有任何区别。我想问题是,它是否只用于分离事务,或者是否执行任何需要时间的操作。是的,提交次数越多,性能就会直接下降 下面是一个使用大约1400行的“lorem ipsum”文本文件的玩具示例: import argparse import sqlite3 import textwrap import time parser = argparse.Argument
connection.commit()
,性能是否有显著提高,或者这没有任何区别。我想问题是,它是否只用于分离事务,或者是否执行任何需要时间的操作。是的,提交次数越多,性能就会直接下降
下面是一个使用大约1400行的“lorem ipsum”文本文件的玩具示例:
import argparse
import sqlite3
import textwrap
import time
parser = argparse.ArgumentParser()
parser.add_argument("n", help="num lines per commit", type=int)
arg = parser.parse_args()
con = sqlite3.connect('lorem.db')
cur = con.cursor()
cur.execute('drop table if exists Lorem')
cur.execute('create table Lorem (lorem STRING)')
con.commit()
with open('lorem.txt') as f: lorem=textwrap.wrap(f.read())
print('{} lines'.format(len(lorem)))
start = time.time()
for i, line in enumerate(lorem):
cur.execute('INSERT INTO Lorem(lorem) VALUES(?)', (line,))
if i % arg.n == 0: con.commit()
stend = time.time()
print('{} lines/commit: {:.2f}'.format(arg.n, stend-start))
将其保存为sq.py
…:
$ for i in `seq 1 10`; do python sq.py $i; done
1413 lines
1 lines/commit: 1.01
1413 lines
2 lines/commit: 0.53
1413 lines
3 lines/commit: 0.35
1413 lines
4 lines/commit: 0.27
1413 lines
5 lines/commit: 0.21
1413 lines
6 lines/commit: 0.19
1413 lines
7 lines/commit: 0.17
1413 lines
8 lines/commit: 0.14
1413 lines
9 lines/commit: 0.13
1413 lines
10 lines/commit: 0.11
因此,将commit
s减半几乎是操作所用时间的一半,依此类推——这不是很线性,但几乎是这样
完整性:每次提交100行,将运行时减少到0.02
在此基础上,您可以使用更接近您实际需要的DB表轻松地进行实验和测量时间。如您所愿,“多个”问题中的一部分可能会因为以下原因而关闭:
问题要求我们推荐或查找书籍、工具、软件库,教程或其他非站点资源
,另一个与sqlite相关。@mash,我明白你的意思,奇怪的是,软件REC堆栈交换站点似乎不希望Qs请求软件REC(?!)。本例中的解决方案是围绕日志解析任务示例中的特定性能度量构建另一个Q,并询问如何加快这些任务的速度——无论是通过微调还是以不同的方式使用一个库,直接编写Python,使用其他库,不管怎样,这是一个非常简单的问题,不需要书籍,工具、软件库、教程和c。