读写分离

基于Nebula的项目启用数据库 读写分离 需要2个步骤:

  • 在配置服务中注册只读库
  • 在调用代码中指定参数使用读库



在配置服务中注册只读库

这个过程其实就是创建一个与【普通连接】类似的【只读连接】配置, 以下图为例:
xx
示例解释:

  • yunwei-s1 是一个可读可写的数据库连接配置
  • yunwei-s1_readonly 是一个只读的数据库连接配置
  • _readonly 这个后缀是固定的(一个约定),用于配置服务查找只读连接



在调用代码中指定参数使用读库

以下是一个 Action 的示例代码:

public async Task<string> Test2()
{
    // 连接到  与当前用户对应的 【只读/租户库】
    using( DbContext dbContext = this.CreateTenantConnection(tenantId:"xxxxx", readonlyDB:true) ) {

        return await dbContext.CPQuery.Create("select now()").ExecuteScalarAsync<string>();
    }
}

在这个示例中,调用 CreateTenantConnection 方法时第2个参数 readonlyDB:true 就表示使用【只读库】



也可以直接调用 DbConnManager.CreateTenant 方法

/// <summary>
/// 根据 租户ID 创建对应的SQL数据库连接
/// </summary>
/// <param name="tenantId">租户ID</param>
/// <param name="readonlyDB">是否连接【只读库】</param>
/// <returns></returns>
public static DbContext CreateTenant(string tenantId, bool readonlyDB = false)

InfluxClient也支持类似的只读库连接:

/// <summary>
/// 构造InfluxClient实例,并根据 租户ID 创建对应的连接
/// </summary>
/// <param name="tenantId">租户ID</param>
/// <param name="readonlyDB">是否连接【只读库】</param>
/// <returns></returns>
public static InfluxClient CreateTenant(string tenantId, bool readonlyDB = false)