当前位置: 首页 > 知识库问答 >
问题:

Hibernate和Spring Data JPA的多租户,模式方法如何工作

邹丰羽
2023-03-14

我已经多次阅读了Hibernate多租户文档(这里)以及许多其他线程。

我有什么:我有一个工作的应用程序,它提供数据(例如:产品)通过Rest服务。

MYSQL(5.6)-

一切正常(积垢)

我的应用程序中有多个表(客户、客户兴趣、产品、产品标签等)。

我为什么要问:

我想添加多租户-

所以我的问题是:

1)Hibernate的Schema-APPROACH究竟是如何工作的?

2)那么它适用于多表吗?

补充资料/问题:

  • 不会有那么多房客(

MultiTenantConnectionProvider的例子让我有点困惑,因为它添加了"use"语句,我以为是"use"数据库?SRC:(例如,此方法仅与SCHMA方法相关。)

提前感谢您的帮助。如果有什么秘密请告诉我

共有1个答案

柴岳
2023-03-14

Hibernate使用一个会话与底层数据库进行通信,该会话是JDBC连接上的抽象。因此,每当应用程序代码试图使用Hibernate执行数据库操作时,Hibernate会话都会获得JDBC连接,然后对获得的连接执行常规SQL。

在多租户的模式方法中,为每个租户分配了一个单独的数据库模式。这使得每个租户的数据彼此分离。然后,在将JDBC连接移交给Hibernate会话之前,在JDBC连接上设置当前租户的架构。这确保了当会话在连接上执行SQL语句时,这些语句将仅在所需租户的数据上执行(由数据库模式保证)。

设置模式的SQL命令因数据库而异。您所引用的示例将在SQLServer和MySQL上运行良好,因为选择模式的命令是USE

每个数据库对单个模式可以包含的表(确切地说是对象)的数量都有限制。您必须参考正在使用的数据库的文档,以确定每个模式可以有多少个数据库对象。但是,所有现代数据库对每个模式的支持都超过100个对象,因此,除非每个租户有数百万或数十亿个表,否则每个模式可以拥有的表的数量应该不会令人担忧。

 类似资料:
  • Hibernate还不支持通过判别器策略实现多租户的方法。我们正在考虑在我们的项目中实现这个策略。但是我们对一般的查询性能有些怀疑。查询性能会比单独数据库/模式方法差吗,因为在这种情况下,查询是在多个租户的单个数据模式上运行的?或者在这种情况下,除了创建索引之外,还有什么方法可以提高查询性能? 我们正在考虑采用鉴别器方法,因为最好是进行备份

  • 我试图掌握如何使用Hibernate、Spring和MySQL实现多租户。对于第一个游乐场示例,我选择了单独的数据库方法:每个租户都有自己的数据库,名为accodingly。此外,还使用另一个数据库来管理租户。特定于租户的数据库保存了一些员工数据。对于第一种方法,我不强制用户进行身份验证。 我发现很难得到关于这个话题的全面教程,这就是为什么我现在有点迷路。当我尝试部署Tomcat时,会收到以下消息

  • 我正在构建一个应用程序,它应该服务于多个租户,并存储他们非常敏感的数据。每个租户都有多个用户。我的后端堆栈是用spring boot Hibernate5构建的。我希望hibernate处理多租户问题,所以我有两个问题要问专家: 如果我使用的是每租户模式范式,如何在登录时将用户名与租户关联?每个租户都有自己的用户表,那么我如何知道用户名属于哪个租户呢? 在注册时,什么是正确的方法来动态创建新模式?

  • 如何使用django租户模式将数据从共享模式迁移到多租户模式? 我们有一个saas,最初没有使用django租户模式,而是使用共享数据库、共享模式的方法。我们现在发现了django租户模式,并认为这是正确的选择。 现在的问题是如何将数据从单一的模式迁移到独立的租户模式。 文档说明如下: 注意:如果这是您第一次运行此命令,您的数据库应该是空的。 在我现有的应用程序中,我有一个租户表,所有其他模型都有

  • 我正在学习多租户应用程序,以及如何使用PostgreSQL的模式来实现这一点。 在研究这个主题时,我发现了一篇文章,作者描述了在多租户应用程序中使用PostgreSQL模式时的糟糕体验。主要问题是迁移性能差和数据库资源使用率高。 似乎只有一个模式(在租户之间共享表)会比每个租户有一个单独的模式带来更好的性能。但我觉得很奇怪。我的想法正好相反,因为较小表上的索引往往比较大表上的索引轻。 为什么在许多

  • 早上好,我正在尝试使用flyway、hibernate、panache和多租户设置一个QUARKUS项目。但是脚本只在第一个模式上运行一次,有人知道如何在其他模式上运行吗? 应用程序. yml .LOG 我的路径路径 如您所见,它仅在第一个架构中运行。如何在这三者上运行? Obs。:对不起,我的英语不好!:)