Spring+MyBatis 使用多个数据库支持故障转移的最佳方法



我需要开发一些服务并向一些第三方公开API。在这些服务中,我可能需要获取/插入/更新/删除涉及一些复杂计算的数据(不仅仅是简单的 CRUD(。我打算使用Spring和MyBatis。

但真正的挑战是将有多个具有相同数据的数据库节点(一些外部设置将负责使它们保持同步(。当我收到一些数据的请求时,我需要随机选择一个数据库节点并查询它并返回结果。如果所选数据库无法访问或存在一些网络问题或一些未知问题,那么我需要尝试连接到其他数据库节点。

我知道Spring的AbstractRoutingDataSource。但是在哪里注入数据库连接重试逻辑?如果我动态切换数据源,Spring 会正确处理事务吗?

或者我应该避免Spring和MyBatis的开箱即用集成,并使用MyBatis自己进行事务管理?

你们有什么建议?

我建议你使用像MongoDB这样的NoSQL数据库。它很容易聚类。例如,您可以配置使用 10 台服务器并执行 3 次数据复制。

这意味着,如果您的 10 台服务器中有 2 台出现故障 - 您仍然可以保存数据。

与RDBS相比,NoSQL数据库是不同的,但它们可以为集群提供高性能。

此外,NoSQL没有事务支持 - 在财务操作的情况下,您必须手动执行此操作。

实际上,在使用NoSQL进行开发时,您应该以不同的方式进行开发。

是的,它会起作用。获取 AbstractRoutingDataSource 并编写您自己的源代码。您唯一不能做的是在事务运行时更改目标数据库。

所以你要做的是把数据库重试代码放在getConnection中。如果在事务期间该连接变得无效,则应让它失败。

最新更新