我们正在使用MS SQL Server 2012,并为我们基于云的解决方案提供多租户数据库架构。 多租户设计如下
1.我们已经创建了对数据库表的视图,并将新组织注册到我们的应用程序中。 2.我们创建一个数据库用户并在视图上授予该用户访问权限。
这里的问题是,我们应该支持5000个组织。现在我们有spring-jdbc和c3p0连接池。
每个JVM创建组织数据源,每个数据源池最少5个连接,最多20个连接。
假设我们支持所有5000个组织,我们可能最终会断断连接或打开与SQL服务器的过多连接。
可能的解决方案之一是不基于组织用户池连接。
但是c3p0在内部存储基于用户的池。我也看了UserCredentialsDataSourceAdapter,但这不足以满足我的需要。
请分享您的想法和解决方案
提前致谢!!
答案 0 :(得分:0)
就个人而言,我不是为每个组织创建数据库用户的忠实粉丝。您无法为不同的数据库用户使用相同的连接(至少在我的opn中)。在这种情况下,你显然失去了分享联系的力量。
相反,我会为所有组织创建One Common用户,因为您对所有组织使用相同的表并在其上创建包装器(视图)以分隔组织之间的数据。
我希望你可能在所有表中都有userid列,它应该由userid索引/分区(因为你使用它创建视图)。
我最终会创建Master User表和与userId分区的所有基表的外来关系。
并且会在应用程序的所有查询中隐式添加userid过滤条件以及其他条件。
或者如果您仍然希望拥有View,最终会在应用程序堆栈(任何表单属性/数据库表)中维护视图 - userid组合并在触发查询之前选择适当的视图