mysql高并發設計

mysql高并發設計

一、部署方案

https://blog.csdn.net/weixin_37519752/article/details/138728036

方案1:雙主

image.png
1、優點
寫入擴展性:兩個節點都可以處理寫入操作,提高了寫入操作的擴展性。
高可用性:在任一節點故障時,另一個節點仍可繼續提供服務,包括寫入操作。
故障轉移:無需復雜的故障轉移機制,因為兩個節點都是活躍的。
2、缺點
數據一致性:需要復雜的沖突檢測和解決機制來保持數據一致性。
網絡要求:對網絡穩定性和延遲有較高要求,因為節點間的實時同步對網絡質量敏感。
額外開銷:實時同步帶來的額外網絡和磁盤I/O開銷。
3、適用場景
分布式應用:需要在不同地理位置提供寫入能力的應用。
高寫入負載:需要分散寫入負載以提高性能的場景。
實時數據需求:需要在多個節點實時同步數據的應用。

方案2:主從復制

一主一從,或者一主多從 mysql5.7以上版本支持

image.png
1、優點
數據冗余:提供了數據的熱備份,降低了數據丟失的風險。
性能提升:一主多從,不同用戶從不同數據庫讀取,性能提升。
擴展性:流量增大時,可以方便地增加從服務器,不影響系統使用。
負載均衡:一主多從相當于分擔了主機任務,做了負載均衡。
2、缺點
數據延遲:由于復制是異步的,存在數據復制延遲的風險。
復雜性增加:增加了系統的復雜性,需要更多的維護和管理。
額外資源消耗:需要額外的硬件資源來部署從服務器。
寫入性能影響:所有寫入操作都在主服務器上執行,可能成為性能瓶頸。
3、適用場景
讀寫分離:適用于讀操作遠多于寫操作的場景。
數據備份:用于數據的實時備份,以防止數據丟失。
高可用性需求:需要保證服務連續性的關鍵應用

二、mysql性能優化

1、使用索引
索引是對表中數據進行高效查詢的關鍵。在MySQL中,可以使用B-Tree索引或哈希索引來加速查詢操作
示例:

CREATE INDEX index_name ON table_name (column1, column2, ...);

2、優化查詢語句
優化查詢可以提高MySQL性能。可以通過合適的查詢語句、索引和緩存機制來減少查詢的執行時間,避免全表掃描和不必要的數據操作
示例:

# 通過使用索引和合適的查詢語句
SELECT * FROM table_name WHERE column1 = "value" AND column2 = "value";# 避免使用通配符查詢,可以使用索引來加速查詢
SELECT * FROM table_name WHERE column1 LIKE "value%";# 避免在查詢條件中使用函數,函數會導致索引失效
SELECT * FROM table_name WHERE DATE(column1) > "2021-01-01";

3、緩存優化
MySQL的緩存機制可以提高查詢性能。通過適當設置查詢緩存和系統緩存,可以減少磁盤IO操作,加快查詢的執行速度。使用MySQL的查詢緩存、InnoDB的緩沖池等

# 啟用查詢緩存
query_cache_type = 1
query_cache_size = 64M

4、分區分表
當數據量非常大時,可以考慮使用分區和分表來提高查詢性能。分區將數據劃分成多個較小的邏輯部分,每個部分可以獨立地進行查詢和維護。而分表是將一個大表拆分成多個小表,每個小表存儲一部分數據。

# 分區
CREATE TABLE table_name (...
)
PARTITION BY RANGE (column_name) (PARTITION p1 VALUES LESS THAN (value1),PARTITION p2 VALUES LESS THAN (value2),...
)# 分表
CREATE TABLE table_name (...
)
PARTITION BY HASH (column_name) PARTITIONS 4;

5、參數調優
https://blog.51cto.com/u_12196/6967500
https://blog.51cto.com/u_13259/6936668
6、連接池管理
連接池是一種管理數據庫連接的技術,可以有效地減少連接的創建和銷毀開銷。在高并發環境下,連接池可以提前創建好一定數量的連接,并將其保存在連接池中。當有新的請求到來時,可以從連接池中獲取連接,而不需要每次都重新創建連接。這樣可以大大提高并發處理能力。
7、硬件優化:
使用高性能的硬件設備,如高速CPU、大容量內存和高速磁盤,以提升數據庫的處理能力

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

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

相關文章

數據結構復習計劃之復雜度分析(時間、空間)

第二節:算法 時間復雜度和空間復雜度 算法(Algorithm):是對特定問題求解方法(步驟)的一種描述,是指令的有限序列,其中每一條指令表示一個或多個操作。 算法可以有三種表示形式: 偽代碼 自然語言 流程圖 算法的五…

貓不吃東西還嘔吐是什么原因?可以預防貓咪嘔吐的主食凍干推薦

貓咪突然食欲不振,還出現了嘔吐的癥狀,這究竟是為什么呢?結合我多年養貓的經驗,讓我們一起分析一下可能的原因。 一、 貓不吃東西還嘔吐是什么原因 (1)首先、排除貓瘟 如果你的貓咪一直家養,…

【Android】基于 LocationManager 原生實現定位打卡

目錄 前言一、實現效果二、定位原理三、具體實現1. 獲取權限2. 頁面繪制3. 獲取經緯度4. 方法調用5. 坐標轉換6. 距離計算7. 完整代碼 前言 最近公司有個新需求,想要用定位進行考勤打卡,在距離打卡地一定范圍內才可以進行打卡。本文將借鑒 RxTool 的 Rx…

php快速入門

前言 php是一門腳本語言,可以訪問服務器,對數據庫增刪查改(后臺/后端語言) 后臺語言:php,java,c,c,python等等 注意:php是操作服務器,不能直接在…

QUdpSocket 的bind函數詳解

QUdpSocket 是 Qt 框架中用于處理 UDP 網絡通信的類。bind 函數是此類中的一個重要方法,它用于將 QUdpSocket 對象綁定到一個特定的端口上,以便在該端口上接收 UDP 數據包。 函數原型 在 Qt 中,bind 函數的原型通常如下所示: b…

微軟開源項目GraphRAG——基于知識圖譜的RAG簡介

前言 在大型語言模型(LLM)的前沿研究中,一個核心挑戰與機遇并存的領域是擴展它們的能力,以解決超出其訓練數據范疇的問題。這不僅要求模型在面對全新數據時仍能保持卓越表現,還意味著開辟了全新的數據分析可能性&…

JVM 堆內存分配過程

設置堆內存大小和 OOM Java 堆用于存儲 Java 對象實例,那么堆的大小在 JVM 啟動的時候就確定了,我們可以通過 -Xmx 和 -Xms 來設定 -Xms 用來表示堆的起始內存,等價于 -XX:InitialHeapSize-Xmx 用來表示堆的最大內存,等價于 -XX…

Hadoop-15-Hive 元數據管理與存儲 Metadata 內嵌模式 本地模式 遠程模式 集群規劃配置 啟動服務 3節點云服務器實測

章節內容 上一節我們完成了: Hive中數據導出:HDFSHQL操作上傳內容至Hive、增刪改查等操作 背景介紹 這里是三臺公網云服務器,每臺 2C4G,搭建一個Hadoop的學習環境,供我學習。 之前已經在 VM 虛擬機上搭建過一次&am…

簡單的基追蹤一維信號降噪方法(MATLAB 2018)

基追蹤法是基于冗余過完備字典下的一種信號稀疏表示方法。該方法具有可提高信號的稀疏性、實現閾值降噪和提高時頻分辨率等優點。基追蹤法采用表示系數的范數作為信號來度量稀疏性,通過最小化l型范數將信號稀疏表示問題定義為一類有約束的極值問題,進而轉…

c++ primer plus 第15章友,異常和其他 15.3.11 有關異常的注意事項

c primer plus 第15章友,異常和其他 15.3.11 有關異常的注意事項 15.3.11 有關異常的注意事項 文章目錄 c primer plus 第15章友,異常和其他 15.3.11 有關異常的注意事項15.3.11 有關異常的注意事項 15.3.11 有關異常的注意事項 從前面關于如何使用異常…

vue實現表單輸入框數字類型校驗功能

vue實現表單輸入框數字類型校驗功能 1. 樣式代碼 <el-form-item label"訂單總價"><el-input size"small" v-model"form.totalPrice" placeholder"請輸入訂單總價 正整數或者2位數小數" input"check(form.totalPric…

SpringSecurity中文文檔(Servlet Authorize HttpServletRequests)

Authorize HttpServletRequests SpringSecurity 允許您在請求級別對授權進行建模。例如&#xff0c;對于 Spring Security&#xff0c;可以說/admin 下的所有頁面都需要一個權限&#xff0c;而其他所有頁面只需要身份驗證。 默認情況下&#xff0c;SpringSecurity 要求對每個…

Umi.js 項目中使用 Web Worker

1.配置 Umi.js 在 Umi.js 中&#xff0c;需要通過配置來擴展 Webpack 的功能。在項目根目錄下修改 config/config.ts 文件&#xff1a; export default defineConfig({chainWebpack(config) {config.module.rule(worker).test(/\.worker\.ts$/).use(worker-loader).loader(wo…

C語言之指針的奧秘(二)

一、數組名的理解 int arr[10]{1,2,3,4,5,6,7,8,9,10}; int *p&arr[0]; 這里使用 &arr[0] 的?式拿到了數組第?個元素的地址&#xff0c;但是其實數組名本來就是地址&#xff0c;而且是數組首元素的地址。如下&#xff1a; 我們發現數組名和數組?元素的地址打印出…

重要文件放u盤還是硬盤?硬盤和u盤哪個適合長期存儲

在數字時代&#xff0c;我們每天都會處理大量的文件。其中&#xff0c;不乏一些對我們而言至關重要的文件&#xff0c;如家庭照片、工作文檔、財務記錄等。面對這些重要文件的存儲問題&#xff0c;我們通常會面臨&#xff1a;“重要文件放U盤還是硬盤”、“硬盤和U盤哪個適合長…

Vue2打包部署后動態修改后端接口地址的解決方法

文章目錄 前言一、背景二、解決方法1.在public文件夾下創建config文件夾&#xff0c;并創建config.js文件2.編寫config.js內容3.在index.html中加載config.js4.在封裝axios工具類的js中修改配置 總結 前言 本篇文章將介紹使用Vue2開發前后端分離項目時&#xff0c;前端打包部署…

系統架構師考點--系統安全

大家好。今天我來總結一下系統安全相關的考點&#xff0c;這類考點每年都會考到&#xff0c;一般是在上午場客觀題&#xff0c;占2-4分。 一、信息安全基礎知識 信息安全包括5個基本要素&#xff1a;機密性、完整性、可用性、可控性與可審查性 (1)機密性&#xff1a;確保信息…

Navicat導入sql文件

文章目錄 Navicat導入SQL文件&#xff0c;使用默認導入&#xff0c;不做任何修改報錯嘗試一修改運行時的選擇 嘗試二修改my.ini的配置文件 Navicat導入SQL文件&#xff0c;使用默認導入&#xff0c;不做任何修改報錯 嘗試一 修改運行時的選擇 取消勾選 ‘每個運行中運行多重查…

C++ 判斷語句的深入解析

C++ 判斷語句的深入解析 C++ 是一種廣泛使用的編程語言,以其高效性和靈活性著稱。在 C++ 中,判斷語句是控制程序流程的關鍵組成部分,它們允許程序根據不同的條件執行不同的代碼路徑。本文將深入探討 C++ 中的判斷語句,包括 if、else if、else 以及 switch 語句,并展示如何…

3,區塊鏈加密(react+區塊鏈實戰)

3&#xff0c;區塊鏈加密&#xff08;react區塊鏈實戰&#xff09; 3.1 哈希3.2 pow-pos-dpos3.3非對稱加密&#xff08;1&#xff09;對稱加密AES&#xff08;2&#xff09;非對稱加密RSA 3.4 拜占庭將軍3.5 P2P網絡3.6 區塊鏈 3.1 哈希 密碼學&#xff0c;區塊鏈的技術名詞 …