MyBatis Plus 在 ZKmall開源商城持久層的優化實踐

ZKmall開源商城作為基于 Spring Cloud 的高性能電商平臺,其持久層通過 MyBatis Plus 實現了多項深度優化,涵蓋分庫分表、緩存策略、分頁性能、多租戶隔離等核心場景。以下是具體實踐總結:

一、分庫分表與插件集成優化

1. 分庫分表策略

  • ?ShardingSphere 集成:通過?DynamicTableNameInnerInterceptor?動態路由表名,實現訂單表按月分表(如?t_order_202304),結合?ShardingSphere?配置數據源分片規則。
  • ?分片算法優化:基于用戶 ID 的哈希取模分庫(如?ds${user_id % 2}),訂單 ID 哈希分表,避免數據傾斜。

yaml

# ShardingSphere 分片規則(application-sharding.yml)
spring.shardingsphere.rules.sharding.tables.t_order:actualDataNodes: ds${0..1}.t_order_${0..1}databaseStrategy: inline(shardingColumn=user_id, algorithm-expression=ds${user_id % 2})tableStrategy: inline(shardingColumn=order_id, algorithm-expression=t_order_${order_id % 2})

2. 插件鏈式加載

  • ?插件優先級管理:按順序加載多租戶插件→分頁插件→數據權限插件,確保 SQL 改寫邏輯正確性。
  • ?多租戶隔離:通過?TenantLineInnerInterceptor?自動注入租戶 ID(tenant_id),實現數據物理隔離。
二、分頁性能深度優化

1. 分頁插件調優

  • ?物理分頁替代邏輯分頁:采用 MyBatis Plus 的?PaginationInnerInterceptor,自動生成數據庫方言分頁 SQL(如 MySQL 的?LIMIT),避免內存分頁壓力。
  • ?深度分頁優化:針對百萬級訂單數據,使用基于主鍵 ID 的游標分頁(WHERE id > #{lastId} LIMIT #{size}),替代?OFFSET?分頁,降低全表掃描開銷。

2. 分段查詢與索引優化

  • ?熱點數據分段:將高頻訪問的訂單數據拆分為多個虛擬段(如?order_segment_1~order_segment_10),通過哈希路由分散鎖競爭,實測 QPS 提升 8 倍。
  • ?聯合索引覆蓋:為分頁查詢字段(如?user_id + create_time)建立聯合索引,減少回表查詢。
三、緩存與二級存儲策略

1. 二級緩存配置

  • ?Redis 集成:在 Mapper XML 中配置?<cache type="org.mybatis.caches.redis.RedisCache">,結合 LRU 淘汰策略與 10 分鐘刷新間隔,降低數據庫負載。
  • ?熱點數據預加載:通過?@CacheRefresh?注解異步刷新高頻訪問數據(如商品詳情),結合 TTL 策略保障數據一致性。

2. 批量操作優化

  • ?JDBC 批量插入:使用 MyBatis Plus 的?saveBatch?方法,結合?rewriteBatchedStatements=true?參數,提升批量插入效率(實測 10 萬條數據插入耗時減少 65%)。
四、代碼生成與自動化工具

1. 代碼生成器應用

  • ?模塊化代碼生成:基于 MyBatis Plus 的代碼生成器,自動生成 Entity、Mapper、Service 層代碼,支持自定義模板(如 DTO、VO 轉換邏輯),開發效率提升 40%。
  • ?Lombok 集成:通過?@Data?與?@Builder?注解簡化實體類,減少冗余代碼。

2. 動態 SQL 與條件構造器

  • ?LambdaQueryWrapper:使用鏈式條件構造器動態拼接查詢條件(如?eq(User::getName, "Tom").ge(User::getAge, 18)),避免 SQL 注入風險。
  • ?注解式動態 SQL:通過?@SelectProvider?實現復雜查詢邏輯的動態生成(如多維度訂單統計)。
五、高并發場景實踐

1. 分布式鎖與事務

  • ?Redis 鎖集成:在庫存扣減場景中,結合 Redisson 的?RLock?實現分布式鎖,防止超賣。
  • ?Seata 分布式事務:通過?@GlobalTransactional?注解保障跨服務事務一致性(如創建訂單→扣減庫存→生成支付單)。

2. 慢 SQL 監控與治理

  • ?P6Spy 日志分析:集成 SQL 監控插件,記錄執行耗時與參數詳情,定位慢查詢(如超過 500ms 的訂單統計 SQL)。
  • ?Prometheus 可視化:通過?actuator?端點暴露指標,結合 Grafana 監控緩存命中率與鎖競爭情況。

演進方向

ZKmall開源商城 通過 MyBatis Plus 的插件擴展、緩存分層、分頁算法優化等策略,在萬級 QPS 場景下實現了毫秒級響應。未來計劃:

  1. ?AOT 預編譯支持:ZKmall開源商城結合 Spring Boot 3 的 AOT 模式,預生成 MyBatis Mapper 代理類,減少運行時反射開銷

  2. ?向量化查詢:針對商品搜索場景,探索基于 ClickHouse 的向量化分頁插件,提升億級數據檢索效率。

ZKmall開源商城官網:https://ceres.zkthink.com/zkmall-pc/
ZKmall源碼地址:https://gitee.com/zkmall/b2c

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/77091.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/77091.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/77091.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

學習MySQL第七天

夕陽無限好 只是近黃昏 一、子查詢 1.1 定義 將一個查詢語句嵌套到另一個查詢語句內部的查詢 我們通過具體示例來進行演示&#xff0c;這一篇博客更側重于通過具體的小問題來引導大家獨立思考&#xff0c;然后熟悉子查詢相關的知識點 1.2 問題1 誰的工資比Tom高 方…

Nginx 常見面試題

一、nginx常見錯誤及處理方法 1.1 404 bad request 一般原因&#xff1a;請求的Header過大 解決辦法&#xff1a; 配置nginx.conf 相關設置1. client_header_buffer_size 16k; 2. large_client_header_buffers 4 64k;1.2 413 Request Entity Too Large 一般原因&#xff1…

LeetCode 每日一題 2025/3/31-2025/4/6

記錄了初步解題思路 以及本地實現代碼&#xff1b;并不一定為最優 也希望大家能一起探討 一起進步 目錄 3/31 2278. 字母在字符串中的百分比4/1 2140. 解決智力問題4/2 2873. 有序三元組中的最大值 I4/3 2874. 有序三元組中的最大值 II4/4 1123. 最深葉節點的最近公共祖先4/5 1…

Docker Compose 常用命令 運行 docker-compose.yaml

Docker Compose 中有兩個重要的概念 服務 (service)&#xff1a;一個應用的容器&#xff0c;實際上可以包括若干運行相同鏡像的容器實例。 項目 (project)&#xff1a;由一組關聯的應用容器組成的一個完整業務單元&#xff0c;在 docker-compose.yml 文件中定義。 為了更方便…

深度學習中的 Batch 機制:從理論到實踐的全方位解析

一、Batch 的起源與核心概念 1.1 批量的中文譯名解析 Batch 在深度學習領域標準翻譯為"批量"或"批次"&#xff0c;指代一次性輸入神經網絡進行處理的樣本集合。這一概念源自統計學中的批量處理思想&#xff0c;在計算機視覺先驅者Yann LeCun于1989年提出…

Unity Internal-ScreenSpaceShadows 分析

一、代碼結構 // Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)Shader "Hidden/Internal-ScreenSpaceShadows" {Properties {_ShadowMapTexture ("", any) "" {} // 陰影貼圖紋理&…

Token+JWT+Redis 實現鑒權機制

TokenJWTRedis 實現鑒權機制 使用 Token、JWT 和 Redis 來實現鑒權機制是一種常見的做法&#xff0c;尤其適用于分布式應用或微服務架構。下面是一個大致的實現思路&#xff1a; 1. Token 和 JWT 概述 Token&#xff1a;通常是一個唯一的字符串&#xff0c;可以用來標識用戶…

RPC與其他通信技術的區別,以及RPC的底層原理

1、什么是 RPC&#xff1f; 遠程過程調用&#xff08;RPC&#xff09; 是一種協議&#xff0c;它允許程序在不同計算機之間進行通信&#xff0c;讓開發者可以像調用本地函數一樣發起遠程請求。 通過 RPC&#xff0c;開發者無需關注底層網絡細節&#xff0c;能夠更專注于業務邏…

簡潔的 PlantUML 入門教程

評論中太多朋友在問&#xff0c;我的文章中圖例如何完成的。 我一直用plantUML,也推薦大家用&#xff0c;下面給出一個簡潔的PlantUML教程。 &#x1f331; 什么是 PlantUML&#xff1f; PlantUML 是一個用純文本語言畫圖的工具&#xff0c;支持流程圖、時序圖、用例圖、類圖、…

互聯網三高-高性能之JVM調優

1 運行時數據區 JVM運行時數據區是Java虛擬機管理的內存核心模塊&#xff0c;主要分為線程共享和線程私有兩部分。 &#xff08;1&#xff09;線程私有 ① 程序計數器&#xff1a;存儲當前線程執行字節碼指令的地址&#xff0c;用于分支、循環、異常處理等流程控制? ② 虛擬機…

淺談StarRocks 常見問題解析

StarRocks數據庫作為高性能分布式分析數據庫&#xff0c;其常見問題及解決方案涵蓋環境部署、數據操作、系統穩定性、安全管控及生態集成五大核心領域&#xff0c;需確保Linux系統環境、依賴庫及環境變量配置嚴格符合官方要求以避免節點啟動失敗&#xff0c;數據導入需遵循格式…

P1332 血色先鋒隊(BFS)

題目背景 巫妖王的天災軍團終于卷土重來&#xff0c;血色十字軍組織了一支先鋒軍前往諾森德大陸對抗天災軍團&#xff0c;以及一切沾有亡靈氣息的生物。孤立于聯盟和部落的血色先鋒軍很快就遭到了天災軍團的重重包圍&#xff0c;現在他們將主力只好聚集了起來&#xff0c;以抵…

大文件上傳之斷點續傳實現方案與原理詳解

一、實現原理 文件分塊&#xff1a;將大文件切割為固定大小的塊&#xff08;如5MB&#xff09; 進度記錄&#xff1a;持久化存儲已上傳分塊信息 續傳能力&#xff1a;上傳中斷后根據記錄繼續上傳未完成塊 塊校驗機制&#xff1a;通過哈希值驗證塊完整性 合并策略&#xff1a;所…

【動手學深度學習】卷積神經網絡(CNN)入門

【動手學深度學習】卷積神經網絡&#xff08;CNN&#xff09;入門 1&#xff0c;卷積神經網絡簡介2&#xff0c;卷積層2.1&#xff0c;互相關運算原理2.2&#xff0c;互相關運算實現2.3&#xff0c;實現卷積層 3&#xff0c;卷積層的簡單應用&#xff1a;邊緣檢測3.1&#xff0…

Opencv計算機視覺編程攻略-第十一節 三維重建

此處重點討論在特定條件下&#xff0c;重建場景的三維結構和相機的三維姿態的一些應用實現。下面是完整投影公式最通用的表示方式。 在上述公式中&#xff0c;可以了解到&#xff0c;真實物體轉為平面之后&#xff0c;s系數丟失了&#xff0c;因而無法會的三維坐標&#xff0c;…

大廠不再招測試?軟件測試左移開發合理嗎?

&#x1f449;目錄 1 軟件測試發展史 2 測試左移&#xff08;Testing shift left&#xff09; 3 測試右移&#xff08;Testing shift right&#xff09; 4 自動化測試 VS 測試自動化 5 來自 EX 測試的寄語 最近兩年&#xff0c;互聯網大廠的招聘中&#xff0c;測試工程師崗位似…

windows10下PointNet官方代碼Pytorch實現

PointNet模型運行 1.下載源碼并安裝環境 GitCode - 全球開發者的開源社區,開源代碼托管平臺GitCode是面向全球開發者的開源社區,包括原創博客,開源代碼托管,代碼協作,項目管理等。與開發者社區互動,提升您的研發效率和質量。https://gitcode.com/gh_mirrors/po/pointnet.pyto…

git pull 和 git fetch

關于 git pull 和 git fetch 的區別 1. git fetch 作用&#xff1a;從遠程倉庫獲取最新的分支信息和提交記錄&#xff0c;但不會自動合并或修改當前工作目錄中的內容。特點&#xff1a; 它只是更新本地的遠程分支引用&#xff08;例如 remotes/origin/suyuhan&#xff09;&am…

前端開發中的單引號(‘ ‘)、雙引號( )和反引號( `)使用

前端開發中的單引號&#xff08;’ &#xff09;、雙引號&#xff08;" "&#xff09;和反引號&#xff08; &#xff09;使用 在前端開發中&#xff0c;單引號&#xff08;’ &#xff09;、雙引號&#xff08;" "&#xff09;和反引號&#xff08; &…

程序化廣告行業(69/89):DMP與PCP系統核心功能剖析

程序化廣告行業&#xff08;69/89&#xff09;&#xff1a;DMP與PCP系統核心功能剖析 在數字化營銷浪潮中&#xff0c;程序化廣告已成為企業精準觸達目標受眾的關鍵手段。作為行業探索者&#xff0c;我深知其中知識的繁雜與重要性。一直以來&#xff0c;都希望能和大家一同學習…