10万行mysql_【nginx】一个10万行的ngx日志,解析后如何快速的插入mysql?

针对每日10万行的nginx日志,使用Python进行解析后,通过executemany批量插入MySQL数据库以提高效率。建议每次插入500-1000条记录,并在插入后立即commit。当数据量达到千万级别时,可考虑使用ElasticSearch等更适宜大数据存储的解决方案。提供的示例代码展示了如何实现批量插入。
摘要由CSDN通过智能技术生成

大家好。

nginx log 目前每天大概10万行数据,现在用python解析出了每个字段,现在想插入到mysql数据库里,用for实在太慢,请问有什么好的方法来搞。

回答

批量插入啊, 一次1000条

executemany

首先,如楼上所说,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()

用multiprocessing.dummy.Pool试试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值