一款針對EF Core輕量級分表分庫、讀寫分離的開源專案

chingho發表於2023-03-29

在專案開發中,如果資料量比較大,比如日誌記錄,我們往往會採用分表分庫的方案;為了提升效能,把資料庫查詢與更新操作分開,這時候就要採用讀寫分離的方案。

分表分庫通常包含垂直分庫、垂直分表、水平分庫和水平分表方案,包括分表分庫方案,實現每一個方案都需要花費一定的時間;所以,今天給大家推薦一個基於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
{
/// <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;" }
            });
            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 -

文章首發於公眾號【程式設計樂趣】,歡迎大家關注。
圖片

相關文章