1

我有一个网站,用户可以在其中上传 Excel 电子表格以在表格中加载数据。excel 电子表格中可以有几十个 100k 行。当他上传文件时,网站需要在数据库表中插入等量的行。

我应该采取什么策略来做到这一点?我正在考虑在操作完成之前显示“请等待页面”,但我希望他能够继续浏览该网站。另外,由于当时的数据库会很忙——这不会阻止人们在网站上工作吗?

我的数据访问层在 NHibernate 中。

谢谢, Y

4

3 回答 3

4

显示请稍候页面会非常不友好,因为您的用户可能会等待很长时间并且会阻塞您的 Web 服务器上的线程。

我会上传文件,将其存储并在队列中创建一个条目(为此您需要另一个表)以指示有文件等待处理。然后,您可以让另一个进程(甚至可以在它自己的服务器上运行)从这个队列表中获取任务并在它自己的时间处理 xls 文件。

于 2010-10-27T12:39:20.130 回答
1

我会创建一个上传队列来提交这个请求。然后用户可以每隔一段时间检查一次队列。您可以在处理行时将批处理操作的进度存储在队列中。

此外,数据库服务器是健壮、强大的多任务系统。除非您在插入时发现网站出现问题,否则不要认为它会阻止人们在网站上工作。

然而,就插入或并发读/写性能而言,有一些机制可以解决这个问题。您可以在 MySQL 中使用“INSERT LOW PRIORITY”语法,或者让您的应用程序通过在每个插入之间休眠一毫秒来限制插入。此外,如何制作插入语句、是否使用绑定参数以及是否使用多值插入都会影响插入性能以及它如何在很大程度上影响客户端。

于 2010-10-27T12:40:31.753 回答
0

在提交时,您可以将 DB 操作传递给异步 RequestHandler 并在完成后设置会话值。

当异步过程正在进行时,您可以检查每个请求的会话值,如果已设置(操作 = 已完成),则显示一条消息,例如以模式或您拥有的任何消息机制。

于 2010-10-27T12:44:42.127 回答