【问题标题】:Mongodb multitenant in .NET core project.NET 核心项目中的 Mongodb 多租户
【发布时间】:2019-04-05 18:59:48
【问题描述】:

我正在使用 .NET Core 和 MongoDB。目前它是一个单一的数据库项目。现在我想在我的项目中实现多租户。那是针对不同用户的单独数据库。当用户登录网站时,根据该用户的详细信息,想要选择连接字符串。

https://web.archive.org/web/20140812091703/

http://support.mongohq.com/use-cases/multi-tenant.html

https://gunnarpeipman.com/aspnet/tenant-providers/

但问题是我不知道如何在现有代码中实现这一点?

我现有的代码是

public MetaphorsContext(IMongoClient client,
                        IMongoDatabase database)
{
  _client = client;
  _database = database;
}

public IMongoCollection<Location> Locations
{
  get ???
}

【问题讨论】:

    标签: mongodb asp.net-core multi-tenant


    【解决方案1】:

    如果您的方法涉及同一集群中的不同数据库,那么您不需要不同的连接字符串,而只需要一个将每个租户 ID 映射到其各自的MongoDatabase 的字典:

    public IDictionary<string, IMongoDatabase> Databases = ...
    
    string tenantID = ...
    
    Databases.TryGetValue(tenantID, out var database);
    
    // use database to get collections
    

    如果不同的数据库保存在不同的集群中,那么您可以有一个字典,将每个租户 ID 映射到其各自的MongoClient

    public IDictionary<string, IMongoClient> Clients = ...
    
    string tenantID = ...
    
    Clients.TryGetValue(tenantID, out var client);
    
    // use client's databases and their collections
    

    【讨论】:

    • 能否提供更多细节?
    • 您还需要哪些详细信息?
    • 我有一个名为“TenantManagement”的主数据库,然后当用户登录时,然后检查这个数据库中的租户名称。所以我们得到了连接字符串,并将这个连接字符串用于那个特定的用户。有可能这样做吗?每个用户都有不同的数据库。
    • 在某些时候,您将不得不缓存用户的客户端/数据库(以防您为用户使用不同的数据库),这就是字典的作用所在。该字典的加载/初始化方式取决于您的用例要求。例如,如果用户不多,您可以在启动期间加载所有连接字符串并初始化 mongoDB 客户端,以便后续请求使用这些预先初始化的客户端进行访问。
    猜你喜欢
    • 2021-03-11
    • 2015-07-17
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多