- 添加模拟数据生成器; - GC时添加碎片整理; - 优化日志输出,添加更多DEBUG监控项目; - 修复输出时分库配置逻辑的严重错误; - 优化了少许内存性能,减少Lambda闭包分配;
44 lines
1.4 KiB
C#
44 lines
1.4 KiB
C#
namespace MesETL.App.Options;
|
||
|
||
/// <summary>
|
||
/// 多租户分库配置
|
||
/// </summary>
|
||
public class TenantDbOptions
|
||
{
|
||
public string? TenantKey { get; set; }
|
||
public string? UseDbGroup { get; set; }
|
||
|
||
/// <summary>
|
||
/// Key-Value: {DbName}-{TenantKeyLessThan}
|
||
/// </summary>
|
||
public Dictionary<string, int>? DbGroup { get; set; }
|
||
|
||
public string GetDbNameByTenantKeyValue(int tenantKeyValue)
|
||
{
|
||
// var dictionary = new SortedDictionary<int, string>();
|
||
// DbList.ForEach(pair => dictionary.Add(pair.Value, pair.Key));
|
||
// 注意配置顺序
|
||
if(DbGroup is null) throw new ApplicationException("分库配置中没有发现任何数据库");
|
||
|
||
#region 性能较低,不使用
|
||
|
||
// var dbName = DbGroup.Cast<KeyValuePair<string, int>?>()
|
||
// .FirstOrDefault(pair => pair?.Value != null && pair.Value.Value > tenantKeyValue)!.Value.Key;
|
||
|
||
#endregion
|
||
|
||
string? dbName = null;
|
||
foreach (var (key, value) in DbGroup)
|
||
{
|
||
if (value > tenantKeyValue)
|
||
{
|
||
dbName = key;
|
||
break;
|
||
}
|
||
}
|
||
|
||
return dbName ??
|
||
throw new ArgumentOutOfRangeException(nameof(tenantKeyValue),
|
||
$"分库配置中没有任何符合'{nameof(tenantKeyValue)}'值的数据库");
|
||
}
|
||
} |