如果有一個特別大的訪問量到資料庫上,怎麼做優化?主從複製、讀寫分離

来源:https://www.cnblogs.com/HuiH/archive/2020/03/23/12551593.html
-Advertisement-
Play Games

第一個就是使用優化查詢的方法。這個在前期的內容中有具體說明,這裡不再做說明。 第二、這裡簡要說明一個以下幾個方法: 主從複製、讀寫分離、負載均衡 目前,大部分的主流關係型資料庫都提供了主從複製的功能,通過配置兩台(或多台)資料庫的主從關係,可以將一臺資料庫伺服器的數據更新同步到另一臺伺服器上。網站可 ...


第一個就是使用優化查詢的方法。這個在前期的內容中有具體說明,這裡不再做說明。

第二、這裡簡要說明一個以下幾個方法:

  主從複製、讀寫分離、負載均衡

  目前,大部分的主流關係型資料庫都提供了主從複製的功能,通過配置兩台(或多台)資料庫的主從關係,可以將一臺資料庫伺服器的數據更新同步到另一臺伺服器上。網站可以利用資料庫的這一功能,實現資料庫的讀寫分離,從而改善資料庫的負載壓力。一個系統的讀操作遠遠多於其寫操作,因此寫操作發向master,讀操作發向slaves進行操作(簡單的輪循演算法來決定使用哪個slave)。

  利用資料庫的讀寫分離,web伺服器在寫數據的時候,訪問著資料庫(Master),主資料庫通過主從複製機制將數據更新同步到從資料庫(Slave),這樣web伺服器讀數據的時候,就可以通過從資料庫獲得數據。這一方案使得在大量讀操作的web應用可以輕鬆地讀取數據,而主資料庫也只會承受少量的寫入操作,還可以實現數據熱備份,可謂是一舉兩得的方案。

1.複製的基本原則

  MySQL複製是非同步的且串列化的;

  每個Slave只有一個Master;

  每個Slave只有一個唯一的伺服器ID;

  每個Master可以有多個Slave;

2.一主一從常見配置:

  MySQL版本一致且後臺以服務運行;

  主從都配置在[mysqld]結點下,都是小寫,主機修改my.ini配置文件,從機修改my.cnf配置文件,因修改過配置文件,請主機+從機都重啟後臺MySQL服務;

  主機從機都關閉防火牆;

  在Windows主機上建立賬戶並授權slave;

  在Linux從機上配置需要複製的主機;

  主機新建庫,新建表,insert記錄,從機複製;

  通過stop slave 停止從機複製;

 

       

 主從複製的原理:

  影響MySQL-A資料庫的操作,在資料庫執行後,都會寫入本地的日誌系統A中。假設,實時的將變化了的日誌系統中的資料庫事件操作,通過網路發給MySQL-B。MySQL-B收到後,寫入本地日誌系統B,然後一條條地將資料庫事件在資料庫中完成。那麼MySQL-A的變化,MySQL-B也會變化,這樣就是所謂的MySQL的複製。

  在上面的模型中,MySQL-A就是主伺服器,即master,MySQL-B就是從伺服器,即slave。

  日誌系統A,其實它是MySQL的日誌類型的二進位日誌,也就是專門用來保存修改資料庫的所有動作,即bin log。【註意MySQL會在執行語句之後,釋放鎖之前,寫入二進位日誌,確保事務安全。】

  日誌系統B,並不是二進位日誌,由於它是從MySQL-A的二進位日誌複製過來的,並不是自己的資料庫變化產生的,有點接力的感覺,稱為中繼日誌,即relay log。

  可以發現,通過上面的機制,可以保證MySQL-A和MySQL-B的資料庫數據一致,但是時間上肯定有延遲,即MySQL-B的數據是滯後的。

簡化版:

MySQL主(稱master)從(稱slave)複製的原理:

  1.master將數據改變記錄到二進位日誌(binary log)中,也即是配置文件log-bin指定的文件(這些記錄叫做二進位日誌事件,binary log events)

    PS:從圖中可以看出,Slave伺服器中有一個I/O線程(I/O Thread)在不停地監聽Master的二進位日誌(binary log)是否有更新:如果沒有,它會睡眠等待Master產生新的日誌事件;如果有新的日誌事件(log events),則會將其拷貝至Slave伺服器中的中繼日誌(relay log)。

  2.slave將master的二進位日誌事件(binary log events)拷貝到它的中繼日誌(relay log)。

  3.slave重做中繼日誌中的事件,將Master上的改變反映到它自己的資料庫中。所以兩端的數據是完全一樣的。

    PS:從圖中可以看出,Slave伺服器有一個SQL線程(SQL Thread)從中繼日誌讀取事件,並重做其中的事件,從而更新Slave的數據,使其與Master中的數據一致。只要該線程與I/O線程保持一致,中繼日誌通常會位於OS的緩存中,所以中繼日誌的開銷很小。

  

 主從複製的幾種方式:

 1.同步複製

  主伺服器在將更新的數據寫入它的二進位日誌(binlog)文件中後,必須等待驗證所有的從伺服器的更新數據是否已經複製到其中,之後才可以自由處理其他進入的事務處理請求。

2.非同步複製

  主伺服器在將更新的數據寫入它的二進位日誌(binlog)文件中後,無需等待驗證更新數據是否複製到從伺服器中,就可以自由處理其他進入的事務處理請求。

3.半非同步複製

  主伺服器在將更新的數據寫入它的二進位日誌(binlog)文件中後,只需等待驗證其中一臺從伺服器的更新數據是否已經複製到其中,就可以自由處理其他進入的事務處理請求,其他的從伺服器不用管。

資料庫分表、分區、分庫

  分表見上期描述。

  分區就是把一張表的數據分成多個區塊,這些區塊可以在一個磁碟上,也可以在不同的磁碟上,分區後,錶面上還是一張表,但數據散列在多個位置,這樣一來,多塊硬碟同時處理不同請求,從而提高磁碟IO讀寫性能,實現比較簡單。包括水平分區和垂直分區。

  分庫是根據業務不同把相關的表且分到不同的資料庫中,比如web、bbs、blog等庫。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • pyaudio模塊讀取設備名稱來指定相應的設備進行錄音,涉及操作系統編碼、IDE解碼等問題 ...
  • 在linux和windows中都有路由配置的方法,在日常開發中也經常遇到,比如自己公司各個網站內部開了openvpn這種應用以後,路由配置不好有可能導致改走vpn的不走,網路卡頓甚不能正常上網 1.命令格式 看不懂不要緊,看下麵常用命令那的用法 2.常用選項和參數說明 2.1 選項說明 2.2 參數 ...
  • 前面系列文章講解了Linux下通過文件傳輸、文件共用、郵件系統來分享和獲取資源,本文講解網路資源獲取和共用的另外一種形式,通過Apache服務程式來提供Web服務。 ...
  • 為什麼提交到github的commit都是一個作者 "參考鏈接" "重要知識點講解" 問題如下所示 git是分散式去中心化的管理系統 ssh秘鑰對生成。並把id_rsa.pub加入github.com中(這個過程只是建立一個可以互訪的通道而已) 只是建立了github倉庫之間可以互訪 到底是本地哪個 ...
  • https://www.cnblogs.com/tan-chao/p/11023181.html 簡介 MongoDB[1] 是一個基於分散式文件存儲的資料庫。由C 語言編寫。旨在為WEB應用提供可擴展的高性能數據存儲解決方案。 MongoDB[2] 是一個介於關係資料庫和非關係資料庫之間的產品,是 ...
  • 在一張表裡有多個索引 , 我們where欄位里條件有多個索引的值 , 那麼究竟使用的哪個呢? 我們可以使用explain來查看 , 其中的key_len欄位可以看得出來 比如下麵這條sql explain select * from ent_calendar_diary where email='x ...
  • 分享攢了多年的mssql腳本 腳本類別包括:備份還原表分區常用函數錯誤日誌定時自動抓取耗時SQL並歸檔發郵件腳本模塊鏡像批量腳本資料庫收縮資料庫損壞資料庫賬號統計資料庫大小性能作業 腳本數量:54個 github地址:https://github.com/xiaohuazi123/mssql-scr ...
  • SQL 包含以下 4 部分: 1 數據定義語言(DDL):DROP、CREATE、ALTER 等語句。 2 數據操作語言(DML):INSERT(插入)、UPDATE(修改)、DELETE(刪除)語句。 3 數據查詢語言(DQL):SELECT 語句。 4 數據控制語言(DCL): GRANT、RE ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...