我应该使用具有实体关系的 MongoDB 来实现 Spring 5 项目的端到端非阻塞吗?

前段时间我开始了一个 Spring WebFlux 项目,这个项目的目标是提供一个 REST API,它从数据库中收集数据。

我目前采用反应式方法,这要归功于 Spring 5 版本中包含的 Reactor 项目并创建了反应式控制器。我需要坚持我的数据库规范化数据与关系,这就是我使用 PostgreSQL 的原因。

在我写这行代码的时候,没有为 JDBC 和 JPA 提供反应式编程支持。但是我的控制器只有在它们使用的其他组件也是非阻塞的情况下才是真正的非阻塞。如果我编写的 Spring WebFlux 控制器仍然依赖于阻塞存储库,那么我的反应式控制器将被阻塞,等待它们生成数据。

我想要端到端的非阻塞,所以我想继续使用 Spring Data 支持的 NoSQL 数据库之一:Cassandra DB 或 MongoDB。我不认为 Cassandra DB 真的适合我的需求,我需要重写我的实体并以不同的方式思考我的数据库结构以面向查询。

我读到可以在我的实体与 MongoDB 之间保持一些关系,尤其是在没有完全折射我的 db 模式的最新 4.0 版本中。但我想知道什么是值得的?

  • 即使我需要保留关系数据,也切换到 MongoDB

  • 保持以阻塞方式获取数据,然后尽快将其转换为响应式类型

  • 忘记 Spring WebFlux 回到 Spring MVC(可能不是)

感谢您的任何帮助和建议!


哔哔one
浏览 116回答 1
1回答

MM们

我认为这取决于您的上下文,似乎转移到文档数据库可能不适合您的数据,因为它似乎完全相关,除非您确定可以将数据建模为一堆聚合,否则您可能最终在检查模型之间的一致性规则时存在其他问题,例如事务一致性。作为第一个选择,我会尝试在另一个线程中获取数据,也许将调用包装在 rxjava observable 中。虽然它仍然是一个阻塞调用,但它不会阻塞主线程,您将能够更好地利用资源。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java