【6.1.1 漫畫分庫分表】

漫畫分庫分表

“數據量大了不可怕,可怕的是不知道如何優雅地拆分。”

🎭 人物介紹

  • 架構師老王:資深數據庫架構專家,精通各種分庫分表方案
  • Java小明:對分庫分表充滿疑問的開發者
  • ShardingSphere師傅:Apache ShardingSphere的化身,國產分庫分表框架代表
  • Mycat大師:Mycat框架的化身,數據庫中間件專家
  • Vitess長老:Google Vitess的化身,云原生數據庫集群方案
  • 數據庫老爺:傳統數據庫的代表,見證了數據增長的痛苦

本節導言

Java小明:(困惑地)老王,我們的用戶表已經有幾千萬條數據了,查詢越來越慢,該怎么辦?

架構師老王:(點頭)這是典型的數據量增長問題!單表數據量過大時,我們需要考慮分庫分表了。

數據庫老爺:(嘆氣)想當年我一個人就能處理所有數據,現在…

ShardingSphere師傅:(自信地)別擔心!我們有完整的分庫分表解決方案,從水平拆分到垂直拆分,一應俱全!

Mycat大師:(穩重地)我擅長數據庫代理,讓應用無感知地使用分庫分表。

Vitess長老:(淡定地)在Google,我們處理的是全球級別的數據量,云原生是未來趨勢。

1. 分庫分表基礎概念

1.1 什么是分庫分表

架構師老王:分庫分表是應對大數據量和高并發的數據庫優化策略,通過將數據分散到多個數據庫和表中來提升性能。

分庫分表后
單庫單表
數據庫1
數據庫2
數據庫3
數據庫4
user_0
1250萬
user_1
1250萬
user_2
1250萬
user_3
1250萬
user_4
1250萬
user_5
1250萬
user_6
1250萬
user_7
1250萬
用戶表
5000萬條記錄

1.2 分庫分表的類型

垂直拆分 vs 水平拆分
拆分方式垂直拆分水平拆分
分庫按業務模塊拆分按數據特征拆分
分表按字段拆分按數據量拆分
適用場景微服務架構單表數據量過大
復雜度相對簡單相對復雜

2. 主流分庫分表框架對比

2.1 Apache ShardingSphere

ShardingSphere師傅:我是Apache頂級項目,提供完整的分庫分表生態!

核心特性
/*** ShardingSphere配置示例*/
@Configuration
public class ShardingSphereConfig {// 數據源配置@Beanpublic DataSource dataSource() {Map<String, DataSource> dataSourceMap = new HashMap<>();dataSourceMap.put("ds0", createDataSource("jdbc:mysql://localhost:3306/db0"));dataSourceMap.put("ds1", createDataSource("jdbc:mysql://localhost:3306/db1"));// 分片規則ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();shardingRuleConfig.getTableRuleConfigs().add(getUserTableRuleConfiguration());shardingRuleConfig.getBindingTableGroups().add("user");shardingRuleConfig.setDefaultDatabaseShardingStrategyConfig(new InlineShardingStrategyConfiguration("user_id", "ds${user_id % 2}"));return ShardingSphereDataSourceFactory.createDataSource(dataSourceMap, Collections.singleton(shardingRuleConfig), new Properties());}private TableRuleConfiguration getUserTableRuleConfiguration() {TableRuleConfiguration config = new TableRuleConfiguration("user", "ds${0..1}.user_${0..3}");config.setTableShardingStrategyConfig(new InlineShardingStrategyConfiguration("user_id", "user_${user_id % 4}"));return config;}
}
優勢與劣勢
優勢 ?劣勢 ?
生態完善,文檔豐富學習曲線較陡峭
支持多種數據庫配置相對復雜
讀寫分離、分布式事務性能開銷相對較大
社區活躍,國產化依賴較多

2.2 Mycat

Mycat大師:我是數據庫中間件的先驅,專注于透明化的數據庫代理!

核心架構
<!-- Mycat server.xml配置 -->
<mycat:server xmlns:mycat="http://io.mycat/"><system><property name="serverPort">8066</property><property name="managerPort">9066</property><property name="charset">utf8</property><property name="processors">4</property><property name="processorExecutor">8</property></system><user name="mycat"><property name="password">mycat</property><property name="schemas">testdb</property></user>
</mycat:server>
<!-- schema.xml配置 -->
<schema name="testdb" checkSQLschema="false" sqlMaxLimit="100"><table name="user" primaryKey="id" dataNode="dn1,dn2,dn3,dn4" rule="mod-long" />
</schema><dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost1" database="db2" />
<dataNode name="dn3" dataHost="localhost2" database="db3" />
<dataNode name="dn4" dataHost="localhost2" database="db4" />
優勢與劣勢
優勢 ?劣勢 ?
部署簡單,上手快功能相對單一
性能優秀社區活躍度下降
對應用透明復雜查詢支持有限
成熟穩定缺乏現代化特性

2.3 Vitess (Google)

Vitess長老:我來自Google,專為云原生和大規模數據處理而生!

核心特性
# Vitess Kubernetes配置
apiVersion: planetscale.com/v2
kind: VitessCluster
metadata:name: example
spec:images:vtgate: vitess/lite:latestvttablet: vitess/lite:latestcells:- name: zone1gateway:replicas: 2keyspaces:- name: commerceturndownPolicy: Immediatepartitionings:- equal:parts: 4shardTemplate:databaseInitScriptSecret:name: example-cluster-configkey: init_db.sql
優勢與劣勢
優勢 ?劣勢 ?
云原生架構學習成本高
超大規模數據支持生態相對較小
自動化運維主要面向MySQL
Google技術背景國內使用較少

3. 國內外優秀框架全覽

3.1 國內主流框架

3.1.1 ShardingSphere (Apache)
  • 開發公司:當當網 → Apache基金會
  • GitHub Stars:19.6k+
  • 特點:功能最全面的分庫分表解決方案
3.1.2 Mycat
  • 開發公司:Mycat開源社區
  • GitHub Stars:9.5k+
  • 特點:數據庫中間件,性能優秀
3.1.3 TDDL (Taobao Distributed Data Layer)
  • 開發公司:阿里巴巴
  • GitHub Stars:5.5k+
  • 特點:淘寶自研,久經考驗
3.1.4 Cobar
  • 開發公司:阿里巴巴
  • GitHub Stars:2.2k+
  • 特點:早期分庫分表方案,Mycat前身
3.1.5 Atlas
  • 開發公司:奇虎360
  • GitHub Stars:4.1k+
  • 特點:基于MySQL-Proxy,讀寫分離

3.2 國外優秀框架

3.2.1 Vitess (Google)
  • 開發公司:Google
  • GitHub Stars:17.8k+
  • 特點:YouTube使用,云原生架構
3.2.2 Citus (Microsoft)
  • 開發公司:Microsoft
  • GitHub Stars:9.8k+
  • 特點:PostgreSQL分布式擴展
3.2.3 ProxySQL
  • 開發公司:ProxySQL LLC
  • GitHub Stars:5.9k+
  • 特點:高性能MySQL代理
3.2.4 MaxScale (MariaDB)
  • 開發公司:MariaDB Corporation
  • GitHub Stars:1.3k+
  • 特點:數據庫代理和負載均衡
3.2.5 Gizzard (Twitter)
  • 開發公司:Twitter
  • GitHub Stars:2.3k+
  • 特點:分片框架,已停止維護

3.3 詳細功能對比矩陣

國外框架對比
國內框架對比
Vitess
🇺🇸 Google
Citus
🇺🇸 Microsoft
ProxySQL
🇮🇹 ProxySQL LLC
MaxScale
🇫🇮 MariaDB
? 分庫分表
? 讀寫分離
? 在線DDL
? 自動故障轉移
? 備份恢復
? 云原生
? 分庫分表
? 讀寫分離
? 分布式查詢
? 實時分析
? 列式存儲
? PostgreSQL
? 分庫分表
? 讀寫分離
? 連接池
? 查詢路由
? 故障轉移
? 高性能
? 分庫分表
? 讀寫分離
? 負載均衡
? 故障轉移
? 監控
? MariaDB
ShardingSphere
🇨🇳 當當網→Apache
Mycat
🇨🇳 開源社區
TDDL
🇨🇳 阿里巴巴
Cobar
🇨🇳 阿里巴巴
Atlas
🇨🇳 奇虎360
? 分庫分表
? 讀寫分離
? 分布式事務
? 數據脫敏
? 影子表
? 彈性伸縮
? 分庫分表
? 讀寫分離
? 分布式事務
? 數據脫敏
? 影子表
? 負載均衡
? 分庫分表
? 讀寫分離
? 分布式事務
? 數據脫敏
? 影子表
? 動態數據源
? 分庫分表
? 讀寫分離
? 分布式事務
? 數據脫敏
? 影子表
? 連接池
? 分庫分表
? 讀寫分離
? 分布式事務
? 數據脫敏
? 影子表
? 負載均衡

3.4 綜合性能對比

框架QPS延遲資源消耗適用規模主要數據庫
ShardingSphere中等中等中大型MySQL/PostgreSQL/Oracle
Mycat極低中型MySQL
Vitess極高超大型MySQL
TDDL中等中等中大型MySQL
Cobar極低中型MySQL
Citus中等大型PostgreSQL
ProxySQL極高極低中大型MySQL
Atlas極低中型MySQL

3.5 生態系統與維護狀態

框架社區活躍度文檔質量企業支持學習成本維護狀態
ShardingSphere🟢 極高🟢 優秀🟢 強🟡 中等🟢 活躍
Mycat🟡 中等🟡 一般🟡 中等🟢 低🟡 緩慢
Vitess🟢 高🟢 優秀🟢 強🔴 高🟢 活躍
TDDL🟡 中等🟡 一般🟢 強🟡 中等🟡 內部
Cobar🔴 低🔴 較差🔴 弱🟢 低🔴 停止
Citus🟢 高🟢 優秀🟢 強🟡 中等🟢 活躍
ProxySQL🟢 高🟢 優秀🟢 強🟡 中等🟢 活躍
Atlas🟡 中等🟡 一般🟡 中等🟢 低🟡 緩慢

3.6 企業應用案例

國內知名企業使用情況
框架知名用戶應用場景
ShardingSphere京東、滴滴、嗶哩嗶哩、轉轉電商、出行、視頻、二手交易
Mycat阿里云、騰訊云、華為云云數據庫服務
TDDL淘寶、天貓、支付寶電商、支付
VitessYouTube、Slack、GitHub視頻、協作、代碼托管
CitusMicrosoft、Heap、MixRank云服務、分析、營銷
行業應用分布
35%25%15%12%8%5%分庫分表框架行業應用分布電商零售金融支付社交媒體企業服務游戲娛樂其他

4. 技術選型指南

4.1 選型決策樹

千萬級
億級
十億級+
較強
一般
選擇分庫分表方案
數據量級別?
ShardingSphere
功能全面,易上手
團隊技術水平?
Vitess
超大規模專用
ShardingSphere
或 自研方案
Mycat
簡單穩定
適合:
? 中小型互聯網公司
? 快速迭代項目
? 需要完整生態
適合:
? 傳統企業
? 穩定性優先
? 簡單分片需求
適合:
? 大型互聯網公司
? 復雜業務場景
? 有技術團隊
適合:
? 超大規模應用
? 云原生架構
? 全球化部署

4.2 具體場景推薦

🏢 企業級應用
/*** 企業級分庫分表選型*/
public class EnterpriseScenario {// 傳統企業 - 穩定優先public void traditionalEnterprise() {/** 推薦:Mycat* * 理由:* ? 部署運維簡單* ? 性能穩定可靠* ? 對現有系統改動小* ? 技術門檻低*/}// 互聯網公司 - 功能優先public void internetCompany() {/** 推薦:ShardingSphere* * 理由:* ? 功能豐富完善* ? 生態系統成熟* ? 社區支持好* ? 持續更新迭代*/}// 大型互聯網 - 性能優先public void largeScaleInternet() {/** 推薦:Vitess 或 自研* * 理由:* ? 超大規模數據支持* ? 云原生架構* ? 自動化運維* ? 可定制性強*/}
}

5. 實戰案例對比

5.1 電商系統分庫分表

/*** 電商系統分庫分表實戰*/
public class ECommerceSharding {// 用戶表分片策略public void userTableSharding() {/** 分片鍵:user_id* 分片算法:hash取模* 分庫:4個庫* 分表:每庫4張表* * 路由規則:* 庫:user_id % 4* 表:user_id % 16 / 4*/}// 訂單表分片策略public void orderTableSharding() {/** 分片鍵:user_id (保證用戶訂單在同一庫)* 分片算法:hash取模* 時間維度:按月分表* * 路由規則:* 庫:user_id % 4* 表:order_202401, order_202402...*/}
}

5.2 金融系統分庫分表

/*** 金融系統分庫分表實戰*/
public class FinancialSharding {// 賬戶表分片策略public void accountTableSharding() {/** 分片鍵:account_id* 分片算法:range分片* 分庫:按賬戶號段* * 路由規則:* 1-100萬:db1* 100-200萬:db2* 200-300萬:db3*/}// 交易流水表分片策略public void transactionTableSharding() {/** 分片鍵:account_id + 時間* 分片算法:復合分片* * 路由規則:* 先按account_id確定庫* 再按時間確定表*/}
}

6. 數據同步與讀寫分離方案

6.1 數據同步框架對比

6.1.1 Canal (阿里巴巴)
/*** Canal數據同步示例*/
public class CanalDataSync {public void startCanalClient() {// 創建鏈接CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress("127.0.0.1", 11111), "example", "", "");try {connector.connect();connector.subscribe(".*\\..*");connector.rollback();while (true) {Message message = connector.getWithoutAck(1000);long batchId = message.getId();if (batchId != -1 && !message.getEntries().isEmpty()) {processEntries(message.getEntries());}connector.ack(batchId);}} finally {connector.disconnect();}}
}
6.1.2 Maxwell (Zendesk)
{"database": "test","table": "users","type": "insert","ts": 1449786310,"xid": 23396,"data": {"id": 1,"name": "張三","email": "zhangsan@example.com"}
}
6.1.3 Debezium (Red Hat)
# Debezium MySQL連接器配置
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
metadata:name: debezium-connect
spec:replicas: 1bootstrapServers: kafka-cluster:9092config:group.id: debezium-clusteroffset.storage.topic: debezium-cluster-offsetsconfig.storage.topic: debezium-cluster-configsstatus.storage.topic: debezium-cluster-status
數據同步框架對比
框架開發公司特點適用場景優勢劣勢
Canal阿里巴巴基于MySQL binlog實時同步性能高、穩定僅支持MySQL
MaxwellZendeskJSON格式輸出數據分析簡單易用功能相對簡單
DebeziumRed Hat基于Kafka Connect微服務架構生態豐富復雜度較高
DataX阿里巴巴離線批量同步數據遷移支持多數據源非實時
SqoopApacheHadoop生態大數據場景與Hadoop集成好學習成本高

6.2 讀寫分離實現方案

6.2.1 應用層讀寫分離
/*** 應用層讀寫分離實現*/
@Service
public class UserService {@Autowired@Qualifier("masterDataSource")private DataSource masterDataSource;@Autowired@Qualifier("slaveDataSource") private DataSource slaveDataSource;// 寫操作使用主庫@Transactionalpublic void createUser(User user) {// 自動路由到主庫userMapper.insert(user);}// 讀操作使用從庫@Transactional(readOnly = true)public User getUserById(Long id) {// 自動路由到從庫return userMapper.selectById(id);}
}
6.2.2 中間件讀寫分離
# ShardingSphere讀寫分離配置
spring:shardingsphere:datasource:names: master,slave0,slave1master:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://localhost:3306/master_dbslave0:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://localhost:3307/slave_db0rules:readwrite-splitting:data-sources:readwrite_ds:write-data-source-name: masterread-data-source-names: slave0,slave1load-balancer-name: round_robinload-balancers:round_robin:type: ROUND_ROBIN
讀寫分離方案對比
實現方式優勢劣勢適用場景
應用層控制精確、性能好代碼侵入性強簡單業務
中間件透明化、功能豐富增加復雜度復雜業務
數據庫代理完全透明單點故障風險遺留系統

7. 最佳實踐與避坑指南

7.1 分片鍵選擇原則

/*** 分片鍵選擇最佳實踐*/
public class ShardingKeyBestPractices {// ? 好的分片鍵特征public void goodShardingKey() {/** 1. 數據分布均勻* 2. 查詢覆蓋率高* 3. 業務相關性強* 4. 更新頻率低* 5. 數據類型簡單*/}// ? 避免的分片鍵public void badShardingKey() {/** 1. 時間字段(數據傾斜)* 2. 狀態字段(分布不均)* 3. 自增ID(熱點問題)* 4. 業務無關字段* 5. 復雜計算字段*/}
}

7.2 常見問題與解決方案

跨庫查詢問題
/*** 跨庫查詢解決方案*/
public class CrossShardQuery {// 方案1:應用層聚合public List<Order> queryOrdersByUserId(Long userId) {// 確定分片List<String> shards = getShardsByUserId(userId);// 并行查詢List<CompletableFuture<List<Order>>> futures = shards.stream().map(shard -> CompletableFuture.supplyAsync(() -> queryOrdersFromShard(shard, userId))).collect(Collectors.toList());// 結果聚合return futures.stream().map(CompletableFuture::join).flatMap(List::stream).collect(Collectors.toList());}// 方案2:數據冗余public void dataRedundancy() {/** 在需要跨庫查詢的場景下* 適當冗余數據到統一的查詢庫* * 優點:查詢簡單* 缺點:數據一致性復雜*/}
}

8. 面試要點總結

Q1: 什么情況下需要分庫分表?

答案:

  1. 單表數據量過大:超過1000萬條記錄
  2. 查詢性能下降:索引效果不明顯
  3. 并發壓力大:單庫連接數不夠
  4. 存儲空間限制:單庫容量達到瓶頸
  5. 業務增長快速:預期數據量快速增長

Q2: 分庫分表有哪些策略?

答案:

  • 垂直分庫:按業務模塊拆分
  • 垂直分表:按字段拆分冷熱數據
  • 水平分庫:按數據特征分散到多個庫
  • 水平分表:按數據量拆分到多張表

Q3: 如何選擇分片鍵?

答案:

  1. 數據分布均勻:避免數據傾斜
  2. 查詢覆蓋率高:大部分查詢都包含分片鍵
  3. 業務相關性強:與核心業務邏輯相關
  4. 更新頻率低:避免頻繁修改分片鍵
  5. 類型簡單:整型或字符串類型

Q4: 分庫分表后如何處理跨庫查詢?

答案:

  1. 應用層聚合:查詢多個分片后在應用層合并
  2. 數據冗余:將需要跨庫查詢的數據冗余存儲
  3. 中間表:創建專門的匯總表
  4. 搜索引擎:使用ES等搜索引擎
  5. 大數據組件:使用Spark、Flink等處理

Q5: ShardingSphere和Mycat的區別?

答案:

對比項ShardingSphereMycat
架構應用層框架數據庫代理
功能功能豐富全面專注分庫分表
性能中等較高
維護活躍緩慢
學習成本中等較低

記憶口訣

分庫分表選框架,場景需求要分析;
ShardingSphere功能全,生態完善易上手;
Mycat簡單性能好,中小企業首選擇;
Vitess云原生架構,超大規模顯威力;
數據同步有Canal,實時binlog是利器;
讀寫分離提性能,主從架構要配齊;
分片鍵選擇要謹慎,數據均勻是關鍵;
跨庫查詢需優化,冗余聚合兩手抓。

總結

架構師老王:選擇分庫分表方案需要綜合考慮:

  1. 數據規模:千萬級、億級、十億級對應不同方案
  2. 團隊能力:技術水平決定了方案的復雜度
  3. 業務場景:OLTP、OLAP、混合場景有不同要求
  4. 運維成本:考慮長期的維護和擴展成本

ShardingSphere師傅:功能全面,適合大多數場景!

Mycat大師:簡單穩定,傳統企業的好選擇!

Vitess長老:云原生時代,我是未來趨勢!

記住:沒有最好的方案,只有最適合的方案!

分庫分表,讓數據庫性能飛起來! 🚀



📌 行動指南

  1. 點贊 → 讓更多Java開發者掌握數據庫技術
  2. 評論 → 留言"數據庫技術"領取[MySQL性能優化指南]
  3. 關注 → 追蹤更新《分布式事務解決方案》(已寫完待發布)
  4. 贊賞 → 解鎖完整源碼+專屬技術咨詢

🚀 下期預告
《分布式事務解決方案》關注可搶先看

📚 相關推薦

  • 漫畫Java基礎
  • 漫畫Spring全家桶
  • 漫畫JVM調優

讓我們一起在Java的世界里探索更多精彩內容! 🚀

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

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

相關文章

Tomcat問題:啟動腳本startup.bat中文亂碼問題解決

一、問題描述 我們第一次下載或者打開Tomcat時可能在控制臺會出現中文亂碼問題二、解決辦法 我的是8.x版本的tomcat用notepad打開&#xff1a;logging.properties 找到&#xff1a;java.util.logging.ConsoleHandler.encoding設置成GBK&#xff0c;重啟tomcat即可

Linux中Gitee的使用

一、Gitee簡介&#xff1a;Gitee&#xff08;碼云&#xff09;是中國的一個代碼托管和協作開發平臺&#xff0c;類似于GitHub或GitLab&#xff0c;主要面向開發者提供代碼管理、項目協作及開源生態服務。適用場景個人開發者&#xff1a;托管私有代碼或參與開源項目。中小企業&a…

Oracle大表數據清理優化與注意事項詳解

一、性能優化策略 1. 批量處理優化批量大小選擇&#xff1a; 小批量(1,000-10,000行)&#xff1a;減少UNDO生成&#xff0c;但需要更多提交次數中批量(10,000-100,000行)&#xff1a;平衡性能與資源消耗大批量(100,000行)&#xff1a;適合高配置環境&#xff0c;但需監控資源使…

Anaconda及Conda介紹及使用

文章目錄Anaconda簡介為什么選擇 Anaconda&#xff1f;Anaconda 安裝Win 平臺macOS 平臺Linux 平臺Anaconda 界面使用Conda簡介Conda下載安裝conda 命令環境管理包管理其他常用命令Jupyter Notebook&#xff08;可選&#xff09;Anaconda簡介 Anaconda 是一個數據科學和機器學…

外包干了一周,技術明顯退步

我是一名本科生&#xff0c;自2019年起&#xff0c;我便在南京某軟件公司擔任功能測試的工作。這份工作雖然穩定&#xff0c;但日復一日的重復性工作讓我逐漸陷入了舒適區&#xff0c;失去了前進的動力。兩年的時光匆匆流逝&#xff0c;我卻在原地踏步&#xff0c;技術沒有絲毫…

【QT】多線程相關教程

一、核心概念與 Qt 線程模型 1.線程與進程的區別: 線程是程序執行的最小單元&#xff0c;進程是資源分配的最小單元&#xff0c;線程共享進程的內存空間(堆&#xff0c;全局變量等)&#xff0c;而進程擁有獨立的內存空間。Qt線程只要關注同一進程內的并發。 2.為什么使用多線程…

VS 版本更新git安全保護問題的解決

問題&#xff1a;我可能移動了一個VS C# 項目&#xff0c;然后&#xff0c;發現里面的git版本檢測不能用了 正在打開存儲庫: X:\Prj_C#\3D fatal: detected dubious ownership in repository at X:/Prj_C#/3DSnapCatch X:/Prj_C#/3D is owned by:S-1-5-32-544 but the current …

Git常用命令一覽

Git 是基于 Linux內核開發的版本控制工具。與常用的版本控制工具 CVS, Subversion 等不同&#xff0c;它采用了分布式版本庫的方式&#xff0c;不必服務器端軟件支持&#xff08;ps&#xff1a;這得分是用什么樣的服務端&#xff0c;使用http協議或者git協議等不太一樣。并且在…

基于 JSON 文件定位圖片缺陷點并保存

基于JSON的圖片缺陷處理流程 ├── 1. 輸入檢查 │ ├── 驗證圖片文件是否存在 │ └── 驗證JSON文件是否存在 │ ├── 2. 數據加載 │ ├── 打開并加載圖片 │ └── 讀取并解析JSON文件 │ ├── 3. 缺陷信息提取 │ ├── 檢查JSON中是否存在shapes字…

Redis基礎學習(五大值數據類型的常用操作命令)

目錄 一、Redis基本知識與Redis鍵&#xff08;key&#xff09;常用操作命令。 二、Redis的五大值的數據類型。&#xff08;value&#xff09; 三、Redis關于鍵&#xff08;key&#xff09;的值常用操作指令表格統計。 &#xff08;1&#xff09;字符串&#xff08;String&#…

Ubuntu——辦公軟件 LibreOffice 安裝與使用指南

十四、LibreOffice 安裝與使用1、核心組件組件????圖標????對應MS Office????核心功能定位????Writer??&#x1f4dd;Word專業文檔處理與排版??Calc??&#x1f4ca;Excel數據計算與分析??Impress??&#x1f3ac;PowerPoint演示文稿制作??Draw??&…

Securecrt丟失tab以及終端重新配色

今天在使用 Securecrt 的時候&#xff0c;發現 Securecrt 的 tab 標簽消失不見了&#xff0c;仔細回想起來&#xff0c;應該是上一次誤按了 alt enter 最大化&#xff0c;然后導致配置丟失的問題 還有表現就是菜單中的 Session Tabs 無論勾選還是不勾選都沒有任何變化&#xf…

frp搭建內網穿透教程

frp搭建內網穿透教程 步驟1&#xff1a;準備工作 公網服務器&#xff1a;需要一臺具有公網IP的服務器作為中轉服務器&#xff0c;安裝frp服務器端&#xff08;frps&#xff09;。內網設備&#xff1a;需要暴露服務的內網設備&#xff0c;安裝frp客戶端&#xff08;frpc&#xf…

【JavaEE進階】圖書管理系統(未完待續)

目錄 用戶登錄 添加圖書 圖書列表 修改圖書 刪除圖書 批量刪除 攔截器 &#x1f343;前言 什么是攔截器? 攔截器的基本使用 自定義攔截器 注冊配置攔截器 攔截路徑 攔截器執行流程 項目實現統一攔截 定義攔截器 注冊配置攔截器 前?圖書管理系統, 咱們只完成了??登錄和圖書列…

基于同花順API的熊市與牛市識別模型開發及因子分析

基于同花順API的熊市與牛市識別模型開發及因子分析 1. 引言 1.1 研究背景與意義 金融市場中的牛市與熊市識別一直是投資者和研究人員關注的重點問題。牛市(Bull Market)通常指價格持續上漲的市場環境,投資者信心充足,交易活躍;而熊市(Bear Market)則指價格持續下跌的市場…

AMD 銳龍 AI MAX+ 395 處理器與端側 AI 部署的行業實踐

2025 年 7 月 10 日&#xff0c;AMD 在深圳召開 Mini AI 工作站行業解決方案峰會&#xff0c;正式發布基于銳龍 AI MAX 395 處理器的端側 AI 部署方案&#xff0c;與 200 余家生態伙伴共同探討 AI 技術在千行百業的落地路徑。這一硬件平臺通過異構計算架構與開放生態設計&#…

期權盤位是什么意思?

本文主要介紹期權盤位是什么意思&#xff1f;“期權盤位”并非金融交易中的標準術語&#xff0c;可能是口語化表達或對某些概念的簡化描述。期權盤位是什么意思&#xff1f;1. 期權盤口的“價位”&#xff08;買賣報價位置&#xff09;在期權交易中&#xff0c;“盤口”通常指實…

【Trea】Trea國內版|國際版|海外版下載|Mac版|Windows版|Linux下載配置教程

【Trea】Trea國內版&#xff5c;國際版&#xff5c;海外版下載&#xff5c;Mac版&#xff5c;Windows版下載配置教程 本文適用讀者&#xff1a; 想要第一次安裝 Trea需要在 Windows 或 macOS 上完成環境配置想深入了解 Doubao、DeepSeek、ChatGPT、Claude 等模型在 Trea 中的接…

MyBatis實現分頁查詢-蒼穹外賣筆記

首先分頁查詢的原理是SQL的limit關鍵字。LIMIT 子句用于限制 SQL 查詢返回的記錄數。它接受一個或兩個整數參數&#xff0c;第一個參數表示偏移量&#xff0c;第二個參數表示返回的最大記錄數。我們完全可以使用前端傳給我們的page,pageSize,自己去計算limit的參數&#xff0c;…

系統性能評估方法深度解析:從經典到現代

評估本質&#xff1a;系統性能評估是通過量化分析衡量計算機系統在特定工作負載下的表現能力&#xff0c;核心目標是建立可比較的性能基準&#xff0c;為系統設計、選型和優化提供科學依據。一、評估方法分類體系 #mermaid-svg-0ceD4AA2KDwzwtb6 {font-family:"trebuchet …