在做一个考试系统中(都是选择题,信息量不大),考虑到考试人可能会很多,不能实时入库,用到了MSMQ,定时自动保存考生填写的答案信息到MSMQ中,避免电脑重启等问题引起答案丢失。
具体做法如下:
(1)Message Queue保存在一台独立的Server上, 客户端定时(如5分钟发一次)发送答案消息到Server端,Server有一个Window服务专门负责扫描Message Queue, 并把数据保存到数据库中.
(2)当Client端机器出故障重启了,再次启动时,从数据库中读取最新的数据,保证即使数据丢失也不会丢失很多。
问题
(1)这种做法不一定能保证数据可以取到最新答案数据,如何改进,请高人给点建议哦
(不考虑用异步的ajax处理答案的选择事件来保存答案的那种)
其实消息队列也只是一个在内存中存在的一个小的数据结构而已,只不过基于系统快一些。当然你想做的是从数据库表中拿到答案加上队列里这个客户端相关的答案返回给客户端。我感觉你难处理的是加上队列里的数据。
消息队列不好遍历,所以既然有这个需求,换个数据结构,比如一个DataTable,能很快地获取该客户端所有的答案(select方法)。
但这也只是个思路,其实遇到这种情况,一般应该行模拟实际情况,也就是说你说客户量会很多,至少你得先试出一千客户量一万客户量,甚至十万等等,队列一下子处理的时间等等数据。所谓知己知彼嘛。在测试出这些数据的前提下,说什么还都是纸上谈兵
首先谢谢你的回复哦,先测试是必须的,其实我是在考虑有没有好的替代方案
消息队列应该是存在硬盘中的,不是存在于内存中的,电脑重启了,消息队列的信息仍然存在,如果是内存中就达不我想要得功能啦
另外,消息队列就是一个队列,对列的遍历还是挺容易,不需要你考虑,微软MSMQ有自己的机制,会自己按顺序取的,你只负责保存数据就可以了