2016-12-27 140 views
3

我们正在做一个多租户Web应用程序,架构是单个代码库 - 多个数据库。多租户 - 为每个租户动态创建数据库

我们有一个主数据库,它将存储所有租户及其相应的用户信息。

每当新的房客在我们这里注册时,我们需要为他们每个人分别设置一个DB。每个租户有大约15张桌子。

有两个选项可见我们处理这种情况

  1. 能有这将是该项目的一部分,每当有新房客登记,我们就可以运行脚本来创建新的数据库SQL文件和桌子。在这里,我需要维护所有的架构修改,并且很少有静态表。静态表格数据将在我们继续前进时进行修改。因此,所有这些历史都必须维护,并且我们需要在租户注册时运行整个脚本。

  2. 可以使用最新模式的空数据库。所以当一个租户注册时,我可以动态地从db中创建脚本并运行它。我不需要维护历史,因为空数据库模式将始终是最新的。

请让我知道是否有其他方法可以做到这一点。

随着功能的增长,我们还需要修改现有租户表的架构(新列,新表)。在考虑这种情况时,我们认为第一种选择可能是最好的,因为我们会有更改查询,但是第二种选择中,我需要比较可能很乏味的模式。

请分享你的设计思想。

+0

你解决了这个问题吗?如果您确实可以,请与我分享您使用的解决方案。万分感谢 – wandos

回答

1

我们做类似的事情。我们有一个共享的代码库,包含大量的配置选项。每个租户都有自己的数据库和存储,我们将其中大部分作为单个Web应用程序运行。

我们有一个管理租户信息的共享配置数据库。我们还有一个门户网站,可以创建租户并管理他们启用某些功能,配置存储帐户,数据库等。每个租户配置都是我们配置数据库中的数据库行。然后,我们为每个租户提供数据库并生成租户用户,并创建存储在配置数据库中的连接字符串。

在应用程序启动时,应用程序会标识它是哪个租户 - 从配置中获取用于租户数据库的连接字符串。我们正在使用实体框架迁移迁移到最新版本,因此客户机第一次使用其数据库时会创建模式。如果我们更新模式,则会添加迁移,并且下次客户端连接到数据库时,将应用新模式。为我们工作得很好。