【问题标题】:Importing data from files to database by the users of the site网站用户将数据从文件导入数据库
【发布时间】:2011-06-23 12:48:51
【问题描述】:

必须允许用户在网站上导入他们的数据(在 mysql 数据库中)。每个登录的用户都可以将文件中的数据导入数据库,然后在站点上使用它们。导入数据需要很长时间,也会对数据库造成高负载。 你能告诉我如何更好地排队导入吗?因此,数据将在线导入,但要对要定期写入数据库的数据进行排队。 谢谢。

【问题讨论】:

  • 您目前是如何处理的?您的数据是导入 XML、CSV 吗?
  • 您可以尝试将文件存储到目录中,将它们添加到排队数据库中,然后让进程定期运行以获取下一个排队项目。
  • .csv 文件中的数据不会写入一个数据库,而是写入多个相关表中。因此,要导入数据,需要从文件中读取一行并形成几个必须写入数据的 sql 语句,它看起来像 INSERT INTO main_tabel; LASTINSERTID();将此 id 插入相关表中。
  • 我现在从.csv导入,用户点击导入按钮后,我开始在线这个漫长的操作,这不是很好。
  • 每个文件都包含大量数据,从中导入数据需要很长时间。

标签: php mysql message-queue


【解决方案1】:

也许insert delayed 会有所帮助。来自手册:

使用 INSERT 的另一个主要好处 DELAYED 是从许多插入 客户端捆绑在一起,并且 写在一个块中。这是很多 比执行许多单独的操作更快 插入。

【讨论】:

  • 也许我会在线处理小文件,但较大的文件需要一些队列机制。
【解决方案2】:

我的建议是上传 .CSV 文件并将消息发布到队列中(或在其他事件上发布消息,例如单击“导入”按钮)。这样您就可以立即返回并显示“请等待导入”之类的消息。然后,一旦导入完成并更新数据库,HTML 页面就会自行刷新并显示正确的状态。根据服务器和/或数据库负载,您可以同时进行一个或多个同时导入。

【讨论】:

  • 是的,但是在这种情况下是否值得在 cli php 中为 cron 使用脚本来处理导入?我想分小部分导入文件,同时尽可能地在没有登录延迟的情况下导入。我想知道如何在定期导入数据的脚本中让它变得更好?我使用 Zend 框架,如果 Zend_Queue 可以完成这样的任务,那会很有趣(在我看来,它需要另一个与数据库的连接,我想我现在不太确定)。
  • 根据您使用的队列管理器,您可以设置它,以便队列管理器在队列中有新消息时启动客户端(即在处理之前不会有延迟)。我不确定 Zend_Queue 是否能够进行这种处理。
  • 我认为 Zend_Queue 做不到。
  • 上传文件后还有一个页面将.csv中的数据映射到系统中的字段,我想这个信息也必须存储在队列中。
  • 是的,您可以将其作为消息的一部分,用于处理特定上传的 .CSV 文件。
猜你喜欢
  • 2011-05-13
  • 2020-03-03
  • 2012-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-24
  • 1970-01-01
相关资源
最近更新 更多