我试图使用Python和MySQLdb接口实现以下功能:
对我来说,迭代每一行,即时处理然后在运行中将每个新行插入到新表中似乎是明智的.
这有效:
import MySQLdb
import MySQLdb.cursors
conn=MySQLdb.connect(
host="somehost",user="someuser",
passwd="somepassword",db="somedb")
cursor1 = conn.cursor(MySQLdb.cursors.Cursor)
query1 = "SELECT * FROM table1"
cursor1.execute(query1)
cursor2 = conn.cursor(MySQLdb.cursors.Cursor)
for row in cursor1:
values = some_function(row)
query2 = "INSERT INTO table2 VALUES (%s, %s, %s)"
cursor2.execute(query2, values)
cursor2.close()
cursor1.close()
conn.commit()
conn.close()
Run Code Online (Sandbox Code Playgroud)
但这很慢且占用内存,因为它使用客户端游标进行SELECT查询.如果我改为使用服务器端游标进行SELECT查询:
cursor1 = conn.cursor(MySQLdb.cursors.SSCursor)
Run Code Online (Sandbox Code Playgroud)
然后我收到2014年的错误:
Exception _mysql_exceptions.ProgrammingError: (2014, "Commands out of sync; you can't run this command now") in <bound method SSCursor.__del__ of <MySQLdb.cursors.SSCursor object at 0x925d6ec>> ignored …Run Code Online (Sandbox Code Playgroud) 我有一个MySQL UPDATE查询,需要很长时间才能完成.我错过了一种更简单的方法来实现相同的结果吗?
"UPDATE table2, table1
SET table2.id_occurrences = (SELECT SUM(IF(id = table2.id, 1, 0)) FROM table1)
WHERE table2.id = table1.id;"
Run Code Online (Sandbox Code Playgroud)
table2包含所有可能的值id,每个值只有一个记录.table1包含一些值id,但有一些值的多个记录.table2显示的对应值的出现次数id中table1.上面的查询完成了这项工作,但当table1包含500条记录和table230,000条记录时,大约需要3分钟.我有更大的表来处理所以这太长了:)提前致谢.
我有一个运行Ubuntu 12.04和Samba 3.6.3的文件服务器.Samba共享映射到Windows 8计算机上的驱动器.
将测试文件复制到本地驱动器(这是一个SSD而不是瓶颈)时,通过资源管理器执行此操作时速度非常慢.通过Internet Explorer下载文件时速度同样很慢.但是,通过Firefox(通过输入文件URI)下载时,速度超过10倍,如下图所示.
这里发生了什么?我知道Samba并不快,但我认为在处理大量小文件时通常就是这种情况,当它的请求逻辑非常低效时.测试文件是826 MB.

我正在使用flask-restful开发RESTful Web服务.
客户端需要能够请求服务器执行的作业.这项工作可能需要约1秒至约1小时才能完成.一般来说,预计需要1-5分钟.
作业完成后,客户端需要下载JSON转储.从100KB到100MB的任何地方.
我看到两个选项:
REST原则下哪个选项更受欢迎?
我在选项1中看到的问题是在等待响应时网络中断的可能性.
mysql ×2
python ×2
cursor ×1
fileserver ×1
flask ×1
iterator ×1
mapped-drive ×1
performance ×1
rest ×1
samba ×1
smb ×1
sql ×1