国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

性能優(yōu)化之分庫分表

這篇具有很好參考價值的文章主要介紹了性能優(yōu)化之分庫分表。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1、什么是分庫分表

分庫分表包括分庫和分表兩個維度,在開發(fā)過程中,對于每個維度都可以采用兩種拆分思路,即垂直拆分和水平拆分。
性能優(yōu)化之分庫分表,# JAVA高階,# 性能優(yōu)化,# 分布式,性能優(yōu)化,java,數據庫

1.1、分表

將同一個庫中的一張表(比如SPU表)按某種方式(垂直拆分、水平拆分)拆分成SPU1、SPU2、SPU3、SPU4…等若干張表,如下圖所示:
性能優(yōu)化之分庫分表,# JAVA高階,# 性能優(yōu)化,# 分布式,性能優(yōu)化,java,數據庫

1.2、分庫

在表數據不變的情況下,對數據庫進行拆分,即將一個庫中的若干張表按某種方式拆分出來,放到不同的數據中,如下圖所示:
性能優(yōu)化之分庫分表,# JAVA高階,# 性能優(yōu)化,# 分布式,性能優(yōu)化,java,數據庫

1.3、分庫+分表

數據庫的數量和表的數量都有變化,例如將一個數據庫中的一張表(比如SPU表)拆分成SPU1、SPU2、SPU3、SPU4…等若干張表,并放到不同的數據里面,如下圖所示:
性能優(yōu)化之分庫分表,# JAVA高階,# 性能優(yōu)化,# 分布式,性能優(yōu)化,java,數據庫

2、拆分方式

性能優(yōu)化之分庫分表,# JAVA高階,# 性能優(yōu)化,# 分布式,性能優(yōu)化,java,數據庫

2.1、水平拆分

水平拆分指的是在整個表數據結構不發(fā)生變化的前提下,我們將一張表的數據拆分成多張表,如下圖所示:
性能優(yōu)化之分庫分表,# JAVA高階,# 性能優(yōu)化,# 分布式,性能優(yōu)化,java,數據庫
這樣拆分完以后,單張表的數據量就降下來了,讀寫性能自然就上去了。

2.2、垂直拆分

垂直拆分指將本來放在一張表中的字段,按業(yè)務需求拆分開放到多張表中,如下圖所示:
性能優(yōu)化之分庫分表,# JAVA高階,# 性能優(yōu)化,# 分布式,性能優(yōu)化,java,數據庫
這樣拆分完后,就將需要經常查詢的數據單獨放到一張表中了,性能也就提上去了。

2、何時進行分庫分表?

當系統性能出現瓶頸,我們通過代碼優(yōu)化、加緩存、JVM性能調優(yōu)、限流、搭建集群等常用的技術手段依然無法很好的解決問題時,就可以考慮采用分庫分表來提高系統的性能。常見需要進行分表分表的場景有以下幾點:

2.1、單表出現性能瓶頸

單表數據量較大,導致讀寫性能較慢。

2.2、單庫出現性能瓶頸

  1. CPU壓力過大(busy、load過高),導致讀寫性能較慢。
  2. 內存不足(緩存池命中率較低、磁盤讀寫IOPS過高),導致讀寫性能較慢。
  3. 磁盤空間不足,導致無法正常寫入數據。
  4. 網絡帶寬不足,導致讀寫性能較慢。

3、如何選擇分庫、分表或者分庫+分表

3.1、只分表

  • 單表數據量較大,單表讀寫性能出現瓶頸。
  • 經過評估單庫的容量和性能可以支撐未來幾年的數據量增長。

3.2、只分庫

  • 數據庫(讀)寫壓力較大,數據庫出現存儲性能瓶頸。

3.3、分庫分表

  • 單表數據量較大,單表讀寫性能出現瓶頸。
  • 數據庫(讀)寫壓力較大,數據庫出現存儲性能瓶頸。

4、分庫分表帶來的問題

4.1、分布式唯一ID

分庫分表后,一張表被拆成了多張表,數據庫的自增ID無法保證數據的唯一性了,因此需要映入一種方案來保證數據ID的唯一性。成熟的解決方案有以下幾個:

4.1.1、UUID

優(yōu)點:本地生成,性能高。

缺點:

  • 更占用存儲空間,一般為長度36的字符串。
  • 不適合作為MySQL主鍵:無序性會導致磁盤隨機IO、葉分裂等問題;普通索引需要存儲主鍵值,導致B+樹“變高”,IO次數變多。
  • 基于MAC地址的送算法可能會導致MAC地址泄漏。

4.1.2、雪花算法

性能優(yōu)化之分庫分表,# JAVA高階,# 性能優(yōu)化,# 分布式,性能優(yōu)化,java,數據庫

  • 41bit時間戳:可用69年
  • 10bit工作機器:可部署1024臺服務器
  • 12bit序列號:每毫秒可生成4096個ID,每秒也就是409萬。

4.1.3、號段模式

性能優(yōu)化之分庫分表,# JAVA高階,# 性能優(yōu)化,# 分布式,性能優(yōu)化,java,數據庫

4.2、分布式事務

4.2.1、2PC

2PC 即兩階段提交協議,是將整個事務流程分為兩個階段,準備階段(Prepare phase)、提交階段(commit phase),2 是指兩個階段,P 是指準備階段,C 是指提交階段。
性能優(yōu)化之分庫分表,# JAVA高階,# 性能優(yōu)化,# 分布式,性能優(yōu)化,java,數據庫

4.2.2、TCC

TCC(Try-Confirm-Cancel)是一種事務模型,其概念源自于Pat Helland的論文《Life beyond Distributed Transactions:an Apostate’s Opinion》。

TCC提出了一種基于業(yè)務層面的事務定義方式,通過由業(yè)務自身控制鎖粒度,解決了復雜業(yè)務中跨表跨庫等大顆粒度資源鎖定的問題。

TCC將事務過程分為Try(嘗試)、Confirm(確認)和Cancel(取消)三個階段,每個階段由業(yè)務代碼控制,避免了長事務的問題,從而提高了性能。

TCC 的具體流程如下圖所示:

性能優(yōu)化之分庫分表,# JAVA高階,# 性能優(yōu)化,# 分布式,性能優(yōu)化,java,數據庫

4.2.3、常見的保證最終一致的處理方法

  • 回滾
  • 重試
  • 監(jiān)控
  • 告警
  • 冪等
  • 對賬
  • 人工補償

4.3、跨庫JOIN/分頁查詢

4.3.1、合適的分表字段(sharding key)

合理選擇,避免大多數跨庫查詢
性能優(yōu)化之分庫分表,# JAVA高階,# 性能優(yōu)化,# 分布式,性能優(yōu)化,java,數據庫

4.3.2、搜索引擎支持:ES

數據冗余到ES,使用ES支持復雜查詢。
核心流程:

  • 使用ES查詢出關鍵字段,例如:門店id和商品id。
  • 再使用關鍵字段去查詢完整數據。
    注意點:
  • ES只需要存儲需要搜索的字段。

4.3.3、分開查詢,內存中聚合

先查詢出A表數據,然后根據A表的結果查詢B表。
注意點:

  • 查詢出來的數據量
  • 內存占用情況

4.3.4、冗余字段

A表查詢需要B表的field1字段,則將B表的field1存儲一份到A表上。
適用場景:只需要少量字段,則可以直接冗余。文章來源地址http://www.zghlxwxcb.cn/news/detail-682556.html

到了這里,關于性能優(yōu)化之分庫分表的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 分布式計算中的大數據處理:Hadoop與Spark的性能優(yōu)化

    大數據處理是現代計算機科學的一個重要領域,它涉及到處理海量數據的技術和方法。隨著互聯網的發(fā)展,數據的規(guī)模不斷增長,傳統的計算方法已經無法滿足需求。因此,分布式計算技術逐漸成為了主流。 Hadoop和Spark是目前最為流行的分布式計算框架之一,它們都提供了高

    2024年01月23日
    瀏覽(94)
  • MySQL 數據存儲和優(yōu)化------MySQL索引原理和優(yōu)化 ---- (架構---索引---事務---鎖---集群---性能---分庫分表---實戰(zhàn)---運維)持續(xù)更新

    MySQL 數據存儲和優(yōu)化------MySQL索引原理和優(yōu)化 ---- (架構---索引---事務---鎖---集群---性能---分庫分表---實戰(zhàn)---運維)持續(xù)更新

    Mysql架構體系全系列文章主目錄(進不去說明還沒寫完) https://blog.csdn.net/grd_java/article/details/123033016 本文只是整個系列筆記的第二章:MySQL索引原理和優(yōu)化,只解釋索引相關概念。 索引可以提高查詢效率,影響where查詢和order by排序,它可以從多方面進行分類,但是實際創(chuàng)建時

    2024年02月02日
    瀏覽(23)
  • Redis7實戰(zhàn)加面試題-高階篇(手寫Redis分布式鎖)

    Redis7實戰(zhàn)加面試題-高階篇(手寫Redis分布式鎖)

    面試題: 1.Redis除了拿來做緩存,你還見過基于Redis的什么用法? 數據共享,分布式session分布式鎖 全局ID 計算器、點贊位統計 購物車 輕量級消息隊列(list,stream) 抽獎 點贊、簽到、打卡 差集交集并集,用戶關注、可能認識的人,推薦模型 熱點新聞、熱搜排行榜 2.Redis做分

    2024年02月07日
    瀏覽(19)
  • Redis緩存設計與性能優(yōu)化【緩存和數據庫不一致問題,解決方案:1.加過期時間這樣可以一段時間后自動刷新 2.分布式的讀寫鎖】

    Redis緩存設計與性能優(yōu)化【緩存和數據庫不一致問題,解決方案:1.加過期時間這樣可以一段時間后自動刷新 2.分布式的讀寫鎖】

    在大并發(fā)下,同時操作數據庫與緩存會存在數據不一致性問題 1、雙寫不一致情況 2、讀寫并發(fā)不一致 解決方案: 1、對于并發(fā)幾率很小的數據(如個人維度的訂單數據、用戶數據等),這種幾乎不用考慮這個問題,很少會發(fā)生緩存不一致, 可以給緩存數據加上過期時間,每隔一

    2024年04月13日
    瀏覽(29)
  • 分布式鎖設計選型 不可重入鎖建議使用ZooKeeper來實現 可重入鎖建議使用Redis來實現 分布式鎖:ZooKeeper不可重入鎖 Java優(yōu)化建議

    在設計分布式鎖時,需要考慮業(yè)務場景和業(yè)務需求,以保證鎖的正確性和可用性。 例如,在一個電商系統中,每個商品都有一個庫存量。為了避免多個用戶同時購買同一件商品導致庫存出現不一致的情況,可以為每個商品設置一個分布式鎖,確保同一時間只能有一個用戶購買

    2024年02月08日
    瀏覽(21)
  • Jmeter性能測試:高并發(fā)分布式性能測試

    Jmeter性能測試:高并發(fā)分布式性能測試

    當進行高并發(fā)性能測試的時候,受限于Jmeter工具本身和電腦硬件的原因,無法滿足我們對大并發(fā)性能測試的要求。 基于這種場景下,我們就需要采用分布式的方式來實現我們高并發(fā)的性能測試要求。 ?要進行分布式性能測試,我們首先要一臺機器作為主控機(Controller),其

    2024年02月08日
    瀏覽(43)
  • 【分布式技術專題】「分布式ID系列」百度開源的分布式高性能的唯一ID生成器UidGenerator

    【分布式技術專題】「分布式ID系列」百度開源的分布式高性能的唯一ID生成器UidGenerator

    UidGenerator是什么 UidGenerator是百度開源的一款分布式高性能的唯一ID生成器,更詳細的情況可以查看官網集成文檔 uid-generator是基于Twitter開源的snowflake算法實現的一款唯一主鍵生成器(數據庫表的主鍵要求全局唯一是相當重要的)。要求java8及以上版本。 snowflake算法 Snowflake算法描

    2024年02月04日
    瀏覽(22)
  • 【分布式系統】聊聊高性能設計

    【分布式系統】聊聊高性能設計

    對于以上的數字,其實每個程序員都應該了解,因為只有了解這些基本的數字,才能知道對于CPU、內存、磁盤、網絡之間數據讀寫的時間。1000ms = 1S。毫秒-微秒-納秒-秒-分鐘 為什么高性能如此重要的呢,在架構設計中,高性能、高可用、高并發(fā)是三高問題。其實背后對應的就

    2024年02月13日
    瀏覽(49)
  • 分布式性能測試避坑指南

    當進行分布式性能測試時,以下是一些避坑的指南: 1.定義明確的測試目標 在開始測試之前,確保清楚地定義測試的目標和需求。確定要測試的關鍵指標和閾值,以便能夠準確評估系統的性能。 2.設計合適的測試場景 根據實際使用情況和預期負載,設計具有代表性的測試場

    2024年02月12日
    瀏覽(19)
  • django分庫分表的優(yōu)化

    方案一:輪詢方式分表 當系統數據越來越多的時候,查詢變得緩慢,即使加了索引,由于表數據的增加,索引的維護也會成為數據庫性能的限制問題,所以此時可以通過分表,將數據通過某種準則分別存儲到不同的表中,以實現緩解單表的壓力。 分表的方法大部分都是通過

    2024年01月18日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包