在專案開發中,如果資料量比較大,比如日誌記錄,我們往往會採用分表分庫的方案;為了提升效能,把資料庫查詢與更新操作分開,這時候就要採用讀寫分離的方案。
分表分庫通常包含垂直分庫、垂直分表、水平分庫和水平分表方案,包括分表分庫方案,實現每一個方案都需要花費一定的時間;所以,今天給大家推薦一個基於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:
更多開源專案請檢視:一個專注推薦優秀.Net開源專案的榜單
- End -
文章首發於公眾號【程式設計樂趣】,歡迎大家關注。