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