婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > mysql分表分庫(kù)的應(yīng)用場(chǎng)景和設(shè)計(jì)方式

mysql分表分庫(kù)的應(yīng)用場(chǎng)景和設(shè)計(jì)方式

熱門(mén)標(biāo)簽:銀川電銷外呼系統(tǒng)定制 電銷機(jī)器人好品牌門(mén)薩維l 中科嘉智人工智能電銷機(jī)器人 甘孜電話機(jī)器人廠家 哈爾濱crm外呼系統(tǒng)價(jià)格 西安400電話在哪里辦理 上海智能外呼系統(tǒng)需要多少錢(qián) 凱立德科技館地圖標(biāo)注 做地圖標(biāo)注都需要什么工具

很多朋友在論壇和留言區(qū)域問(wèn)mysql在什么情況下才需要進(jìn)行分庫(kù)分表,以及采用何種設(shè)計(jì)方式才是最優(yōu)的選擇,根據(jù)這些問(wèn)題,小編為大家整理了關(guān)于MySQL分庫(kù)分表的應(yīng)用場(chǎng)景和最優(yōu)的設(shè)計(jì)方式舉例。

一. 分表

 場(chǎng)景:對(duì)于大型的互聯(lián)網(wǎng)應(yīng)用來(lái)說(shuō),數(shù)據(jù)庫(kù)單表的記錄行數(shù)可能達(dá)到千萬(wàn)級(jí)甚至是億級(jí),并且數(shù)據(jù)庫(kù)面臨著極高的并發(fā)訪問(wèn)。采用Master-Slave復(fù)制模式的MySQL架構(gòu),

只能夠?qū)?shù)據(jù)庫(kù)的讀進(jìn)行擴(kuò)展,而對(duì)數(shù)據(jù)庫(kù)的寫(xiě)入操作還是集中在Master上,并且單個(gè)Master掛載的Slave也不可能無(wú)限制多,Slave的數(shù)量受到Master能力和負(fù)載的限制。

因此,需要對(duì)數(shù)據(jù)庫(kù)的吞吐能力進(jìn)行進(jìn)一步的擴(kuò)展,以滿足高并發(fā)訪問(wèn)與海量數(shù)據(jù)存儲(chǔ)的需要!

對(duì)于訪問(wèn)極為頻繁且數(shù)據(jù)量巨大的單表來(lái)說(shuō),我們首先要做的就是減少單表的記錄條數(shù),以便減少數(shù)據(jù)查詢所需要的時(shí)間,提高數(shù)據(jù)庫(kù)的吞吐,這就是所謂的分表!

 在分表之前,首先需要選擇適當(dāng)?shù)姆直聿呗裕沟脭?shù)據(jù)能夠較為均衡地分不到多張表中,并且不影響正常的查詢!

 對(duì)于互聯(lián)網(wǎng)企業(yè)來(lái)說(shuō),大部分?jǐn)?shù)據(jù)都是與用戶關(guān)聯(lián)的,因此,用戶id是最常用的分表字段。因?yàn)榇蟛糠植樵兌夹枰獛嫌脩鬷d,這樣既不影響查詢,又能夠使數(shù)據(jù)較為均衡地

分布到各個(gè)表中(當(dāng)然,有的場(chǎng)景也可能會(huì)出現(xiàn)冷熱數(shù)據(jù)分布不均衡的情況),如下圖:

假設(shè)有一張表記錄用戶購(gòu)買(mǎi)信息的訂單表order,由于order表記錄條數(shù)太多,將被拆分成256張表。

拆分的記錄根據(jù)user_id%256取得對(duì)應(yīng)的表進(jìn)行存儲(chǔ),前臺(tái)應(yīng)用則根據(jù)對(duì)應(yīng)的user_id%256,找到對(duì)應(yīng)訂單存儲(chǔ)的表進(jìn)行訪問(wèn)。

這樣一來(lái),user_id便成為一個(gè)必需的查詢條件,否則將會(huì)由于無(wú)法定位數(shù)據(jù)存儲(chǔ)的表而無(wú)法對(duì)數(shù)據(jù)進(jìn)行訪問(wèn)。

注:拆分后表的數(shù)量一般為2的n次方,就是上面拆分成256張表的由來(lái)!

假設(shè)order表結(jié)構(gòu)如下:

create table order_( 
 order_id bigint(20) primary key auto_increment, 
 user_id bigint(20), 
 user_nick varchar(50), 
 auction_id bigint(20), 
 auction_title bigint(20), 
 price bigint(20), 
 auction_cat varchar(200), 
 seller_id bigint(20), 
 seller_nick varchar(50) 
) 

那么分表以后,假設(shè)user_id = 257,并且auction_id = 100,需要根據(jù)auction_id來(lái)查詢對(duì)應(yīng)的訂單信息,則對(duì)應(yīng)的SQL語(yǔ)句如下:

select * from order_1 where user_id=257 and auction_id = 100; 

其中,order_1是根據(jù)257%256計(jì)算得出,表示分表之后的第一張order表。

二. 分庫(kù)

   場(chǎng)景:分表能夠解決單表數(shù)據(jù)量過(guò)大帶來(lái)的查詢效率下降的問(wèn)題,但是,卻無(wú)法給數(shù)據(jù)庫(kù)的并發(fā)處理能力帶來(lái)質(zhì)的提升。面對(duì)高并發(fā)的讀寫(xiě)訪問(wèn),當(dāng)數(shù)據(jù)庫(kù)master

服務(wù)器無(wú)法承載寫(xiě)操作壓力時(shí),不管如何擴(kuò)展slave服務(wù)器,此時(shí)都沒(méi)有意義了。

因此,我們必須換一種思路,對(duì)數(shù)據(jù)庫(kù)進(jìn)行拆分,從而提高數(shù)據(jù)庫(kù)寫(xiě)入能力,這就是所謂的分庫(kù)!

    與分表策略相似,分庫(kù)可以采用通過(guò)一個(gè)關(guān)鍵字取模的方式,來(lái)對(duì)數(shù)據(jù)訪問(wèn)進(jìn)行路由,如下圖所示:

  還是之前的訂單表,假設(shè)user_id 字段的值為258,將原有的單庫(kù)分為256個(gè)庫(kù),那么應(yīng)用程序?qū)?shù)據(jù)庫(kù)的訪問(wèn)請(qǐng)求將被路由到第二個(gè)庫(kù)(258%256 = 2)。

 

三. 分庫(kù)分表

場(chǎng)景:有時(shí)數(shù)據(jù)庫(kù)可能既面臨著高并發(fā)訪問(wèn)的壓力,又需要面對(duì)海量數(shù)據(jù)的存儲(chǔ)問(wèn)題,這時(shí)需要對(duì)數(shù)據(jù)庫(kù)既采用分表策略,又采用分庫(kù)策略,以便同時(shí)擴(kuò)展系統(tǒng)的

并發(fā)處理能力,以及提升單表的查詢性能,這就是所謂的分庫(kù)分表。

分庫(kù)分表的策略比前面的僅分庫(kù)或者僅分表的策略要更為復(fù)雜,一種分庫(kù)分表的路由策略如下:

    1. 中間變量 = user_id % (分庫(kù)數(shù)量 * 每個(gè)庫(kù)的表數(shù)量)

    2. 庫(kù) = 取整數(shù) (中間變量 / 每個(gè)庫(kù)的表數(shù)量)

    3. 表 = 中間變量 % 每個(gè)庫(kù)的表數(shù)量

同樣采用user_id作為路由字段,首先使用user_id 對(duì)庫(kù)數(shù)量*每個(gè)庫(kù)表的數(shù)量取模,得到一個(gè)中間變量;然后使用中間變量除以每個(gè)庫(kù)表的數(shù)量,取整,便得到

對(duì)應(yīng)的庫(kù);而中間變量對(duì)每個(gè)庫(kù)表的數(shù)量取模,即得到對(duì)應(yīng)的表。

分庫(kù)分表策略詳細(xì)過(guò)程如下:

假設(shè)將原來(lái)的單庫(kù)單表order拆分成256個(gè)庫(kù),每個(gè)庫(kù)包含1024個(gè)表,那么按照前面所提到的路由策略,對(duì)于user_id=262145 的訪問(wèn),路由的計(jì)算過(guò)程如下:

1.  中間變量 = 262145 % (256 * 1024) = 1

2.  庫(kù) = 取整 (1/1024) = 0

3.  表 = 1 % 1024 = 1

這就意味著,對(duì)于user_id=262145 的訂單記錄的查詢和修改,將被路由到第0個(gè)庫(kù)的第1個(gè)order_1表中執(zhí)行!!!

您可能感興趣的文章:
  • 淺談?dòng)唵沃貥?gòu)之 MySQL 分庫(kù)分表實(shí)戰(zhàn)篇
  • MySQL分庫(kù)分表與分區(qū)的入門(mén)指南
  • mysql死鎖和分庫(kù)分表問(wèn)題詳解
  • MySQL 分表分庫(kù)怎么進(jìn)行數(shù)據(jù)切分
  • MySql分表、分庫(kù)、分片和分區(qū)知識(shí)深入詳解
  • MySql分表、分庫(kù)、分片和分區(qū)知識(shí)點(diǎn)介紹
  • MySQL分庫(kù)分表總結(jié)講解
  • mysql數(shù)據(jù)庫(kù)分表分庫(kù)的策略
  • MyBatis實(shí)現(xiàn)Mysql數(shù)據(jù)庫(kù)分庫(kù)分表操作和總結(jié)(推薦)
  • MYSQL數(shù)據(jù)庫(kù)數(shù)據(jù)拆分之分庫(kù)分表總結(jié)
  • Mysql數(shù)據(jù)庫(kù)分庫(kù)和分表方式(常用)
  • MYSQL性能優(yōu)化分享(分庫(kù)分表)
  • MySQL分庫(kù)分表詳情

標(biāo)簽:浙江 山南 安徽 安康 平頂山 那曲 濮陽(yáng) 四川

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《mysql分表分庫(kù)的應(yīng)用場(chǎng)景和設(shè)計(jì)方式》,本文關(guān)鍵詞  mysql,分表,分庫(kù),的,應(yīng),用場(chǎng),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《mysql分表分庫(kù)的應(yīng)用場(chǎng)景和設(shè)計(jì)方式》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于mysql分表分庫(kù)的應(yīng)用場(chǎng)景和設(shè)計(jì)方式的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 鹤庆县| 景德镇市| 牟定县| 绍兴县| 汽车| 久治县| 武义县| 增城市| 西乌| 揭东县| 阳山县| 万山特区| 凌源市| 宜兰市| 东乌珠穆沁旗| 汉沽区| 宿迁市| 伊通| 碌曲县| 司法| 哈尔滨市| 麻阳| 垫江县| 沙雅县| 九江县| 饶阳县| 宁德市| 台中县| 广东省| 泰安市| 大宁县| 九龙坡区| 宁城县| 新干县| 长兴县| 平武县| 奉节县| 丹阳市| 高淳县| 伊川县| 康乐县|