10k租户和多租户数据库设计

时间:2015-05-18 19:12:53

标签: sql-server database

我们正在尝试为新的Web应用程序决定数据库设计。我们希望有近10,000名租户,并希望将数据保存在不同的数据库中,如果这样做有意义的话。每个租户都有一个大约20MB的数据库,他们主要跟踪50到100名青少年和100到300名成年人的个人数据以及活动,出勤,奖励等。我不知道有多少用户会一次登录但是每个租客可以有几个。

我理解他们的选择是:

  • 无共享方法,为每个租户提供一个单独的数据库。
  • 一种架构方法,为每个租户提供单独的表格。
  • 每个租户都有自己的tenantID
  • 的共享方法

我理想情况下喜欢无共享方法,但我不清楚在遇到性能问题之前SQL Server中可以有多少个数据库。管理多个数据库对我们来说不是一个主要问题,但如果SQL Server由于DB的数量而变得没有响应,这就是我正在寻找的那种信息。请记住,数据库平均小于20MB。

性能明智哪种方法是我们采取的最佳途径?还请考虑多个SQL Server许可证不是理想的成本。但是如果有必要请告诉我。

我还在这里阅读了几篇文章以及Multi-Tenant Data Architecture,但我还没有看到一个真正明显的赢家,拥有大量租户但数据库非常小。

哪种版本的SQL Server是理想的?

如果有人有类似经历的经验,请告诉我你是如何处理的,以及它是否运作良好。任何真实世界的经验/建议将不胜感激。

谢谢。

1 个答案:

答案 0 :(得分:1)

这有点意见问题,因为确实没有正确的答案。所有3个都适用于您的情况。以下是一些需要考虑的事项:

为什么它必须在单独的数据库中?:如果他们必须这样做,因为他们可以直接访问数据库,那么当然你必须这样做。听起来好像用户会使用他们正在使用的某种应用程序,所以这不是最好的解决方案吗?另一件使这个更好的选择的事情是,如果可能的话,租户可能会在以后被移动到一个单独的服务器上。示例:ABC_Widgets可能会在某个时间点将数据托管在自己的服务器上。现在,他们与所有其他租户一起托管。

每个数据库都有自己的开销虽然很小,但请记住SQL会为每个数据库分配一些空间。现在将它乘以10,000 DB并且你有一大块浪费的空间。

连接字符串从开发的角度来看,当您连接到数据库时,您必须拥有多个连接字符串或基于所使用的数据库动态创建的连接字符串。

架构方法我认为最好的用例是,例如租户A不会有相同的表,租户G或租户F可能需要专门的表/架构自定义的情况。

恕我直言,我认为您最好使用为每个租户分配tenantID并将其存储在1个数据库中。