![]()
柴司的辦公室,就設(shè)在北京五環(huán)外一座普普通通的寫(xiě)字樓里。在同一樓層里,還有其他十幾家同樣迷你的團(tuán)隊(duì),包括幾家電商公司。我們天天都能看到他們打包、點(diǎn)貨。
電商的每一筆訂單,都涉及到客戶(hù)的個(gè)人信息,產(chǎn)品信息,訂單信息,庫(kù)存情況,物流信息等等,最終匯總成一個(gè)龐大的數(shù)據(jù)庫(kù)。從客戶(hù)下單,到發(fā)貨、進(jìn)貨,分析營(yíng)銷(xiāo)推廣策略等.....全都要圍繞著這個(gè)數(shù)據(jù)庫(kù)來(lái)。
![]()
尤其在雙11、黑五這樣的營(yíng)銷(xiāo)季,訂單暴漲,數(shù)據(jù)庫(kù)的一個(gè)故障,損失的就是實(shí)實(shí)在在的辛苦錢(qián)。
但當(dāng)多年積累的數(shù)據(jù)擺在面前的時(shí)候,到底應(yīng)該怎么管理、查詢(xún)?難道用Excel嗎?
為了演示這個(gè)問(wèn)題,我們真的生成了100萬(wàn)條數(shù)據(jù),并趁著華為云數(shù)據(jù)庫(kù)雙11的活動(dòng),看看管理100萬(wàn)條數(shù)據(jù)是怎樣一種體驗(yàn)?
視頻版
↓↓ 看完這個(gè)視頻就知道了 ↓↓
↑↑ 信我,真的超級(jí)好看 ↑↑
圖文版
首先,當(dāng)然不能用Excel.....
不少小企業(yè)在訂單數(shù)小,歷史數(shù)據(jù)不多的時(shí)候,會(huì)用本地?cái)?shù)據(jù)庫(kù)。簡(jiǎn)單來(lái)說(shuō),就是自己買(mǎi)服務(wù)器硬件,使用 MySQL 等數(shù)據(jù)庫(kù)軟件,花錢(qián)請(qǐng)專(zhuān)門(mén)的運(yùn)維人員,從頭開(kāi)始搭建一個(gè)數(shù)據(jù)庫(kù)系統(tǒng),并焚香洗手沐浴更衣,祈禱它能7×24小時(shí)穩(wěn)定運(yùn)行。
![]()
數(shù)據(jù)量小的時(shí)候,本地?cái)?shù)據(jù)庫(kù)確實(shí)可以應(yīng)付。但一旦遇到雙11和跨境電商的“黑五”這樣的營(yíng)銷(xiāo)季,業(yè)務(wù)量暴漲,只要一次故障,就可能讓客戶(hù)剛下的訂單,和原本能賺到的錢(qián),直接消失。
但如果花錢(qián)買(mǎi)更強(qiáng)的硬件,又要看著它們?cè)诜歉叻迤诼浠议e置。
所以也有一些企業(yè)會(huì)買(mǎi)虛擬的云服務(wù)器,用來(lái)建立數(shù)據(jù)庫(kù),也就是大家說(shuō)的用ECS自建數(shù)據(jù)庫(kù):這相當(dāng)于把硬件外包了出去,但搭建數(shù)據(jù)庫(kù)的成本,包括運(yùn)維人員的成本,還是得自己負(fù)擔(dān)。哪天運(yùn)維大哥想喝酒擼串,其他人面對(duì)著復(fù)雜的數(shù)據(jù)庫(kù)頁(yè)面,只能一臉懵逼。
![]()
那云數(shù)據(jù)庫(kù)能解決這些問(wèn)題嗎?
我們這次用的華為云提供的基于 MySQL 的關(guān)系型數(shù)據(jù)庫(kù)服務(wù),也就是RDS for MySQL,來(lái)做個(gè)測(cè)試,看看它的性能有多強(qiáng)。
首先,我們要搭一個(gè)電商數(shù)據(jù)庫(kù),并生成100 萬(wàn)條數(shù)據(jù)。數(shù)據(jù)庫(kù)中要有客戶(hù)表,產(chǎn)品表,訂單表,以及付款,物流等等表格。總之,要盡可能模擬一個(gè)電商公司的真實(shí)運(yùn)作。
![]()
之后,我們創(chuàng)建了一個(gè) Python 腳本,用 Faker 庫(kù)隨機(jī)創(chuàng)建了 2 萬(wàn)個(gè)虛擬用戶(hù),以及15 萬(wàn)條訂單,付款和物流數(shù)據(jù)。
在運(yùn)行之后,數(shù)據(jù)庫(kù)中就出現(xiàn)了云南省哈爾濱市的王秀珍,和廣西西安市的丁海燕......這不重要,反正這 2 萬(wàn)名隨機(jī)生成的虛擬用戶(hù),只是我們測(cè)試道具罷了。
產(chǎn)品表里,我們也模擬了售價(jià)823.62元的小說(shuō),和僅售121塊錢(qián)的空調(diào)等爆款商品。
![]()
而且請(qǐng)注意,這些表之間有著復(fù)雜的關(guān)系:比如訂單表里面有customer_id關(guān)聯(lián)到用戶(hù)表里面的用戶(hù)id,付款表里有order_id關(guān)聯(lián)到訂單表。所以這類(lèi)數(shù)據(jù)庫(kù)才叫“關(guān)系型數(shù)據(jù)庫(kù)”。
在創(chuàng)建完這八張表,一共近100萬(wàn)條數(shù)據(jù)之后,我們就可以開(kāi)始試試 RDS for MySQL 到底有幾把刷子了。
我們使用了華為云現(xiàn)在提供免費(fèi)試用的單機(jī)版8核16G配置,只需要點(diǎn)兩下鼠標(biāo),選擇自己需要的配置就能直創(chuàng) 建數(shù)據(jù)庫(kù),既開(kāi)即用,相比于本地自建服務(wù)器的繁流程來(lái)說(shuō)實(shí)在太簡(jiǎn)單了~
![]()
因?yàn)槲覀円呀?jīng)用Python腳本設(shè)置好了數(shù)據(jù),所以進(jìn)入數(shù)據(jù)管理服務(wù)界面之后,能直接開(kāi)始查詢(xún)。
我們先看看過(guò)去一個(gè)月內(nèi)注冊(cè)的用戶(hù),熱熱身:
結(jié)果耗時(shí)1ms......
![]()
那么提高一下難度:我們想看看每個(gè)用戶(hù)的購(gòu)物總花費(fèi),并按照從高到低的順序給他們排序,以便于后續(xù)給土豪推奢侈品,那可以使用聚合函數(shù)來(lái)查詢(xún):
你猜猜這次要多久?
答案是177ms,對(duì)于 RDS for MySQL 來(lái)說(shuō),依然是沒(méi)有流一滴汗。
![]()
那么我們繼續(xù)上難度:這次我們想要查詢(xún)所有客戶(hù)的最近一次訂單以及支付狀態(tài),并按照訂單的時(shí)間順序,排序返回最近的50名下單客戶(hù)。這會(huì)涉及到多張表的JOIN操作,包括客戶(hù)表,訂單表和付款表:
結(jié)果我們看整個(gè)查詢(xún)時(shí)間也僅僅只有68ms,依然相當(dāng)輕松。
![]()
那我們?cè)僭囈恍└鼜?fù)雜的業(yè)務(wù)邏輯:比如我們想查詢(xún)最近一個(gè)月內(nèi),每個(gè)商品類(lèi)別的銷(xiāo)售總額,以便后續(xù)進(jìn)貨。那這次的查詢(xún)時(shí)間是256ms。
![]()
接著我們查詢(xún)了平均訂單金額高于所有訂單平均值的客戶(hù),還是篩選土豪。這要先計(jì)算出所有用戶(hù)的平均訂單金額,然后再?gòu)乃杏脩?hù)中篩選出訂單金額大于這個(gè)數(shù)的人。整個(gè)查詢(xún)時(shí)間也僅僅只有37ms。
![]()
看起來(lái)這些任務(wù)實(shí)在難不倒 RDS for MySQL,我們讓測(cè)試同學(xué)施展畢生所學(xué),來(lái)點(diǎn)狠的考驗(yàn)。
我們想根據(jù)消費(fèi)總額,先找出最有錢(qián)的前 10 名客戶(hù),并定位他們最常購(gòu)買(mǎi)的產(chǎn)品類(lèi)別,方便后續(xù)針對(duì)性地服務(wù)好大客戶(hù)。那這個(gè)查詢(xún)會(huì)涉及多張表大量的JOIN操作。結(jié)果呢,也只花了209ms就完成了查詢(xún)。
![]()
除了照顧大客戶(hù),我們還想看看那些已經(jīng)很久沒(méi)來(lái)下單的非活躍用戶(hù)。我們可以把最近下單時(shí)間超過(guò)六個(gè)月的客戶(hù)定義為非活躍客戶(hù),然后看看他們和活躍用戶(hù)相比,對(duì)業(yè)務(wù)的貢獻(xiàn)有多大區(qū)別。這次的查詢(xún)時(shí)間是235ms。
![]()
在這個(gè)擁有接近100萬(wàn)條數(shù)據(jù)的數(shù)據(jù)庫(kù)里,我們用光了關(guān)于數(shù)據(jù)庫(kù)查詢(xún)的畢生所學(xué)。但所有復(fù)雜的查詢(xún)操作,用時(shí)也從來(lái)沒(méi)有超過(guò)0.5秒,不服不行。
最后我們的測(cè)試同學(xué)瘋狂了:他把之前用的一個(gè)查詢(xún)封裝成一個(gè)函數(shù),然后連續(xù)調(diào)用它 100 次,可以看到即便這么復(fù)雜的查詢(xún)連續(xù)執(zhí)行100次,用時(shí)也僅有18 秒, CPU 利用率只有2% 出頭,也就跟我們筆記本電腦待機(jī)時(shí)的狀態(tài)差不多。
![]()
除了這些查詢(xún)測(cè)試以外,我們也用性能壓測(cè)工具sysbench對(duì)數(shù)據(jù)庫(kù)做了測(cè)試,這是在設(shè)置為64線(xiàn)程的測(cè)試結(jié)果。這里的TPS代表每秒執(zhí)行的事務(wù)量,QPS代表每秒的查詢(xún)數(shù)量。可以看到平均TPS為677,QPS更是達(dá)到1.3萬(wàn)左右,足以看出數(shù)據(jù)庫(kù)對(duì)于高并發(fā)場(chǎng)景的性能優(yōu)勢(shì)。
![]()
而且,我們這里用的只是試用配置,在華為的數(shù)據(jù)庫(kù)性能白皮書(shū)里,還列出了不同CPU和內(nèi)存搭配的性能測(cè)試結(jié)果,在其測(cè)試場(chǎng)景下,TPS和QPS分別能夠?qū)崿F(xiàn)最高6400和12.9萬(wàn)的恐怖成績(jī)。
![]()
當(dāng)然,性能只是云數(shù)據(jù)庫(kù)服務(wù)的一方面而已。對(duì)于數(shù)據(jù)庫(kù)服務(wù)來(lái)說(shuō),穩(wěn)定、安全也至關(guān)重要。
我們可以在 RDS 的云服務(wù)監(jiān)控詳情這里,看到數(shù)據(jù)庫(kù)各項(xiàng)的指標(biāo)監(jiān)控,并及時(shí)收到異常告警。而且還可以根據(jù)業(yè)務(wù)需求,自定義告警規(guī)則。
而且很多時(shí)候,這些告警都用不著你自己來(lái)處理:比如擔(dān)心磁盤(pán)空間不足,那可以在實(shí)例的頁(yè)面選擇磁盤(pán)自動(dòng)擴(kuò)容,自動(dòng)化運(yùn)維,不用勞煩正在喝酒擼串的運(yùn)維大哥。
![]()
這也是RDS for MySQL 相對(duì)于本地?cái)?shù)據(jù)庫(kù)的另一種優(yōu)勢(shì):不管是性能,還是存儲(chǔ)等不夠用,那都可以隨時(shí)隨地根據(jù)實(shí)際需求變更擴(kuò)容,成本低,彈性強(qiáng)。
此外,華為云RDS for MySQL還采取了多部署架構(gòu)和容災(zāi)方案,確保數(shù)據(jù)庫(kù)隨時(shí)可用、且可恢復(fù)到任意時(shí)間節(jié)點(diǎn)。
你可以通過(guò)自動(dòng)備份功能,方便地備份和恢復(fù)數(shù)據(jù),不用擔(dān)心數(shù)據(jù)丟失帶來(lái)意外損失。
所以相比于自建數(shù)據(jù)庫(kù)來(lái)說(shuō),RDS for MySQL 提供的不光是更強(qiáng)的性能,還有更彈性、穩(wěn)定、省心的體驗(yàn)。
![]()
當(dāng)然,一些小團(tuán)隊(duì)可能覺(jué)得 RDS for MySQL 這么強(qiáng)的性能目前還用不上。那可以考慮更輕量級(jí)的 Flexus 云數(shù)據(jù)庫(kù)RDS:
它同樣提供了開(kāi)箱即用的體驗(yàn),也支持?jǐn)?shù)據(jù)擴(kuò)容,備份等功能。性?xún)r(jià)比很高,很適合中小企業(yè)與個(gè)人開(kāi)發(fā)者。
我們也幫你體驗(yàn)過(guò)了,它在性能也很夠用。而且可以無(wú)縫升級(jí)到標(biāo)準(zhǔn)版RDS for MySQL,不用擔(dān)心未來(lái)業(yè)務(wù)增長(zhǎng)之后出現(xiàn)瓶頸——這一點(diǎn)很重要,雖然我們是小團(tuán)隊(duì),但出來(lái)混,誰(shuí)還不懷著一個(gè)做大做強(qiáng)的夢(mèng)想呢?
如果你有需要的話(huà),可以看看華為雙11期間的云數(shù)據(jù)庫(kù)專(zhuān)場(chǎng),趕一波新客專(zhuān)享優(yōu)惠。
![]()
最后,同樣作為一家小團(tuán)隊(duì),我們深知大家都面對(duì)著類(lèi)似的問(wèn)題:我們財(cái)力和人手有限,只能把資源集中在主業(yè)上。其他的事情,最好能交給簡(jiǎn)單、高效、穩(wěn)定、性?xún)r(jià)比高的外部服務(wù)來(lái)解決。而不是投入大量成本,慢慢摸索,從0搭建。
從這個(gè)意義上來(lái)說(shuō),每家小公司,都高度依賴(lài)一個(gè)健全、完善的商業(yè)基礎(chǔ)設(shè)施體系。高速的互聯(lián)網(wǎng)、便捷的物流、廣泛覆蓋的通訊、協(xié)作工具,以及我們今天介紹的,穩(wěn)定、易用、可靠的云服務(wù)等等加在一起,才共同構(gòu)成了這一基礎(chǔ)設(shè)施。
它們就像水和電一樣,略顯枯燥,容易被忽視,但卻真實(shí)地支持了無(wú)數(shù)企業(yè)和員工的發(fā)展與成長(zhǎng)。希望中國(guó)未來(lái)的商業(yè)基礎(chǔ)設(shè)施能越筑越牢。
下期見(jiàn)!
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶(hù)上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.