<code>ShardingCore</code> 易用、簡單、高性能、普适性,是一款擴充針對efcore生态下的分表分庫的擴充解決方案,支援efcore2+的所有版本,支援efcore2+的所有資料庫、支援自定義路由、動态路由、高性能分頁、讀寫分離的一款元件,如果你喜歡這元件或者這個元件對你有幫助請點選下發star讓更多的.neter可以看到使用
Github Star 助力dotnet 生态 Gitee Star
随着.net6的釋出,陸陸續續的架構都已經開始支援了,ShardingCore也不例外,為了推動.net生态,也為了讓更多的的人了解.net下其實也有分表分庫的解決方案,是以打算寫一篇關于<code>ShardingCore</code>內建到其他架構的思路。
<code>Fourin</code>架構大家應該也是比較清楚的,作者也是一個樂于開源有着開源精神的人,秉着大家都是熱愛開源的是以決定助<code>Fourin</code>一臂之力(蹭一下熱度)。随着上次的AbpVNext的"完美"內建<code>ShardingCore</code>後,這次帶來的就是<code>Furion</code>下的<code>ShardingCore</code>內建。
<code>efcore</code>下完美的分表分庫解決方案,支援任意efcore的內建架構,完美支援或者需要稍作修改即可完美支援,并不需要讓你有任何使用的學習成本,幾乎做到不修改現有<code>efcore</code>代碼的前提下讓你的程式完美支援分表分庫。真正做到“零”代碼修改。
首先我們已目前<code>Furion</code>最新版本為例<code>v3.0.5</code>,建立一個空的aspnetcore web api的net6項目,當然也支援efcore2+的所有aspnetcore版本。
然後我們添加<code>ShardingCore</code>和<code>efcore.SqlServer</code>包

這邊看了<code>Furion</code>的使用方法和Abp一樣需要繼承一個他自己的DbContext叫做<code>AppDbContext</code>,但是沒有關西。因為<code>ShardingCore</code>是基于接口來實作的,是以不存在多繼承問題,隻是我們需要自行實作<code>Furion</code>的ShardingDbContext的抽象版本源碼位址 AppShardingDbContext
簡單的說下就是如果你是需要繼承某個dbcontext的那麼就需要自己實作三個接口<code>IShardingDbContext</code>, <code>ISupportShardingTransaction</code>, <code>ISupportShardingReadWrite</code>分别是分表分庫的核心接口,支援事務,支援讀寫分離。
具體已經幫你們抽象好了隻需要複制代碼就可以了。
做好了準備工作我們開始建立dbcontext
這邊我們将<code>TodoItem</code>的<code>Id</code>做成取模分表
配置了todoitem的簡單配置,注意這邊不一定要這麼配置,也可以用Attribute+DbSet,也可以用FluentApi
這邊采用的是簡單取模通過構造函數傳入,具體可以參考文檔就是分表字尾為2位數,模8也就是00,01.....07,一共8張表,<code>ShardingProperty(x => x.Id)</code>表示TodoItem的分表字段為Id。
注意: 這邊隻是為了簡單示範,你如果需要外部傳入可以自行通過實作<code>AbstractShardingOperatorVirtualTableRoute</code>來實作,并且路由構造函數支援單例的依賴注入
通過官網我們可以知道如何針對<code>Furion</code>進行efcore的配置,這邊目前sharding-core不支援efcore的單例dbcontext,是以不建議使用單例。
額外配置:<code>.UseSharding<DefaultDbContext>()</code>僅需要配置dbcontext使用sharding原先的所有dbcontext的注入都可以不去管他
sharding-core的配置:<code>AddShardingConfigure</code>是<code>sharding-core</code>在efcore的基礎上額外進行配置就可以支援分表分庫的擴充更多配置可以參考文檔
注意:很多同學老是忘記啟動導緻<code>sharding-core</code>沒法使用<code>app.Services.GetRequiredService<IShardingBootstrapper>().Start();</code>
首先我們通過注入構造函數<code>IRepository<TodoItem> todoItemRepository</code>這是<code>Furion</code>提供的
其次我們編寫增删改查接口
因為預設為了測試<code>ShardingCore</code>配置了
是以啟動會幫我們建表并且建庫
符合預期插入到了具體的hash%8的表
因為是擷取所有是以這邊會查詢所有的分表符合預期
擷取單條符合預期用的id取模是以用id去查詢會到指定的表裡面
符合預期代碼先查詢05表在更新05表并且使用的是追蹤更新
我們接着再來查詢一次看看是否真的修改了
到此為止我們的<code>Furion</code>的<code>ShardingCore</code>內建就完成了,當然這隻是<code>ShardingCore</code>的冰山一角,最最最簡單的分表,如果你喜歡或者你認為<code>ShardingCore</code>有用那麼可以給個贊或者star嗎?開原作者希望自己開源的項目被更多人高人指點并且進步。也希望為.net下的分表分庫進行一份微薄之力。在efcore下我相信<code>ShardingCore</code>是在官方不支援<code>efcore</code>下最最最完美的解決方案。全程的使用代碼體驗是0感覺,并且支援所有使用efcore的架構,隻要你配置好了完全不需要考慮,當然也有同學要杠,如果某些情況下我就是要指定某幾張表呢,<code>ShardingCore</code>也是支援的是以在自動情況下是“零”入侵業務代碼的最優分表分庫方案,更多使用方式請查詢
github <code>ShardingCore文檔</code>
gitee <code>ShardingCore文檔</code>
FurionShardingDemo
dotnet 天下第一 (大吼)
Github ShardingCore
Gitee ShardingCore
部落格
QQ群:771630778
個人QQ:326308290(歡迎技術支援提供您寶貴的意見)
個人郵箱:[email protected]