哆啦的時(shí)光機(jī)
2019-02-20 16:25:32
論壇每個(gè)帖子都有一個(gè)id號(hào),從1開始增長,每新增一個(gè)帖子,id增1假設(shè)帖子有三項(xiàng),id,文本和時(shí)間
在后端,設(shè)計(jì)一個(gè)類Article,類里就有三項(xiàng):id, text, time
現(xiàn)在這個(gè)id增長有兩種思路:1) 利用數(shù)據(jù)庫自增,id設(shè)為主鍵,啟動(dòng)數(shù)據(jù)庫自增2) 頁面帖子前,利用ajax請(qǐng)求,取得數(shù)據(jù)庫當(dāng)前最大號(hào)maxid,然后帖子的id設(shè)為maxid+1
2)的思路在高并發(fā)的時(shí)候有問題,有可能多人同時(shí)發(fā)帖從而ajax請(qǐng)求獲得同樣的id,然后他們的帖子都是id+1
但是如果是1),那么提交帖子的時(shí)候,帖子數(shù)據(jù)只有兩項(xiàng),text和time這樣的話,后端可能就要設(shè)計(jì)兩個(gè)類一個(gè)Article有三項(xiàng),id, text, time,另一個(gè)只ArticleWithoutID有兩項(xiàng) text, time因?yàn)榍岸擞脩羧绻榭刺樱敲春蠖司鸵祷豬d, text, time三項(xiàng)了但是要設(shè)計(jì)兩個(gè)類,又感覺怪怪的
大家怎么看?
3 回答

手掌心
TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊
肯定是在服務(wù)器端自增,不然可能沖突的。
你可能會(huì)問,我都取了最大的為什么還會(huì)沖突。如果你知道為什么數(shù)據(jù)庫會(huì)有鎖這個(gè)概念,你就不會(huì)在這里迷茫了。
并發(fā)大的時(shí)候,可能是同時(shí)取得的最大ID,提交時(shí),一個(gè)先一個(gè)后,就會(huì)導(dǎo)致一個(gè)提交失敗。
另外前端數(shù)據(jù)可以偽造,作為程序員對(duì)前端的數(shù)據(jù)一定要持懷疑態(tài)度,要驗(yàn)證

HUWWW
TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個(gè)贊
關(guān)系型數(shù)據(jù)庫都可以設(shè)置自增類型的字段吧,錄入數(shù)據(jù)的時(shí)候不需要指定,數(shù)據(jù)庫自己處理自增id
添加回答
舉報(bào)
0/150
提交
取消