琼海扯僖物流有限公司

【全國】 集團簡介 關(guān)注我們
幫學院 商標分類表-2024尼斯分類 知識產(chǎn)權(quán)交易

快幫集團

博客網(wǎng)站建設系統(tǒng)開發(fā)方案

2019-04-07

博客網(wǎng)站需求設計與方案設計


1 背景與規(guī)劃


很早就想通過寫博客,對自己的技術(shù)進行反思與沉淀,但是由于拖延癥晚期,一直沒有實際執(zhí)行,而且市面上的各種博客系統(tǒng)創(chuàng)建的博客頁面總是有很多第三方的元素,顯得頁面很繁瑣,我個人是很討厭這些多余的東西,所以就有了自己搭一個博客的念頭。


最初是2016年的時候打算用wordpress來搭建,因為整體框架已經(jīng)成熟,api也很完善。但是用起來需要對這些api很熟悉才能靈活的定制博客,否則就會束手束腳,而且當時編程能力還比較差,對前端代碼幾乎一無所知,寫起來十分困難,加上剛換了工作,就沒有更深入的去了解。這兩年以來用業(yè)余時間斷斷續(xù)續(xù)學習了一些前端技術(shù),而且實際工作中對系統(tǒng)架構(gòu)設計的理解也有了比較大的成長,所以就萌生了從零搭建一個純凈博客系統(tǒng)的念頭,

  

用最簡單粗暴的代碼實現(xiàn)功能。


支持文章的發(fā)布、修改與查看(離線發(fā)布)。


可以增加刪除文章分類(分類分為主分類和副分類,比如主分類:技術(shù),下屬有PHP、MySQLLinux等副分類)。

  

PC瀏覽美觀,暫不考慮移動端的兼容。

  

Google、百度等搜索引擎可搜到

  

兼容移動端,考慮使用bootstrap的響應式布局。

  

線上線下配置分離


對代碼進行模塊化的封裝1. 后端代碼抽象出路由模塊、數(shù)據(jù)庫模塊、網(wǎng)絡請求模塊、http響應模塊。2. 前端代碼抽象出網(wǎng)絡請求模塊。

 

支持評論、訂閱功能

  

支持線上發(fā)布、修改文章(權(quán)限控制)

   

多機部署

   

將文章合成自動生成的js代碼,實現(xiàn)簡單的防爬機制

 

2 技術(shù)選型

 

最終選用的技術(shù)棧如下:

 

前端:Vue

后端:Golanggin框架) + MySQL + Nginx + Linux

 

前端:


其實一年前我對前端技術(shù)還是一無所知,大概20175月份左右,有了一個想做教育APP的想法,直到1712月左右工作的壓力才逐漸小了一些,每天大概有兩小時左右的業(yè)余時間可以搞一些小玩意。


當時考慮到做APP的話,無論Andriod還是iOS如果想做原生APP,學習成本太高,而且要做兩套APP,就選了學習成本最低的微信小程序。小程序一旦寫好,甚至不需要安裝就可以獲得媲美原生APP的功能,還有微信的流量,實在是方便。小程序使用的語言又恰好和htmljs、css很像,于是這才漸漸有了一些了解。


回到這次開發(fā)博客的技術(shù)棧,在經(jīng)過同學還有同事的安利后,前端框架決定使用Vue,輕量級框架,學習成本較低。

 

后端服務開發(fā)語言:


后端服務的話,由于我本身是做了三年的PHP開發(fā),使用PHP開發(fā)博客的話,幾乎沒有什么新的技術(shù)難題,更不用說成長了。PHP屬于動態(tài)腳本語言,所以打算使用一種之前沒用過的靜態(tài)編譯型語言。


近些年來,Golang作為一門新興語言,實在是勁頭火熱,各大公司的許多項目也在向Golang逐漸轉(zhuǎn)型,所以我選擇Golang作為后端開發(fā)語言,雖然可能暫時用不到channel和協(xié)程這些語言特性,但也可以為學習新語言打開一扇大門了。


本來Golang是可以不用框架,直接裸寫服務,不過之前面試羅輯思維的時候,了解過他們框架用的gin,網(wǎng)上查了查發(fā)現(xiàn)這屬于一個輕量級框架,似乎評價還可以,所以就打算拿來用用,正好在博客的第二版可以對框架進行一些二次開發(fā),增加一些技術(shù)難題和工作量。

 

 反向代理服務器

Golang服務器前面我是打算再搭一個Nginx1是為了后續(xù)流量上升后的負載均衡做準備,2是因為jscss等靜態(tài)資源肯定需要一個web服務器提供服務。反正CDN暫時是不考慮了orz

 

數(shù)據(jù)庫:


數(shù)據(jù)庫選擇使用MySQL,畢竟MySQL可以說是當前業(yè)界最流行的關(guān)系型數(shù)據(jù)庫。


MongoDB這種數(shù)據(jù)庫說實話我還沒用過,從網(wǎng)上的資料看起來的應用場景似乎也不太匹配,這次就不用了,等后續(xù)有時間再看看吧。


Redis暫時也就不用了,一開始似乎也不需要用到這種設備,用了反而增加系統(tǒng)復雜度。

 

操作系統(tǒng):


服務器的操作系統(tǒng)不多嗶嗶,就是Linux,其他也不廢話了。

 

3 數(shù)據(jù)庫設計

 

第一版主要實現(xiàn)以下幾個功能:方便的增加、修改;瀏覽數(shù)計數(shù);記錄創(chuàng)建、修改時間;記錄文章分類。

 

建表語句如下:

 

CREATE TABLE `article_detail` (

 `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵自增ID',

 `uuid` varchar(32) NOT NULL DEFAULT '' COMMENT '文章ID',

 `content` text COMMENT '文章內(nèi)容',

 `browser_count` bigint(11) NOT NULL DEFAULT '0' COMMENT '瀏覽數(shù)',

 `create_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '創(chuàng)建時間',

 `main_category_uuid` varchar(32) NOT NULL DEFAULT '' COMMENT '主類別ID',

 `sub_category_uuid` varchar(32) NOT NULL DEFAULT '' COMMENT '副類別ID',

 `title` varchar(255) NOT NULL DEFAULT '' COMMENT '文章標題',

 `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新時間',

 PRIMARY KEY (`id`),

 UNIQUE KEY `idx_uuid` (`uuid`),

 KEY `idx_main_category_uuid` (`main_category_uuid`),

 KEY `idx_sub_category_uuid` (`sub_category_uuid`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

表結(jié)構(gòu)就不多說了,加了三個索引,uuid是每個文章的唯一標記,主、副類別ID的索引是為了在篩選文章列表的時候加快查詢速度用的。加索引在數(shù)據(jù)量夠大時,可以增加查詢速度,具體原理以后會寫文章講解。

 

主副類別表;

建表語句如下:

CREATE TABLE `main_category` (

 `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵自增ID',

 `uuid` varchar(32) NOT NULL DEFAULT '' COMMENT '主類別ID',

 `title` varchar(255) NOT NULL DEFAULT '' COMMENT '類別名稱',

 `create_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '創(chuàng)建時間',

 PRIMARY KEY (`id`),

 UNIQUE KEY `idx_uuid` (`uuid`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

CREATE TABLE `sub_category` (

 `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵自增ID',

 `uuid` varchar(32) NOT NULL DEFAULT '' COMMENT '副類別ID',

 `title` varchar(255) NOT NULL DEFAULT '' COMMENT '類別名稱',

 `create_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '創(chuàng)建時間',

 `main_uuid` varchar(32) NOT NULL DEFAULT '' COMMENT '對應的主類別ID',

 PRIMARY KEY (`id`),

 UNIQUE KEY `idx_uuid` (`uuid`),

 KEY `idx_main_uuid` (`main_uuid`)

) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8

 

  

??其實這么建表我是有點糾結(jié)的,很多地方,為了父子節(jié)點的拓展方便,可能會只建一張表,然后表內(nèi)有一個父節(jié)點ID的字段,就可以實現(xiàn)無限多級的父子關(guān)系,不過我覺著這里沒必要有無限多級的父子關(guān)系,而且建兩張表的話,父子關(guān)系會更清晰。

 

文章內(nèi)容來源于網(wǎng)絡,侵刪

常見問題

京公網(wǎng)安備 11010802036823號

   

京ICP備16051929號

   

增值電信業(yè)務許可證編號:京B2-20190686

   

專利代理機構(gòu)代碼:16087

   

人力資源服務許可證編號:1101082019043

   

代理記賬許可證書編號:DLJZ11010820210015

0
德保县| 桦川县| 凌源市| 璧山县| 湛江市| 上饶市| 新巴尔虎左旗| 松潘县| 盘山县| 阿合奇县| 上犹县| 蒲城县| 邮箱| 洞口县| 高唐县| 漾濞| 阿勒泰市| 石棉县| 泰兴市| 普宁市| 安庆市| 肥乡县| 信阳市| 诸城市| 北流市| 吴忠市| 建阳市| 连江县| 刚察县| 和林格尔县| 株洲县| 宝兴县| 克东县| 石门县| 钦州市| 绥宁县| 宽甸| 莆田市| 合川市| 中超| 麦盖提县|