1

我目前正在将一个巨大的 CSV 文件从我的 iPhone 导入到 rails 服务器。在这种情况下,服务器将解析数据,然后开始将数据行插入数据库。CSV 文件相当大,操作结束需要很长时间。

由于我是异步执行此操作,因此我的 iPhone 可以转到其他视图并执行其他操作。

但是,当它在另一个表中请求另一个查询时.. 这将挂起,因为第一个操作仍在尝试将 CSV 的信息插入数据库。

有没有办法解决这类问题?

4

1 回答 1

1

只要手机不关心数据库插入何时完成,您可能希望尝试将 CSV 文件存储在服务器上的 tmp 目录中,然后将脚本从该文件写入数据库。或者只是将其存储在内存中。这样,一旦手机发布了 CSV 文件,它就可以在脚本异步处理数据库插入时继续做其他事情。是的,@Barmar 关于使用 InnoDB 引擎而不是 MyISAM(在某些配置中可能是默认设置)是正确的。

或者,您可能需要考虑启用“低优先级更新”,这将延迟写入调用,直到所有挂起的读取调用完成。请参阅这篇关于 MySQL 表锁定的文章。(我不确定你说的到底是什么挂起:更新,或者在执行更新时读取......)

无论如何,如果您从手机异步发布数据(即,不是从 UI 线程),只要您不尝试使用超过最大并发 HTTP 连接数,这应该不是问题。

于 2013-03-14T03:25:58.037 回答