java - Spring Multi-Tenancy Web 服务 : postgres vs mongodb

标签 java mongodb postgresql spring-boot jpa

我想使用spring创建一个简单的项目来控制不同环境下一些客户的状态。因此,一个客户可以有两个环境(开发和生产),而其他客户可能有一个、两个或三个。

基本想法是我想使用 spring 创建一个具有以下接口(interface)的 Web 服务: localhost:8080/customer1/environment1/statuscustomer1environment1 中提取状态数据。

我有两个选择:

  1. 使用MongoDB,每个客户一个数据库,每个环境一个集合以及状态文档。我发现以下问题:

    • 我在网上找到了很多解决方案,都是针对以前版本的Spring(我使用的是Spring 5)

    • 此外,我不确定如何实现动态集合(我的意思是,如果我向 localhost:8080/customer2/environment2/status 发出请求,我不仅想更改数据库,还想动态更改集合)

  2. 使用Postgres,每个客户使用一个架构,每个环境使用一个表(所有表都将具有相同的结构)

    • 问题是表名称可能不同(生产、开发、测试等),所以我应该在 Spring 中实现动态表名称(我不确定是否可能)

我几天来一直在寻找一个简单的解决方案(最初我认为这很容易,但看起来并不那么容易)

  • 您认为哪一个是最好且更简单的解决方案:MongoDB 还是 Postgres

  • 您能否提供重现它的基本步骤,或者提供一个包含我可以用作引用的代码的 Github 存储库?

PS:无需额外安全,因为它将是内部服务,因此客户数据的位置并不重要:可以位于同一数据库中,也可以位于不同数据库中

最佳答案

首先,我认为您的数据库选择应该更多地取决于一个数据库相对于另一个数据库的优点或缺点。其次,我不认为每个用户使用一个数据库是个好主意,想象一下当你有 5000 个用户时会发生什么,管理如此数量的数据库或每次在代码中不断更改数据库将是一件痛苦的事情。我建议您首先尝试在单个数据库中获取您的需求的压缩数据库模型,然后您可以选择更适合您的数据库。

希望对您有帮助!

关于java - Spring Multi-Tenancy Web 服务 : postgres vs mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56242150/

相关文章:

sql - 如何在 SQL 查询中获取 Paperclip 照片 url - Rails 3.1,Paperclip

java - 从 OracleJDBC 调用存储过程出现异常

arrays - MongodB $从数组中只拉一个元素

python - Psycopg2全动态更新语句

javascript - 如何根据mongodb中引用文档中的字段进行查询

node.js - Node js,%1 不是有效的 Win32 应用程序,js-bson : failed to load c++ bson extension, windows

php - Postgres,查询错误

java - 数据输入问题导致结果不正确?

java - 使用不同数据参数化 JUnit 测试

java - 如何在 spring-data-mongodb 中获取失败的@Indexed(unique=true)