我目前正在将一个巨大的CSV文件从我的iPhone导入到rails服务器。在这种情况下,服务器将解析数据,然后开始将数据行插入数据库。 CSV文件相当大,操作结束需要很长时间。
由于我是异步执行此操作,因此我的iPhone可以转到其他视图并执行其他操作。
但是,当它在另一个表中请求另一个查询时...这将是HANG因为第一个操作仍在尝试将CSV的信息插入数据库。
有没有办法解决这类问题?
答案 0 :(得分:1)
只要手机在数据库插入完成时不关心,您可能需要尝试将CSV文件存储在服务器上的tmp目录中,然后让脚本从该文件写入数据库。或者只是将其存储在内存中。这样,一旦手机发布了CSV文件,当脚本异步处理数据库插入时,它可以转移到其他内容。是的,@ Barmar正确使用InnoDB引擎而不是MyISAM(在某些配置中可能是默认的)。
或者,您可能需要考虑启用“低优先级更新”,这将延迟写入调用,直到所有挂起的读取调用完成。有关MySQL表锁定,请参阅this article。 (我不确定你说的是什么悬挂:更新,或在执行更新时读取...)
无论如何,如果您是从手机中异步发布数据(即,不是从UI线程),只要您不尝试使用超过最大并发HTTP数量的数据,它就不应该成为问题连接。