映射多租户数据库
本文关键字:数据库 映射 | 更新日期: 2023-09-27 18:31:54
好吧,我们正在开发一个具有单独 数据库。所有架构都具有相同的结构,用于 N 个单独的 数据库。 我们正在使用带有aspx的MySql来构建Web应用程序。 现在会出现一种情况,即可能有相同的用户在 N 个独立的数据库。 我们需要一种方法来连接这些数据库 用户拥有他/她的数据并将其显示在下拉列表中。 链接数据库后,当用户登录时,他/她将能够 在下拉列表中查看他/她的所有可用数据库 数据驻留。 当用户更改下拉列表值时,他/她 应该能够立即更改数据库并查看他/她 数据构成链接的数据库。 我们已经建立了多租户 应用程序和一切都很顺利。 问题是如何 将所有这些数据库从 master 数据库映射为特定 用户。每个用户在单独的数据库中都有一个单独的唯一 ID。 因此,用户在多租户数据库中没有任何共同点 除了数据结构。我们尝试存储所有用户的唯一 ID 并将其与其他唯一 ID 链接,其中 用户驻留,但解决方案没有给出丰硕的成果。任何 其他选择是最受欢迎的。
我为多租户 mysql 使用的方法是:
- 包含所有数据的主数据库都是租户,但每个表都有一个
tenantID
列,该列按租户分隔数据 - 为每个租户创建多个数据库,但该数据库填充了引用回主数据库的 MySQL 视图。例如:
.
# ie. main database has tables: users, and invoices
# if you have a new tenant named "acme", then:
create database acme;
create view acme.users as select * from maindb.users where entityID=2;
create view acme.invoices as select * from maindb.invoices where entityID=2;
在我的情况下,这使我不必更改以前的任何查询(这些查询是在我知道要使用多租户之前构建的)。我所要做的就是选择合适的数据库,所有数据都会自动分离。
但是将实际数据全部保存在同一个数据库中,这简化了维护。