我们使用MS SQL Server 2012,并为我们的基于云的解决方案提供了多租户DB体系结构。多租户的设计如下
1.我们在DB表上创建了视图,并在应用程序中注册了新组织。2.我们创建一个数据库用户,并向该用户授予查看权限。
这里的问题是,我们应该支持5000个组织。现在我们有了spring-jdbc和c3p0连接池。
每个JVM创建组织级的数据源,每个数据源池最少5个连接,最多20个连接。
假设我们加入了所有5000个组织,我们最终可能会缺少连接或打开太多到SQL服务器的连接。
一种可能的解决方案是不基于组织用户的连接池。
但c3p0在内部存储基于用户的池。我还查看了UserCredentialsDataSourceAdapter,但这不能满足我的需要。
请分享您的想法和解决方案
提前感谢!!
发布于 2014-05-14 02:37:06
就我个人而言,我不太喜欢为每个组织创建数据库用户。你不可能对不同的数据库用户使用相同的连接(至少在我的opn中是这样)。在这种情况下,你显然失去了共享连接的能力。
相反,我会为所有组织创建一个通用用户,因为您对所有组织都使用相同的表,并在其上创建包装器(视图)来分隔组织之间的数据。
我希望您在所有表中都有userid列,并且应该按userid对其进行索引/分区(因为您正在使用该列创建视图)。
我最终会创建主用户表,并创建与所有由userId分区的基表的外部关系。
并且将在来自应用程序的所有查询中隐式地将用户in过滤条件与其他条件一起添加。
或者,如果您仍然希望拥有View,那么最终将在应用程序堆栈(任何表单属性/数据库表)中维护view - userid组合,并在触发查询之前选择合适的视图
https://stackoverflow.com/questions/23636594
复制相似问题