我使用Python和MySQLdb在大型75M行数据库上执行一些计算。基本的程序流程是迭代每一行,处理数据,然后使用另一个游标将新数据放回到行中。对于纯SQL,处理过于复杂。
db1 = MySQLdb.connect(host=HOST, user=USERNAME, passwd=PASSWORD, db=DATABASE)
db1.ping(True)
cursor1 = db1.cursor()
db = MySQLdb.connect(host=HOST, user=USERNAME, passwd=PASSWORD, db=DATABASE)
db2.ping(True)
cursor2 = db2.cursor()
cursor1.execute("SELECT * FROM table")
for row in cursor1:
cursor2.execute("SELECT * FROM table")
new_data = process_stuff(row)
cursor2.execute("UPDATE table SET column = '%f'", (new_data))
db2.commit()
db1.close()
db2.close()
这通常是有效的。但很多时候,它会默默地退出而不会显示错误消息。有时,但并非总是如此,它会给出一个" MySQL已经消失了#34;错误。
它也很慢。我知道它是一个相当大的数据库,但处理所有内容大约需要24小时。它是一台拥有24 GB内存的不错的机器,但它真的需要这么久吗?我花了好几个小时摆弄my.conf,没有真正的收获。