第三十五节:ShardingCore框架高级(自定义路由规则、分页、动态追加分库分表、批量操作、事务等等)
一. 自定义路由规则
(这里以自定义分表路由规则为例)
1 要求
(1) 根据用户年龄Age字段来分表,分三张表,分别是SysUser_A、SysUser_B、SysUser_C
(2) 1-10岁在A表 11-20岁在B表 21岁及以上在C表
2 核心步骤
(1) 自定义分表需要继承 AbstractShardingOperatorVirtualTableRoute 类
(2) 重写GetTails方法,返回表的后缀; 重写Configure方法,定义分表字段和分隔符
(3) 重写ShardingKeyToTail方法,自定义规则,让shardingKey返回对应表的后缀名
(4) 重写GetRouteToFilter方法,过滤后缀,如下所示
分享虚拟路由代码
public class SysUserZdyVirtualTableRoute : AbstractShardingOperatorVirtualTableRoute<SysUser, string>
{
/// <summary>
/// 返回所有表的后缀
/// </summary>
/// <returns></returns>
public override List<string> GetTails()
{
return ["A", "B", "C"];
}
/// <summary>
/// 分表的相关配置
/// </summary>
/// <param name="builder"></param>
public override void Configure(EntityMetadataTableBuilder<SysUser> builder)
{
//表示根据Age进行分表
builder.ShardingProperty(o => o.Age);
//表中间的分隔符,默认就是这个
builder.TableSeparator("_");
}
/// <summary>
/// 定义如何将shardingkey的value转换成对应的表后缀
/// </summary>
/// <param name="shardingKey">分表键</param>
/// <returns></returns>
/// <exception cref="InvalidOperationException"></exception>
public override string ShardingKeyToTail(object shardingKey)
{
// ShardingCoreHelper.GetStringHashCode(mykey) 获取string的hash值
int mykey = Convert.ToInt32(shardingKey);
if (mykey >= 1 && mykey <= 10)
{
return "A";
}
else if (mykey >= 11 && mykey <= 20)
{
return "B";
}
else
{
return "C";
}
}
/// <summary>
/// 如何过滤后缀
/// 下面是通用写法,不用改
/// </summary>
/// <param name="shardingKey"></param>
/// <param name="shardingOperator"></param>
/// <returns></returns>
public override Func<string, bool> GetRouteToFilter(string shardingKey, ShardingOperatorEnum shardingOperator)
{
//因为hash路由仅支持等于所以仅仅只需要写等于的情况
var t = ShardingKeyToTail(shardingKey);
switch (shardingOperator)
{
case ShardingOperatorEnum.Equal: { return tail => tail == t; }
default: { return tail => true; }
}
}
}
3. 其他
其他的配置与之前相同,这里不再赘述
二. 高性能分页
详见文档:https://xuejmnet.github.io/sharding-core-doc/adv/pagination/
未实操
三. 动态追加表库
详见:https://xuejmnet.github.io/sharding-core-doc/adv/dynamic-table/
PS:文档版本太老,存在问题
四. 批量操作
经测试
EFCore自带的批量修改、批量删除 是可以正常使用的。
但是,三方框架【EFCore.BulkExtensions】 和 【Zack.EFCore.Batch.MSSQL_NET8】 都报错,可能需要再配置啥??
都报错,找不到对应的表,比如:SysUser
五. 事务
详见:https://xuejmnet.github.io/sharding-core-doc/adv/transaction/
!
- 作 者 : Yaopengfei(姚鹏飞)
- 博客地址 : http://www.cnblogs.com/yaopengfei/
- 声 明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
- 声 明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
2017-12-08 第十二节:MVC中的一些特殊优化