前言

前段開發(fā)項(xiàng)目試就發(fā)現(xiàn),一部分的代碼實(shí)現(xiàn)存在著一些性能上的隱患。但當(dāng)時(shí)忙于趕進(jìn)度和由于卡發(fā)中的不穩(wěn)定因素,想了許多解決方案也沒有機(jī)會(huì)實(shí)施。最近,正好趁個(gè)機(jī)會(huì)進(jìn)行一系列的改進(jìn)。

我在團(tuán)隊(duì)開發(fā)中負(fù)責(zé)開發(fā)服務(wù)器端。所以在編寫業(yè)務(wù)邏輯層時(shí),常常遇到以下這樣的業(yè)務(wù)邏輯:
1. 判斷一個(gè)用戶是否為在自己的好友列表中
2. 判斷一條動(dòng)態(tài)是否已被用戶翻閱
3. 判斷兩個(gè)用戶的標(biāo)簽的匹配度
4. .....等等
這些情況,我之前的方案是采用數(shù)據(jù)庫(kù)來(lái)解決,為每條記錄添加標(biāo)記,需要查詢時(shí)則遍歷返回相應(yīng)的集合。

但是隨著用戶量的不斷增多、各個(gè)用戶之間的關(guān)系不斷地增加、以及用戶使用軟件的一系列行為中這些情況是非常頻繁的,這樣頻繁遍歷大量的記錄的讀操作會(huì)給數(shù)據(jù)庫(kù)帶來(lái)難以承受的壓力。
seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

那么如何需找一種更好的解決方案?
既能減少數(shù)據(jù)庫(kù)需要遍歷的記錄數(shù)量且快速索引,又能用少量的內(nèi)存表示大量的數(shù)據(jù)。
其實(shí)如果我們對(duì)這一類型的業(yè)務(wù)邏輯進(jìn)行抽象,可以得到:本質(zhì)上就是判斷一個(gè)元素是否存在于集合中
所以我們可以采用位數(shù)組,通過(guò)數(shù)組的下標(biāo)能快速地定位某個(gè)元素,用bit表示相應(yīng)的內(nèi)容能夠節(jié)省大量的空間。
seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

但是這樣結(jié)構(gòu)依舊不夠完美,如果數(shù)據(jù)量相對(duì)較少,數(shù)組中會(huì)存在大量的無(wú)用數(shù)據(jù)