在多租户应用程序中加载租户特定变量

时间:2017-09-11 07:46:41

标签: c# asp.net-mvc multi-tenant

我有一个多租户架构的MVC应用程序。在这里,有一些全局变量(每个租户的所有用户都通用),有些是特定于登录用户的。 此外,还有一些设置对特定租户的所有用户都是通用的。

我正在存储和检索全局和会话变量,如下所述。

  • 特定于登录用户 - HttpContext.Current.Session["sessionVariableName]。这些变量在用户登录时加载。
  • 全局变量 - HttpContext.Current.Application["applicationVariableName"]。这些变量在应用程序启动时加载到Global.asax中。

现在我有一个问题,如何加载租户特定的变量。在哪种情况下我需要加载vaiables?我不想在应用程序启动时加载所有租户特定变量,因为许多租户可能没有使用该应用程序。此外,在每个用户登录时检查和加载租户特定设置可能是开销。 什么是最好的方法?

1 个答案:

答案 0 :(得分:0)

在您的情况下,我想建议以下方法

  1. 创建一个名为" TenantSettings"保留租户特定设置
  2. 创建一个名为" UserSettings"的表格。它包含所有用户特定设置
  3. 确定租户登录后,然后当您第一次获得租户设置时,您将TenantSettings存储到缓存中[分布式或内存式syc' ed via pub-sub]
  4. 此外,登录用户后,获取UserSettings并将其放入缓存中[与3中相同]
  5. 请勿使用应用程序内存,因为缓存可能会被意外污染,并且无法随负载扩展
  6. 的数据库实体详细信息

    <强> 1。 TenantSettings 以下可以是TenantSettings

    的列
      
        
    • TenantId
    •   
    • SettingId
    •   
    • SettingValue
    •   
    • AuditFields,如CreatedBy,CreatedOn,IsActive,UpdatedBy ......
    •   

    <强> 2。 UserSettings

      
        
    • 用户ID
    •   
    • TenantId
    •   
    • SettingId
    •   
    • SettingValue
    •   
    • 审核类似于上述
    • 的字段   

    希望这有帮助。