【问题标题】:Multitenancy data architecture [closed]多租户数据架构
【发布时间】:2013-12-26 20:19:02
【问题描述】:

目前正在开发预订管理系统。这是一个多租户应用程序,将有大约 50 个租户。

我们计划将这个ASP.Net MVC4/SQL Server 2008 应用程序托管在一些托管服务提供商中,例如 winasp.net 等(尚未决定)

Business Model Diagram

上面的图片描述了超级管理员,租户管理员,客户服务,医生等许多级别的用户。

为了实现这个作为数据库模型,我们选择了MSDN Multitenant Data Architecture 中提到的Shared Database with Shared Schema 方法

意味着我们添加了一个列TenantId in each table

我们的共享数据库和共享架构决策是基于以下内容做出的

  1. 租户数量 (50 +)

  2. 易于在租户之间共享通用元数据

  3. 如果租户有更多数据量,则将大租户(一/二)移动到单独的实例中

我们现在正在进行中,我们仍然害怕解决以下问题

  1. 数据安全 -> 每次都需要通过/检查 TenantId

  2. 单租户备份 --> 需要编写 SQL 查询进行备份,备份时考虑外键/自动增量很头疼

  3. 数据量。单库存储所有租户数据,查询数据慢

  4. 索引(不确定是否需要索引每个表中的所有TenantId列,因为它涉及所有WHERE

还有其他选项,例如

  • 单一数据库/租户
  • 共享数据库,独立架构

另外This Article 增加了一些方法

我们希望为我们当前的设计提供一些建议/更好的设计。

  • 新方法匹配上述业务图

  • 租户管理员/客服用户必须能够查看子租户记录

  • 查询性能

  • 租户之间共享通用元数据

  • 租户特定元数据

  • 租户特定数据字段(可选)

  • 轻松备份

【问题讨论】:

  • 我认为这太宽泛了,无法用一个问题来回答。将这些分解为有关您在实现中遇到的编程问题的具体问题可能是明智的。
  • 我提出这个问题是为了获得一些最少的信息/建议,以帮助我以正确的方式实施。在阅读了很多文章并没有找到我在这里提出的适当线索之后,只需更高级别的建议就足够了。
  • 我无法提供 200 赏金,因为没有可用的赏金链接,因为它已关闭 :(

标签: sql sql-server asp.net-mvc database-design multi-tenant


【解决方案1】:

在我看来,您应该重新考虑拥有共享数据库的决定。如果您因为机密性而需要严格的数据分离,那么您应该拥有单独的数据库。

索引(不确定我们是否需要索引每个表中的所有 TenantId 列,
因为它涉及到所有的WHERE

是的,您必须在每个表中为 TenantId 编制索引并将其包含在所有查询中。

此外,您似乎在分析需求之前就已决定使用 SQL Server。存储多租户数据可能有更自然的解决方案,即。 RavenDB,这将使分片/备份更加简单。我不想开始任何关于 nosql 等的讨论 - 只是建议应该先从需求开始,然后再选择合适的技术。

【讨论】:

  • 我只有 SQL 服务器知识。不知道 RavenDB :(
  • TenantId 应该是cluster or non cluster 索引?
  • 我认为TenantId 应该与行键一起成为聚集索引的一部分。
猜你喜欢
  • 2015-01-05
  • 1970-01-01
  • 2011-05-25
  • 2023-01-28
  • 1970-01-01
  • 2015-07-02
  • 1970-01-01
  • 2023-02-13
  • 2021-05-14
相关资源
最近更新 更多