数据库弹性

我正在设计一个严重依赖数据库的应用程序。 我需要我的应用程序对数据库连接的短暂丢失具有恢复能力(例如,网络停机几秒钟)。 人们用于这些问题的通常模式是什么? 有没有什么我可以在数据库访问层上处理,以正常处理与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?