读写分离
基于Nebula的项目启用数据库 读写分离 需要2个步骤:
- 在配置服务中注册只读库
- 在调用代码中指定参数使用读库
在配置服务中注册只读库
这个过程其实就是创建一个与【普通连接】类似的【只读连接】配置, 以下图为例:
示例解释:
- 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)