Java+Mybatis如何實(shí)現(xiàn)電商系統(tǒng)分表查詢

今天就跟大家聊聊有關(guān)Java + Mybatis如何實(shí)現(xiàn)電商系統(tǒng)分表查詢,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)錫山免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了1000多家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

在開始之前,我先啰嗦一點(diǎn)理論知識(shí)。說(shuō)實(shí)話,我們每個(gè)系統(tǒng)并不是一上來(lái)就開始分表,分庫(kù)。而是在數(shù)據(jù)量達(dá)到一定程度,且各種優(yōu)化手段都使用過(guò)后,仍然存在系統(tǒng)瓶頸的時(shí)候,才使用分表。因?yàn)榉直頃?huì)加大業(yè)務(wù)的復(fù)雜程度,通常都是不得已而為之的操作。

一般的,MySQL 在單表達(dá)到千萬(wàn)數(shù)據(jù)量同時(shí)還在持續(xù)增長(zhǎng)的時(shí)候,就需要想辦法優(yōu)化設(shè)計(jì)和實(shí)現(xiàn)了。通常我們的優(yōu)化手段有下面 6 個(gè)步驟:

第一優(yōu)化你的 SQL 和索引,這種效果立竿見影。采用這種優(yōu)化方式后,若還存在性能瓶頸,可以采用第二種架構(gòu)設(shè)計(jì)。

第二加緩存,memcached、redis 等。針對(duì)熱點(diǎn)數(shù)據(jù)做優(yōu)化,緩存是現(xiàn)在系統(tǒng)必須的且可靠的一種手段。

第三以上都做了后,還是慢,就做主從復(fù)制或主主復(fù)制,讀寫分離,可以在應(yīng)用層做,效率高,也可以采用第三方工具。

Java + Mybatis如何實(shí)現(xiàn)電商系統(tǒng)分表查詢  

第四如果以上都做了還是慢,不要想著去做切分,mysql 自帶分區(qū)表,先試試這個(gè),對(duì)你的應(yīng)用是透明的,無(wú)需更改代碼。但是 sql 語(yǔ)句是需要針對(duì)分區(qū)表做優(yōu)化的,sql 條件中要帶上分區(qū)條件的列,從而使查詢定位到少量的分區(qū)上,否則就會(huì)掃描全部分區(qū),另外分區(qū)表還有一些坑。這一條對(duì)數(shù)據(jù)庫(kù)的知識(shí)要求比較高,如果公司沒有配備 DBA,或者技術(shù)儲(chǔ)備不足的情況下,要慎用。

第五如果以上都做了,那就先做垂直拆分,其實(shí)就是根據(jù)你模塊的耦合度,將一個(gè)大的系統(tǒng)分為多個(gè)小的系統(tǒng),也就是分布式系統(tǒng)。這是現(xiàn)在各大系統(tǒng)熱衷采用的方案,可以優(yōu)先考慮。

第六才是水平切分,針對(duì)數(shù)據(jù)量大的表,這一步最麻煩,最能考驗(yàn)技術(shù)水平,要選擇一個(gè)合理的 sharding key。為了有好的查詢效率,表結(jié)構(gòu)也要改動(dòng),做一定的冗余,應(yīng)用也要改,sql 中盡量帶 sharding key,將數(shù)據(jù)定位到限定的表上去查,而不是掃描全部的表。

針對(duì) mysql 數(shù)據(jù)庫(kù)一般都是按照這個(gè)步驟去演化的,成本也是由低到高。好了,現(xiàn)在介紹完這些知識(shí)后,我就來(lái)給大家一個(gè)簡(jiǎn)單的分表實(shí)現(xiàn)。

假設(shè)我們現(xiàn)在有 1000 萬(wàn)數(shù)據(jù),項(xiàng)目要求需要分 2 個(gè)表。比如,xttblog 表會(huì)被分成 xttblog_0 和 xttblog_1。注意,我這里只是舉例,實(shí)際業(yè)務(wù)中,會(huì)根據(jù)具體的數(shù)據(jù)量,和增長(zhǎng)趨勢(shì)進(jìn)行水平分表,分表數(shù)量也將遠(yuǎn)遠(yuǎn)的超過(guò)幾十個(gè)。

Java + Mybatis如何實(shí)現(xiàn)電商系統(tǒng)分表查詢  

根據(jù)上面的說(shuō)明,我需要對(duì) 1000 萬(wàn)條數(shù)據(jù)分成兩個(gè)表,那我的做法就是,將利用 xttblog 表的自動(dòng)增長(zhǎng) ID 來(lái)實(shí)現(xiàn)分表。id%2 == 0 的操作表 xttblog_0,同理 Id%2 == 1 的操作表 xttblog_1。

你理解了這個(gè)之后,再來(lái)看看我們 MyBatis 對(duì)分表查詢的相關(guān)代碼吧。

Java + Mybatis如何實(shí)現(xiàn)電商系統(tǒng)分表查詢

這個(gè) SQL 雖然很簡(jiǎn)單,但分表會(huì)影響到其他一些業(yè)務(wù)的復(fù)雜度。

現(xiàn)在,假設(shè)我們要查詢 1000001 的數(shù)據(jù),那么我們的實(shí)際執(zhí)行的 SQL 就如下面所示:

Java + Mybatis如何實(shí)現(xiàn)電商系統(tǒng)分表查詢

看完上述內(nèi)容,你們對(duì)Java + Mybatis如何實(shí)現(xiàn)電商系統(tǒng)分表查詢有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

本文題目:Java+Mybatis如何實(shí)現(xiàn)電商系統(tǒng)分表查詢
轉(zhuǎn)載來(lái)于:http://muchs.cn/article30/ghioso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、品牌網(wǎng)站建設(shè)企業(yè)網(wǎng)站制作、軟件開發(fā)網(wǎng)站改版、網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化