最近在做windows服务方面的开发,主要用它来解决A服务和其他服务发送数据失败后,重新发送的问题。
为了提高大数据量并发访问时效率问题,要在多台服务器上安装服务并采用多线程,就像是超市的收银,利用多个收银台解决众多消费者的结算。
在多台服务器上安装服务就会想到对数据库表数据的多次访问,假设A服务和B服务同时请求到要发送的数据,这样该数据就会被发送和更新两次。
为了解决对数据表数据的同时访问。我们在服务里每次查找一条满足条件的数据。查找完之后更新status,(分为两种,0代表可以访问,1代表其他服务正在访问该条记录)和signId(用来表明是哪台服务器上的设备正在访问该表的数据)。表如下:
多个服务同时访问同一条记录用SignId(type Guid)来标记是哪台服务器最后访问并更新的该字段,在服务和其他服务通信发送数据时,将记录的SignId和表中的SignId证明是否是这台服务器最后访问的,如过signId相同则向其他服务通信并发送数据,否则不发送。这样既提高了大数据量并发访问时效率和减少了请求其他服务的次数。