分表分库通常包含垂直分库、垂直分表、水平分库和水平分表方案,包括分表分库方案,实现每一个方案都需要花费一定的时间;所以,今天给大家推荐一个基于EF Code实现的分表分库、读写分离开源库,可以让我们零成本的接入。
项目简介
项目特性
1、分表:时间分表、自定义分表、多表查询更新删除。
3、分表分库:支持部分表格分表、部分表格分库。
5、其他:支持动态分表、分库,支持高性能查询,支持事务等。
技术架构
2、支持 Standard 2.0、.NetCore 2.0+。
项目结构
快速上手
1、表的定义
public class SysUserMod:IAge
{
/// <summary>
/// 用户Id用于分表
/// </summary>
public string Id { get; set; }
/// <summary>
/// 用户名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 用户姓名
/// </summary>
public int Age { get; set; }
}
2、分表规则
public class SysUserModVirtualTableRoute : AbstractSimpleShardingModKeyStringVirtualTableRoute<SysUserMod>
{
//根据ID取模3,分为2张表
public SysUserModVirtualTableRoute( : base(2,3
{
}
public override void Configure(EntityMetadataTableBuilder<SysUserMod> builder
{
builder.ShardingProperty(o => o.Id;
}
}
3、Startup配置
public void ConfigureServices(IServiceCollection services
{
......
services.AddShardingDbContext<DefaultShardingDbContext>(
.UseRouteConfig(o =>
{
//定义分表路由
o.AddShardingDataSourceRoute<SysUserModVirtualDataSourceRoute>(;
}.UseConfig((sp,o =>
{
......
//指定主从数据库
o.AddDefaultDataSource("ds0",
"server=127.0.0.1;port=3306;database=db1;userid=root;password=root;";
o.AddExtraDataSource(sp => new Dictionary<string, string>(
{
{ "ds1", "server=127.0.0.1;port=3306;database=db2;userid=root;password=root;" },
{ "ds2", "server=127.0.0.1;port=3306;database=db3;userid=root;password=root;" }
};