大家好。
nginx log 目前每天大概10万行数据,现在用python解析出了每个字段,现在想插入到mysql数据库里,用for实在太慢,请问有什么好的方法来搞。
大家好。
nginx log 目前每天大概10万行数据,现在用python解析出了每个字段,现在想插入到mysql数据库里,用for实在太慢,请问有什么好的方法来搞。
首先,如楼上所说,executemany,批量插入。每次插入500-1000条,然后commit一下。
此外,有点疑惑:
1、原始日志10万条,解析之后,不应该是归并后入库么?那时数据量还有那么多?
2、如果每天需要往数据库插入10万条数据,那么三个月就将近1000万了。而对于mysql来说,当数据量上千万之后,效率就比较低了。可以考虑别的存储方式了,比如:ElasticSearch。
追答:批量插入代码大概这样(没有实际运行)
conn = ...
cursor = ...
with open('access.log', 'r') as f:
c = 0
data_list = []
for line in f.readlines():
# 解析日志,得到所需的字段(比如:时间、URL、IP)
data_list.append(('2018-04-20 12:12:12', '/login/', '1.1.1.1'))
c += 1
if c % 1000 == 0:
cursor.executemany('insert into access_table values(%s, %s, %s)', data_list)
conn.commit()
data_list = []
if data_list:
cursor.executemany('insert into access_table values(%s, %s, %s)', data_list)
conn.commit()
cursor.close()
conn.close()
15 回答8.4k 阅读
4 回答4.4k 阅读✓ 已解决
5 回答3.2k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
批量插入啊, 一次1000条
executemany