前言

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

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

但是隨著用戶量的不斷增多、各個用戶之間的關系不斷地增加、以及用戶使用軟件的一系列行為中這些情況是非常頻繁的,這樣頻繁遍歷大量的記錄的讀操作會給數據庫帶來難以承受的壓力。
seo優(yōu)化培訓,網絡推廣培訓,網絡營銷培訓,SEM培訓,網絡優(yōu)化,在線營銷培訓

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

但是這樣結構依舊不夠完美,如果數據量相對較少,數組中會存在大量的無用數據