Java 如何最好地将应用程序与不可靠的数据库隔离?
我有一个JavaSOAP数据服务,它位于Sybase数据库之上,由于我无法控制的原因,Sybase数据库的性能不可靠。该数据库是供应商软件包的一部分,该软件包已由内部团队修改,大多数问题都是由于一天中某些时间的响应速度慢造成的 SOAP服务向计算网格提供数据,当我请求数据时,我需要快速且一致的响应时间。该服务提供基本的CRUD功能,但读写比约为100:1Java 如何最好地将应用程序与不可靠的数据库隔离?,java,database,soap,sybase,reliability,Java,Database,Soap,Sybase,Reliability,我有一个JavaSOAP数据服务,它位于Sybase数据库之上,由于我无法控制的原因,Sybase数据库的性能不可靠。该数据库是供应商软件包的一部分,该软件包已由内部团队修改,大多数问题都是由于一天中某些时间的响应速度慢造成的 SOAP服务向计算网格提供数据,当我请求数据时,我需要快速且一致的响应时间。该服务提供基本的CRUD功能,但读写比约为100:1 将自己与数据库不可靠的性能隔离开来并确保SOAP服务快速可靠的最佳策略是什么?我已经多次看到这个问题,通常是在供应商数据库中 如果这是在Win
将自己与数据库不可靠的性能隔离开来并确保SOAP服务快速可靠的最佳策略是什么?我已经多次看到这个问题,通常是在供应商数据库中 如果这是在Windows上,您可以创建一个Windows服务作为SOAP服务和数据库之间的中介。然后在SOAP服务和Windows服务之间放置一个消息队列(MSMQ或JMS实现,如MQ Series),用于异步通信。这样,数据库性能问题将不再影响SOAP服务。然而,这种解决方案确实以增加复杂性为代价 请注意,.NETWeb服务可以由其客户端调用并异步响应。我不确定使用JavaSOAP服务是否可以做到这一点
如果这是在某种风格的Unix上,我假设它具有与Windows服务类似的功能—可能是守护进程。如何缓存来自web服务的响应(在调用WS请求的客户端上,或者通过在两者之间设置代理web服务)?如果数据库不是太大,您可以缓存数据库的结果。为什么不使用线程?这样,即使数据库运行缓慢,应用程序也可以缓慢地等待。RoadWarrior的响应是正确的。执行任何操作的请求都会被放入队列中。用户进来一次是为了发出请求,一次是为了接收请求。事实上,像Expedia这样的网站正在与一个不可靠的服务(后端)进行对话,这就是事实。用户的浏览器正在ping服务器,直到红灯变绿。让其他内部团队调整该数据库,这样每个使用该应用程序的人都会受益。我真的很爱我 这是内部应用程序吗?数据库是另一个集团所有的吗?你说的不可靠是什么意思?偶尔慢一点?给出错误?破坏信息?删除更新?细节会影响什么样的解决方案是合适的。你能更具体地说怎么做吗?我们能控制的,已经很好地调整了。但是,它是一个供应商应用程序,许多查询在应用程序中是硬编码的,不能更改。