数据库弹性
我正在设计一个严重依赖数据库的应用程序。 我需要我的应用程序对数据库连接的短暂丢失具有恢复能力(例如,网络停机几秒钟)。 人们用于这些问题的通常模式是什么? 有没有什么我可以在数据库访问层上处理,以正常处理与db的网络连接中的小故障(我正在使用hibernate + oracle jdbc + dbcp池)。
我假设你隐藏了DAO后面的每个数据库访问或类似的东西。
现在围绕这些DAO创建包装,尝试调用它们,并且在发生异常的情况下等待一秒钟,然后重试。 当然,这会在db-outage期间导致应用程序'挂起',但是当数据库变得可用时它会恢复正常运行。
如果这是不可接受的,你必须将切割靠近UI层。 考虑以下方法。
用户导致请求。
将所有请求信息包含在消息中并放入队列中。
返回给用户,告诉他他的请求会在短时间内得到处理。
队列中注册的工作人员将处理请求,并在数据库问题存在时重试。
请注意,您现在处于并发领域。 所以你必须处理引用已经被删除的实体的请求。
阅读“最终一致性”
由于您使用的是休眠,所以您必须处理延迟加载。 连接中断会导致会话中断,因此对于您来说,最好不要使用延迟加载,而是使用分离的对象。
链接地址: http://www.djcxy.com/p/67101.html上一篇: Database resiliency
下一篇: what's design pattern principle in the Android development?