【开源项目】|
作者
/ 寒空飞箭 一个为EF Core提供Sharding的开源框架
在博客园上小编Edison高兴地发现了一个为EF Core提供读写分离分库分表支持的开源框架EFCore.Sharding,因此特破例于今日周二转载此文以快速地分享与各位童鞋。 本文作者寒空飞箭,该项目源码地址传送门:https://github.com/Coldairarrow/EFCore.Sharding 1项目简介
在博客园上小编Edison高兴地发现了一个为EF Core提供读写分离分库分表支持的开源框架EFCore.Sharding,因此特破例于今日周二转载此文以快速地分享与各位童鞋。 本文作者寒空飞箭,该项目源码地址传送门:https://github.com/Coldairarrow/EFCore.Sharding 1项目简介
读写分离分库分表一直是数据库领域中的重难点,当数据规模达到单库极限的时候,就不得不考虑分表方案。EF Core作为.NET Core中最为主流的ORM,用起来十分方便快捷,但是官方并没有相应的Sharding支持,鄙人不才,经过一番摸索之后终于完成这个框架。
本框架旨在为EF Core提供Sharding(即读写分离分库分表)支持,不仅提供了一套强大的普通数据操作接口,并且降低了分表难度,支持按时间自动分表扩容,提供的操作接口简洁统一。
源码地址:https://github.com/Coldairarrow/EFCore.Sharding
2快速开始准备工作
首先根据需要安装对应的Nuget包:配置工作
class Base_UnitTestShardingRule : ModShardingRule{
protected override string KeyField => "Id"; protected override int Mod => 3;}ShardingConfig.Init(config =>{
config.AddAbsDb(DatabaseType.SQLite) .AddPhysicDb(ReadWriteType.Read | ReadWriteType.Write, "DataSource=db.db") .AddPhysicDbGroup() .AddPhysicTable("Base_UnitTest_0") .AddPhysicTable("Base_UnitTest_1") .AddPhysicTable("Base_UnitTest_2") .SetShardingRule(new Base_UnitTestShardingRule());});
上述代码中完成了Sharding配置
AddAbsDb是指添加抽象数据库,抽象数据库就是将多个分库看成同一个数据库来进行操作
AddPhysicDbGroup是指添加物理数据库组,在同一组物理数据库中,它们数据库类型相同,拥有的表相同,每个数据库拥有的数据是一致的(之间通过主主复制或主从复制进行数据同步)
AddPhysicTable是指添加物理数据表,传入的Base_UnitTest是抽象数据表(即将Base_UnitTest拆分为Base_UnitTest_0~2)
Base_UnitTestShardingRule是采用的分表规则,上述代码中采用的是哈希取模的分表方式
开始使用
配置完成,下面开始使用,使用方式非常简单,与平常使用基本一致。 首先获取分片仓储接口 IShardingRepository:IShardingRepository _db = DbFactory.GetRepository().ToSharding();
然后即可进行数据操作:
B