虚拟卡类似游戏点卡,有卡号、密码和对应的点数。
一般卡的产生都是批次产生的,比如说,对应10元的卡一次产生10000张,对应20元的产生5000张。然后生成对应的卡文件,交给制卡公司去印刷。
目前我是这样产生卡。
目前卡表是这样建的, Card(CardID 主键 ,Password,Points ,CreateDate)1.指定产生某批次的卡号位数,对应的密码位数,该次需要产生卡的数量和金额;
2。然后随机生成一张卡号和密码;
3。插入到数据库中。CardID是主键,由于卡号是随机生成,因此卡号可能存在重复,所以必须通过插入数据库来判断该次产生的CardID是否有效;
4。循环产生,知道插入指定的卡数量为止。这种方式虽然能够正常工作,但是存在一些缺陷。
由于一次产生的卡的数量比较多,例如10000张,这样产生一次需要花很长的时间才能完成;因为必须要通过插入数据库才能知道产生的卡是否有效。这对于b/s的系统来说,可能会存在超时的问题。不知道,有没有其他更好的思路,除了卡的产生,还有可以对卡的管理的提出宝贵的意见。,陷在这里出不来了。

解决方案 »

  1.   

    给你个建议,你自己做一个对象,这个对象帮你新开一个线程,并且记录线程当前处理状态,当你在生成卡的时候,你是无法再执行新的线程即重复生成卡,当线程执行完毕后,你再来访问这个页面,获取到的状态就是产卡完毕。。这样你就不用担心长连接问题
    第二个方法也是我现在在用的方式是,当有这样的的需求的时候,就把需求直接丢给数据库的JOB去做,之后你就可以去做自己的事情。过几分钟,当再次访问这个页面的时候,页面会提示我有新的卡生成,并且提供卡及卡密码下载就可以了。。总之在WEB上不提倡使用长连接来处理事情,我们应该尽量把需要长时间与数据库进行交互的事件提交给新的线程或者数据库去处理,毕竟使用者也不愿意花那么长时间去等待一个事情的完成,而且这个事情处理完之前还不能切换到别的页面,你说呢。
      

  2.   

    第二个方法也是我现在在用的方式是,当有这样的的需求的时候,就把需求直接丢给数据库的JOB去做,之后你就可以去做自己的事情。过几分钟,当再次访问这个页面的时候,页面会提示我有新的卡生成,并且提供卡及卡密码下载就可以了。。 killerliu(Lain) ,这种方式如何做,能不能详细点,谢谢!
      

  3.   

    长时间的操作,应该使用异步执行方式,比如楼上兄弟提到的使用数据库的Job支持,或者自己开发服务,或者使用MSMQ/IBMMQ等系统来执行,稍后再通过Web页面来查看数据处理状态。