• 一款针对EF Core轻量级分表分库、读写分离的开源项目


    在项目开发中,如果数据量比较大,比如日志记录,我们往往会采用分表分库的方案;为了提升性能,把数据库查询与更新操作分开,这时候就要采用读写分离的方案。

    分表分库通常包含垂直分库、垂直分表、水平分库和水平分表方案,包括分表分库方案,实现每一个方案都需要花费一定的时间;所以,今天给大家推荐一个基于EF Code实现的分表分库、读写分离开源库,可以让我们零成本的接入。

    项目简介

    这是一个针对EF Code高性能、轻量级分表分库、读写分离开源项目,可以让我们方便快速接入、或者改造原有项目,几乎零成本接入。

    项目特性

    1、分表:时间分表、自定义分表、多表查询更新删除。

    2、分库:支持自定义分库、分库查询更新删除。

    3、分表分库:支持部分表格分表、部分表格分库。

    4、读写分离:支持一主多从的读写分离的方案。

    5、其他:支持动态分表、分库,支持高性能查询,支持事务等。

    技术架构

    1、跨平台:基于.NetCore开发,支持Windows、Mono、Liunx、Windows Azure。

    2、支持 Standard 2.0、.NetCore 2.0+。

    3、数据库:支持MySql、Oracle、SqlServer。

    项目结构

    图片

    该项目包含不同数据库的例子,src为不同版本的源码。

    快速上手

    1、表的定义

    public class SysUserMod:IAge
    {
    /// 
    /// 用户Id用于分表
    /// 
    public string Id { get; set; }
    /// 
    /// 用户名称
    /// 
    public string Name { get; set; }
    /// 
    /// 用户姓名
    /// 
    public int Age { get; set; }
    }
    

    2、分表规则

    public class SysUserModVirtualTableRoute : AbstractSimpleShardingModKeyStringVirtualTableRoute<SysUserMod>
    {
        //根据ID取模3,分为2张表
    public SysUserModVirtualTableRoute() : base(2,3)
        {
        }
    
    public override void Configure(EntityMetadataTableBuilder 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;" }
                });
                o.UseShardingMigrationConfigure(b =>
                {
                    b.ReplaceService<IMigrationsSqlGenerator, ShardingMySqlMigrationsSqlGenerator>();
                });
            }).ReplaceService<IModelCacheLockerProvider,DicModelCacheLockerProvider>()
            .AddShardingCore();
    }
    

    项目地址

    Github:

    https://github.com/dotnetcore/sharding-core

    Gitee:

    https://gitee.com/xuejm/sharding-core

    更多开源项目请查看一个专注推荐优秀.Net开源项目的榜单

    - End -

    文章首发于公众号【编程乐趣】,欢迎大家关注。
    图片

  • 相关阅读:
    leetcode 42. 接雨水(困难、单调栈的应用)
    ssm计算机系统结构综合考核管理系统 毕业设计源码26480
    谁还说我没表情包用?马上用Python采集上万张个表情包
    vscode中Emmet语法的使用
    电脑每过几天就要自动更新,一键教你解决
    2.如何使用Python官方文档
    《opencv学习笔记》-- Shi-Tomasi 角点检测
    js双向绑定
    昇腾CANN 7.0 黑科技:DVPP硬件加速训练数据预处理,友好解决Host CPU预处理瓶颈
    httpprompt.ml靶场练习
  • 原文地址:https://www.cnblogs.com/chingho/p/17106687.html