我有以下问题:多个应用程序的条件的同步请求
我有一个多线程的服务器端应用程序,其中每个请求执行一个新的线程(标准情况)。根据这个请求,应用程序检查是否已将数据缓存到数据库中。如果是的话,它会提取它并将其发送回客户端。如果不是,则称远程服务响应存储在数据库中,然后提取返回给客户端。
该服务需要一段时间来计算数据,并且由于对我的应用程序的请求是异步执行的,所以我陷入了一个检查数据库请求的陷阱,看到里面什么都没有,然后调用服务。同时,另一个具有相同输入的请求会检查数据库,并且由于该服务需要一段时间,所以仍然没有任何内容......因此它会启动另一个服务调用。结果,数据被写入到DB两次,这依赖于它的唯一性(不能有两个记录具有相同的数据),从而导致任何成功操作。
我应该选择什么解决方案? 一个想法是将特定的UNIQUE字段约束放在数据库中。这样,即使应用程序尝试写入两次,数据库也会简单地拒绝它,并且应用程序将抛出异常。但是,该服务仍将被执行多次。
我想到的另一个解决方案是同步调用Web服务的方法。这样,每个连续的对我的应用程序的请求都会在前一个操作完成之前放入等待的堆栈中。这样,如果另一个具有相同输入数据的请求进入,而第一个请求仍在等待远程服务的结果,它将等待操作完成。然后,当第二个请求检查数据库时,数据已经存在,并且不需要再次调用该服务。这也将防止在数据库中有多个相同的记录。问题在于我的服务器应用程序的速度将不可避免地降低,因为每个请求都必须等待,即使是通常不应该的请求(那些据说我们已经在数据库中已经有数据的请求)
其他建议?我被卡住了。我怎样才能实现某种条件同步?
您的someSharedObject应该是来自endUser input的输入。否则它是很好的接近/ – 2011-12-29 07:58:43