我们正在尝试为新的 Web 应用程序决定数据库设计。我们预计将有近 10,000 个租户,并且希望将他们的数据保存在单独的数据库中(如果这样做有意义的话)。每个租户都会有一个大约 20MB 的数据库,他们主要跟踪 50 到 100 名青少年和 100 到 300 名成年人的个人数据,以及活动、出席情况、奖项等。我不知道有多少用户会同时登录,但每个租客可以有几个。
据我了解,我的选择是:
- 一种无共享方法,为每个租户提供单独的数据库。
- 为每个租户提供单独的表的模式方法。
- 共享一切的方法,每个租户都有自己的tenantID
理想情况下,我希望采用无共享方法,但我不清楚在遇到性能问题之前,SQL Server 中可以拥有多少个数据库。管理多个数据库并不是我们主要关心的问题,但如果 SQL Server 由于数据库数量过多而变得无响应,这就是我正在寻找的信息。请记住,数据库平均较小,只有 20MB。
就性能而言,哪种方法是我们采取的最佳路线?另请考虑拥有多个 SQL Server 许可证在成本方面并不理想。但如果有必要请告诉我。
我也在这里读过几篇文章,也多租户数据架构 https://msdn.microsoft.com/en-us/library/aa479086.aspx但我还没有看到一个真正明显的赢家,拥有大量租户但数据库很小。
另外哪个版本的 SQL Server 比较理想?
如果有人有类似的经验,请告诉我你是如何处理的以及效果是否良好。任何现实世界的经验/建议将不胜感激。
谢谢。
这在某种程度上是一个意见问题,因为确实没有正确的答案。所有这三个都适合你的情况。以下是一些需要考虑的事情:
为什么它必须位于单独的数据库中?:如果他们必须这样做是因为他们可以直接访问数据库,那么当然您必须这样做。听起来好像用户将拥有某种正在使用的应用程序,所以这不是最好的解决方案?另一件使它成为更好选择的事情是,如果可能的话,租户稍后可能会转移到单独的服务器。示例:ABC_Widgets 可能会在某个时间点将数据托管在自己的服务器上。目前,他们与所有其他租户住在一起。
每个数据库都有自己的开销尽管很小,但请记住 SQL 将为每个数据库分配一些空间。现在,将其乘以 10,000 DB,就会产生一大块被浪费的空间。
连接字符串从开发的角度来看,当您连接到数据库时,您必须拥有多个连接字符串或基于所使用的数据库动态创建的连接字符串。
模式方法我认为最好的用例是,例如租户 A 不会拥有相同的表,而租户 G 或租户 F 可能需要针对自定义情况的专门表/模式。
恕我直言,我认为你最好使用分配atenantID
到每个租户并将其存储在 1 个数据库中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)