点击事件后插入数千条记录的最有效方法是什么?

ACP*_*ACP 2 asp.net sql-server-2005 insert

海家伙,

我已经开发了一个使用asp.net和sql server 2005的web应用程序作为考勤管理系统..你会知道每天都会进行出勤活动.逐个插入记录是个坏主意我知道,我的问题是

  • 在使用sql server时,Sqlbulkcopy是我唯一的选择,因为我想在点击事件中插入100条记录(即)为包含100名学生的班级插入考勤?我想逐个插入课程的出席?

pax*_*blo 7

除非你有一个特别巨大的你每天增加考勤记录数量,最好的办法是用insert语句(我不知道到底为什么你得到它到你的头上,这是一个坏主意,我们数据库经常处理全天添加的数千万行.

如果您的出勤记录超过这个数字,那么您就是胜利者,让很多人参加您正在运行的任何功能或课程:-)

批量复制和导入通常用于传输大量数据,我的意思是在数据库的整个内容中与灾难恢复站点(以及其他类似的东西)相当.我从未在野外看到它用于将小尺寸数据导入数据库的方法.


更新1:

我猜你的评论基于你实际上将你的出勤记录逐一输入到你的网络应用程序中,而1,500则需要太长时间.

如果是这样的话,那不是数据库减慢你的速度,也不是网络应用程序.这是你输入的速度有多快.

该问题的解决方案(如果确实问题)是在Web应用程序中提供批量导入功能(如果您愿意,可以直接提供数据库,但在我看来,如果应用程序完成所有工作,您的状况会更好).

这当然是假设您输入的数据可以通过电子方式访问.如果你得到的只是带有出勤细节的纸张,你可能会运气不好(尽管有OCR解决方案),尽管如果你能让多人同时做这件事,你可能有机会及时完成方式.招聘1,500人每人做一件应该在大约五分钟内敲门:-)

您可以向Web应用程序添加功能,以接受包含出勤详细信息的文件并处理每个条目,并在每个条目的数据库中插入一行.这比手动输入信息要快得多.


更新2:

根据您从Web应用程序启动数据后需要长时间处理数据的最新信息,我不确定您有多少数据,但100条记录基本上应该没有时间.

瓶颈在哪里我不能说,但你应该调查一下.

我知道在过去,我们已经从Web UI中进行了长时间运行,我们不想让用户占用.有很多解决方案,我们实施了两个:

  • 脱机操作(即在服务器后台运行),为用户提供ID以检查其他页面的状态.
  • 同样的事情,但一旦完成,通过电子邮件通知用户.

这使他们能够异步地继续工作.

  • 你是在告诉我你实际上是在编写1500个插入语句(手动)来完成这项工作吗?如果是这样,你是对的,这太疯狂了.但是假设它们来自某个地方的平面文件,你只需编写一个程序来为你做插入(基于该文件).如果它们不在某种文件中,批量插入将无济于事 - 您仍然需要输入数据.如果您正在插入它们并且一天内无法通过1500,那么您的DBMS会出现一些严重问题. (3认同)