mysql庞大的操作

问题描述:

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

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

但是,当它在另一个表中请求另一个查询时,这将HANG,因为第一个操作仍在尝试将CS​​V的信息插入到数据库中。

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

+0

您使用的是什么引擎?你需要像InnoDB这样的引擎,它具有记录级锁定而不是表级锁定。 – Barmar 2013-03-14 00:34:09

+0

我正在使用mysql数据库...不知道你是什么意思的引擎。 – freedom 2013-03-14 00:35:17

+0

这不是一个引擎,那是一个数据库。 MySQL有许多不同的引擎可以为每个表选择:InnoDB,MyISAM等。它们以不同方式存储数据,并具有不同的锁定机制和性能特征。 – Barmar 2013-03-14 00:46:43

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

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

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

+0

手机不应该关心数据库插入,因为它正在向服务器运行异步HTTP请求。 我有兴趣使用脚本来异步处理数据库插入。将CSV文件上载到数据库并使用脚本来解释文件夹中是否收到新文件。 是否允许单个用户连接到数据库的多个实例,以允许与数据库的多个连接,或者我必须使用不同的用户名连接到数据库以允许与数据库的多个连接? – freedom 2013-03-19 16:27:14

+0

我的意思是挂起是第一个事务正在进行,而下一个请求的查询正在等待第一个事务完成,然后它会处理。 – freedom 2013-03-19 16:42:21

+0

用户可以有多个连接。您甚至可以管理允许同时连接的数量。看看[这个页面](http://dev.mysql.com/doc/refman/5。0/en/user-resources.html)在MySQL文档中。 – enjayem 2013-03-20 00:11:44