一種奧運門票網路系統設計方案

2021-08-22 12:32:34 字數 1550 閱讀 1776

這些天來,很多網友給我來信,表達了他們的願望,就是讓我給出乙份設計方案。我本庸才,不敢在眾多

專家學者面前班門弄大斧,但對網友的熱情難卻,湊個熱鬧,也吼兩聲自己的醜陋看法,純屬瞎寫,別見笑。

但我還是那句話,在高效能系統不宜使用資料庫,只在資料管理中才會使用。

由於我對該系統的具體需求不清楚,只能假設一些需求,但基本思路都是一樣的。

首先,由後台系統生成乙個靜態頁面,上面標註了票的資訊,比如那些有下拉框的地方,決不能通過資料庫

查詢出來,而是直接生成靜態頁面。頁面上的所有的選項都是這樣的方案。保證大家在開啟網頁時,

不會運算元據庫。

例如:某個列表是這樣的

id info

0 羽毛球

1 兵乓球

2 足球

3 籃球

4 拳擊

然後在中間伺服器的地方開闢乙個大陣列。如下構成:

int info[5];

0 2000

1 1000

2 20000

3 10000

4 2000

0表示陣列下標,2000表示0代表的羽毛球的票數。當執行緒處理乙個請求時,會判斷報文的包頭的協議型別,只要該

協議型別表示「我要訂羽毛球票」1張,立刻將0對應的2000減1變成1999,如果另外的1999個同樣的報文

傳送過來,第2001個就會直接返回失敗,表示羽毛球票已經定完。

接著,上述的報文會再根據「比賽專案」分發到對應的伺服器上,可以用tcp協議,

例如ip指向192.168.128.111,port:9000的羽毛球資料儲存伺服器

在後台羽毛球資料儲存伺服器當中,為比賽專案,如羽毛球單建乙個我稱之為「陣列鍊錶」的資料結構。

如下結構

若干執行緒同時操作以下結構。p*為指向「羽毛球資訊」的指標。

0 p*

1 p*

2 p*

3 p*

4 p*

5 p*

6 p*

7 p*

8 p*

9 p*

隨機選擇乙個陣列下標,把記錄連線到後面的指標上,使每個陣列下表後面都接乙個鍊錶。其實完全

可以用乙個鍊錶,只是這樣做會減少執行緒同步帶來的效能瓶頸(但是每個小一些的鍊錶不能避免執行緒同步)。

如果設計時間充足,我覺得應該還有更好的演算法。

這樣,關於羽毛球的訂票報文就全部被奧運門票系統接收了。接下來,羽毛球資料儲存伺服器就不會接收

報文了,可以從容的向資料庫插入資料了,這一點可以人工控制,也可以批處理,總而言之就好辦了。

最後,資料庫歸檔以後,通過郵件向每個購買者確認即可。

建議類似羽毛球,兵乓球,籃球,110公尺欄熱門專案單建伺服器,其他像拳擊等專案可以一起放到乙個

伺服器上。

建議後台資料儲存的分布以專案來分,這樣便於評估壓力和效能需求。在上面沒有用到任何資料庫技術,用

單獨設計的演算法和資料儲存結構即可實現高效能。這也是我一直強調的不要在高效能系統中使用資料庫的原因。

在高效能系統設計當中,一般情況下真是很少使用資料庫的。這個設計是隨便想到的,如果給足夠時間,

應該能設計出更好的系統。

DBMS一種設計方案(原)

一 整體架構 乙個資料 採用資料集 索引集分開的儲存方式,分別為資料檔案和索引檔案,有可能還需要乙個關鍵字檔案。資料 必須指定乙個主關鍵字,主關鍵字在資料表內不允許重複。資料 還可以有若干索引,索引可以重複。只有第乙個索引 主索引 能影響資料檔案內的資料分布,所有相同主索引的資料會存放於同乙個資料檔...

離線應用的一種設計方案

程式快取比較容易設定,只要寫乙個.manifest檔案,再把它寫到html元素的屬性就可以了。我遇到的一些問題 因此對離線應用而言,我認為程式快取的作用就是儲存靜態檔案。據說瀏覽器限制本地儲存為5m,所以就不考慮了。主要是利用瀏覽器支援的indexeddb來完成資料操作。方式1的測試成本要比方式2高...

iOS中一種網路層與業務層的設計方案

提起ios架構,免不了要談到現在很火的mvvm和mvcs,但萬變不離其宗,這兩個概念其實也都基於mvc,它們的主要思想簡而言之就是mvc中的c controller裡面的 太多,在專案不斷新增功能逐漸變大時,不利於開發也不利於維護.xbbusinessmanager 戳這裡 僅僅舉例個人入行兩年來所...