我是否应该将 MongoDB 与实体的关系用于非阻塞端到端与我的 Spring 5 项目?

Should I use MongoDB with entity's relations to be non-blocking end to end with my Spring 5 project?

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

我目前采用反应式方法,感谢 Spring 5 版本中包含的 Reactor 项目并创建了反应式控制器。我需要在我的数据库中保留具有关系的规范化数据,这就是我使用 PostgreSQL 的原因。

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

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

我读到可以在我的实体与 MongoDB 之间保持一些关系,尤其是在没有折射器的情况下,最后一个 4.0 版本完全是我的数据库模式。但我想知道什么是值得的?

感谢您的帮助和建议!

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

这是我的 2 美分。 问候