朋友圈的基本數據結構設計是怎樣的?既能做到完美閱讀權限設置,又能兼顧性能?
解決這種性能問題一般的思路就是把需要大計算量的過程分散到平時零散的時間去做。在這里的思路就是:平時就把每個用戶需要的timeline數據按照權限設置准備好,等到用的時候(刷新朋友圈)就直接讀取准備好的內容。那么答案就出來了:除了存儲一份上面講到的文字,圖片等基本信息外,還需要給每個用戶存儲一份timeline數據,注意,是每個用戶一份。當然,這里的“每份”不需要存儲完整信息,只需要存儲消息的ID和時間(可能需要)。每個人刷新自己的朋友圈時,讀取自己的那份數據就行了,既不用去消息池子里面篩選,也不用判斷用戶權限。
那是怎么實現權限控制呢?
當一個用戶發布一條消息時會按照上面講的標簽設置相關的權限,服務器就會給每個有權限接收這條消息的用戶的timeline中寫入這條消息。也就是在用戶發布的這一刻,就做好了權限安排,而不是等到讀取的時候。這樣就自然減少了讀取的時候的計算量,提高了效率。

