網(wǎng)站開發(fā) 騰云網(wǎng)絡(luò)步驟及步驟(一)——數(shù)據(jù)庫(kù)原型設(shè)計(jì)網(wǎng)站前端開發(fā)
2022-07-03
本期我們來(lái)聊聊騰云網(wǎng)。在開始討論騰云網(wǎng)之前,我們首先要明確一點(diǎn)。數(shù)據(jù)庫(kù)是大部分業(yè)務(wù)系統(tǒng)的核心,騰云網(wǎng)絡(luò)也是一個(gè)非常重要的設(shè)計(jì)。
不過(guò),這并不代表騰云網(wǎng)是一件很困難的事情。對(duì)于我們的技術(shù)支持團(tuán)隊(duì),我們一直堅(jiān)持后端開發(fā)者直接設(shè)計(jì)數(shù)據(jù)庫(kù)(無(wú)論開發(fā)者經(jīng)驗(yàn)如何),而不是讓有經(jīng)驗(yàn)的開發(fā)者做騰云網(wǎng)絡(luò)的工作(有經(jīng)驗(yàn)的開發(fā)者做好審查工作)。
這是因?yàn)椋?/p>
1、騰云網(wǎng)絡(luò)不需要一次性全部設(shè)計(jì)好。在開發(fā)過(guò)程中,不可避免地要對(duì)數(shù)據(jù)庫(kù)進(jìn)行調(diào)整。只要數(shù)據(jù)庫(kù)的骨架沒(méi)有問(wèn)題(有經(jīng)驗(yàn)的開發(fā)者可以做好),比如添加或刪除字段、添加中間表、添加視圖等不會(huì)造成太大影響。
2、騰云網(wǎng)絡(luò)是一些后端需求(通用業(yè)務(wù)系統(tǒng))的改造過(guò)程。正如原型是前端部分的需求轉(zhuǎn)化過(guò)程一樣,后端功能(通用業(yè)務(wù)系統(tǒng))的結(jié)構(gòu)可以通過(guò)數(shù)據(jù)庫(kù)分庫(kù)分表來(lái)粗略描述。騰云網(wǎng)絡(luò)),難免會(huì)出現(xiàn)無(wú)法區(qū)分功能結(jié)構(gòu)的情況,只能根據(jù)頁(yè)面原型猜測(cè)需要哪些接口。這種看一個(gè)功能,開發(fā)一個(gè)接口的工作模式,無(wú)論代碼怎么寫,大部分情況下都會(huì)出現(xiàn)開發(fā)進(jìn)度不可控、開發(fā)冗余接口、接口遺漏等問(wèn)題。
所以,騰云網(wǎng)絡(luò)是每個(gè)后端開發(fā)者必須掌握的技能,而騰云網(wǎng)絡(luò)并不難。我們不考慮一下子把騰云網(wǎng)絡(luò)完全拿出來(lái),只需要設(shè)計(jì)好骨架。是(在設(shè)計(jì)審查和后續(xù)開發(fā)期間進(jìn)行了調(diào)整)。
我們推薦的騰云網(wǎng)絡(luò)步驟分為以下3個(gè)步驟:
子庫(kù)(由架構(gòu)師或技術(shù)負(fù)責(zé)人完成)
子表(由開發(fā)者完成)
添加冗余字段、視圖(由開發(fā)者完成)
1、子庫(kù)
經(jīng)??吹接行┫到y(tǒng)只有一個(gè)數(shù)據(jù)庫(kù),而這個(gè)數(shù)據(jù)庫(kù)里有幾十萬(wàn)張表。我相信網(wǎng)站開發(fā),無(wú)論E-R圖紙多么詳細(xì),描述寫得多么好,沒(méi)有人能夠弄清楚它們之間的關(guān)系。這無(wú)疑是系統(tǒng)越來(lái)越差的主要原因之一,也是微服務(wù)無(wú)法發(fā)揮應(yīng)有作用的原因之一(使用同一個(gè)數(shù)據(jù)庫(kù),后端服務(wù)擴(kuò)展更多服務(wù)器也沒(méi)用)。
所以分庫(kù)的目的:
分庫(kù)的原理很簡(jiǎn)單。一般來(lái)說(shuō),每個(gè)子系統(tǒng)對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù)。比如用戶系統(tǒng)、博客系統(tǒng)、商城系統(tǒng)、流程系統(tǒng)都有自己獨(dú)立的數(shù)據(jù)庫(kù),系統(tǒng)劃分更多是基于業(yè)務(wù)架構(gòu)。業(yè)務(wù)架構(gòu)設(shè)計(jì)請(qǐng)參考我們之前的業(yè)務(wù)架構(gòu)視頻。此外網(wǎng)站開發(fā),對(duì)于一些數(shù)據(jù)密切相關(guān)的子系統(tǒng),例如優(yōu)惠券和資金系統(tǒng),最好將它們組合成一個(gè)系統(tǒng)。
當(dāng)然,數(shù)據(jù)庫(kù)獨(dú)立后會(huì)出現(xiàn)一些問(wèn)題。對(duì)于大部分場(chǎng)景,通過(guò)前端調(diào)用多個(gè)接口進(jìn)行集成就足夠了網(wǎng)站制作,但是對(duì)于一些需要強(qiáng)數(shù)據(jù)一致性的場(chǎng)景,就會(huì)涉及到數(shù)據(jù)庫(kù)分布式庫(kù)。 ,關(guān)于數(shù)據(jù)庫(kù)分布式事務(wù),下期會(huì)詳細(xì)介紹。
2、子表
子表更多的是根據(jù)當(dāng)前模塊的業(yè)務(wù)功能來(lái)確定。以博客系統(tǒng)為例,主要的業(yè)務(wù)邏輯是用戶寫博客,管理員審核后,其他用戶可以查看網(wǎng)站優(yōu)化,也可以登錄博客。在下方評(píng)論以創(chuàng)建相應(yīng)的四個(gè)表。但是,由于審計(jì)其實(shí)是一種狀態(tài),可以用一個(gè)字段來(lái)記錄,所以只需要兩張表,一張是博客表,一張是評(píng)論表。
定義完主表后,需要查看本系統(tǒng)的所有功能點(diǎn),看是否需要添加額外的表。如果發(fā)現(xiàn)博客系統(tǒng)中有收藏功能,可以考慮添加收藏表。
表劃分完成后,還要分析表之間是否存在多對(duì)多關(guān)系。如果博客有標(biāo)簽分類,那么博客和標(biāo)簽是多對(duì)多的關(guān)系。
這種多對(duì)多關(guān)系有兩種解決方案:
分表完成后,大致勾勒出一個(gè)模塊的功能結(jié)構(gòu)。開發(fā)過(guò)程中,哪些功能是主要的,哪些是次要的也一目了然,讓開發(fā)計(jì)劃更加清晰,前后端聯(lián)調(diào)也一目了然??梢苑蛛A段完成。分表后,單個(gè)數(shù)據(jù)庫(kù)的結(jié)構(gòu)基本清晰,但是對(duì)于一些特殊的功能,比如個(gè)人中心的評(píng)論列表,除了顯示評(píng)論內(nèi)容外,還需要顯示博客。
3、添加冗余字段和視圖
此時(shí)需要考慮添加冗余字段,即博客名稱也記錄在評(píng)論表中(已經(jīng)記錄在博客表中)當(dāng)然冗余字段的更新是比較麻煩,所以冗余字段適合一些更新非常不頻繁或者不允許更新的字段。
當(dāng)然,除了冗余字段,SQL語(yǔ)句也可以用來(lái)實(shí)現(xiàn)夸張的表查詢。對(duì)于這種夸張的表查詢,我們推薦使用視圖。也就是說(shuō),視圖是保存在數(shù)據(jù)庫(kù)中的一條SQL查詢語(yǔ)句,一個(gè)視圖可以簡(jiǎn)化后端SQL語(yǔ)句的復(fù)雜度,也可以通過(guò)查看哪些接口使用視圖,就可以知道自己進(jìn)行了跨表查詢(方便后續(xù)性能調(diào)優(yōu))。
例如,熱門博客需要按受歡迎程度進(jìn)行排名,而受歡迎程度是通過(guò)將收藏、點(diǎn)贊和評(píng)論的數(shù)量乘以各自的權(quán)重來(lái)確定的。然后可以做一個(gè)視圖創(chuàng)建博客熱度虛擬表,可以用簡(jiǎn)單的SQL查詢前3的博客(實(shí)際項(xiàng)目需要加緩存),也可以用簡(jiǎn)單的SQL查詢某個(gè)博客類別下的前3篇博客(實(shí)際項(xiàng)目需要添加緩存)。
視圖除了上述好處外,還有一個(gè)好處:跨數(shù)據(jù)庫(kù)查詢(雖然可以直接使用SQL語(yǔ)句完成,但是視圖可以更規(guī)律),如果多個(gè)數(shù)據(jù)庫(kù)在同一個(gè)服務(wù)中, view 可以查詢數(shù)據(jù)庫(kù)(普通SQL語(yǔ)句也可以)。如果數(shù)據(jù)庫(kù)在不同的服務(wù)(.7以后),也可以通過(guò)數(shù)據(jù)同步來(lái)同步要查詢的數(shù)據(jù),然后通過(guò)視圖查詢數(shù)據(jù)庫(kù)。當(dāng)然,這種方式一般不常用于大型網(wǎng)站,因?yàn)槿绻綌?shù)據(jù)庫(kù)的數(shù)據(jù)量太大或更新頻率高,往往得不償失。
命名約定
我們推薦的數(shù)據(jù)庫(kù)命名約定是數(shù)據(jù)庫(kù)的名稱與系統(tǒng)名稱相同。表名以 t_ 開頭,視圖以 v_ 開頭。如果在表中是唯一的,就用表名_開頭,如果是外鍵就用它原來(lái)的名字,視圖不改字段名。這樣即使沒(méi)有E-R圖,也可以通過(guò)字段名來(lái)判斷表與表的關(guān)系。這可能看起來(lái)很簡(jiǎn)單,但它可以防止許多不必要的錯(cuò)誤。
總結(jié)
騰云網(wǎng)絡(luò)當(dāng)然還包括索引、具體字段、字段類型和長(zhǎng)度等,不過(guò)這些問(wèn)題其實(shí)可以在實(shí)際開發(fā)過(guò)程中加入。一開始就考慮這些問(wèn)題太仔細(xì)是浪費(fèi)時(shí)間(甲方或業(yè)務(wù)部門要求除外)。
以上是我們推薦的騰云網(wǎng)絡(luò)流程。當(dāng)然,騰云網(wǎng)絡(luò)從來(lái)沒(méi)有絕對(duì)的最優(yōu)解。騰云網(wǎng)絡(luò)是否相對(duì)合理,取決于對(duì)業(yè)務(wù)功能的理解和項(xiàng)目經(jīng)驗(yàn)。
但是不要擔(dān)心做好它,因?yàn)槿绻悴蛔鏊?,你永遠(yuǎn)不會(huì)做好它。只要你做幾次,被有經(jīng)驗(yàn)的人審核幾次,相信你的騰云網(wǎng)絡(luò)會(huì)越來(lái)越成熟。