(1)可擴充架構設計,比如一個erp用5年不卡,到了10就卡了因為資料太多了,這個時候很多人都是備份然後清空資料,這個工作大并且麻煩,以前的資料很難在使用
(2) 資料量太多 ,例如每天都有 幾十上百萬的資料進入庫,如果不分表後面查詢将會非常緩慢
(3) 性能瓶頸 ,資料庫現有資料超過1個億,很多情況下索引會莫名失效,性能大大下降,如果使用分表,我們隻需要針對一個分表進行操作性能大大提升
說到orm很多會想到ef core dapper sqlsugar chloe freesql等,但是說到分表元件或許者大家想不到一個名詞
我寫這一篇文章最大的目的是想大家記住 全自動的分表元件 【 sqlsugar 】
沒錯sqlsugar是一個orm架構,并且已經完美支援了自動分表 ,希望你能喜歡
curd和分表一體化 ,小白也能很好的使用分表,隻要會使用 orm 就會使用分表 ,2者文法同步 就多 一個 .splittable
支援 表結構同步,自動建表,強大的查詢語句,插入,更新,删除
預設內建了按 日、周、月、季、年的方式表, 比如,我想根據加密算法分表,或者根據多個字段分表,或者不滿意現在的分表 都可以已擴充實作
自帶分表支援按年、按月、按日、按季、按周進行分表
我們定義一個實體,主鍵不能用自增或者int ,設為long或者guid都可以,我例子就用自帶的雪花id實作分表
(1)如果一張表沒有 查詢肯定會報錯,是以程式啟動時需要建一張表
(2)假如分了20張表,實體類發生變更,那麼 20張表可以自動同步結構,與實體一緻
(1)按時間自動過濾
通過開始時間和結束時間自動生成createtime的過濾并且找到對應時間的表
(2)精準篩選
根據分表字段的值可以精準的定位到具體是哪一個分表
比take(n)性能要高出很多
(3)表達式過濾
(4) 聯表查詢
(5) 分頁查詢
因為我們用的是long是以采用雪id插入(guid也可以禁止使用自增列), 實體結構看上面 3.1
因為我們是根據createtime進行的分表,生成的sql語句如下:
批量插入
執行完生成的表
生成的sql:
自動識别4條記錄,分别插入4個不同的表中
(1)懶人模式删除
最近3張表都執行一遍删除
生在的sql如下:
(2)精準删除
相對于上面的操作性能更高,可以精準找到具體表
生成的sql如下:
更新的用法基本上和删除一樣
上面的分表功能是我們自帶內建的,比如我想實作自定義的分表我該如何實作呢?
我們就寫個按24個字母進行分表的小例子,來學習一下如何自定義分表
我們建立一個類繼承成isplittableservice 接口
代碼:
執行完資料庫就多了3張表,因為是按首字母分的表 ,插入了3條記錄自動建立了3張表
插入生成的sql:
查詢指定表
生成的sql:
需要 nuget安裝 sqlsugarcore 5.0.4.3-proview-03
以前有些人說sqlsugar聯表不優美,是以我也支了最優美聯表文法:
簡單的聯表
sql如下:
表 和 queryable 進行聯表
queryable 和表 進行聯表
sqlsugar 一直在創新,并且越來越好,相信分表功能,新的文法一定會讓很多人喜歡
https://github.com/donet5/sqlsugar 沒點關注的點一波關注 ,你們的贊或者一個star就是我們這些開源些的動力