我是這樣優化使用者關係查詢的

2021-09-19 09:39:20 字數 1137 閱讀 5950

0x01

我們有乙個業務場景是需要將使用者邀請的下級使用者根據其使用者等級給統計出來(不止統計一級).

現有的解決方案:

mysql中一張使用者表

主要的3個字段:user_id, parent _id,level,

典型的乙個樹形結構.

因為資料量很大,查詢次數很多,所以重算這資料基本上重算一次要花個幾分鐘.

0x02

優化版本1:

假如我將沒所有使用者對應的所有直接下級使用者的id取出,存放到redis中的陣列,像這樣

u:110->[111,112,113,...]

將使用者等級也放到redis中,像這樣

l:110->0

然後通過map的方式取到下級的下級使用者並合併起來,再通過使用者等級進行分組。

users.stream.map(u-> jedis.lrange(0,-1)).flatmap(u-> u).collect(grouppingby(u-> jedis.get("l:" + u)))...

lrange

時間複雜度:o(s+n), s 為偏移量 start , n 為指定區間內元素的數量。`0x03

優化版本2:

使用set存放使用者,通過sunion命令獲取下級id

時間複雜度:o(n), n 是所有給定集合的成員數量之和。

獲取當前下級的使用者**則更簡單了,首先將當前使用者通過cpu並行的方式把set的key計算出來,然後通過sunion將所有的使用者取出來:

private setdownlevelalluser(setusers)
這些使用者的等級都查出來,那就獲取他們的使用者等級並進行分組.

private map> groupuser(setusers)
主要功能都實現了,那麼試試計算8級所花時間

public list> downlevel8userrole(int start_user) ).collect(collectors.tolist());

}

好了,優化完畢了,大神們還有什麼高招,歡迎來指導!!!!!!

如若,我是這樣的女子

纖陌紅塵,安然相遇。一次遇見,一段故事,我用素箋的紙和筆,寫在記憶的思緒裡。喜歡用文字去記錄生活,行走在文字的詩情畫意裡,編織乙個夢想,寫下一段情意。如若,我是這樣的女子。傾城素顏,巧笑嫣然。在心中的桃源裡修籬種菊,植一樹芳香,在黃昏的暗香浮動裡吟詩作畫,品茗香茶。避開塵世的喧囂,遠離世間的紛擾,讓...

做好口碑SEO是轉化使用者的關鍵。

可能很多的朋友聽說過 口碑營銷 但是對於 口碑seo 了解不是很多。那麼本文就為大家簡單分享一下 口碑seo 的 相關知識。口碑seo 企業 建設的時候,除了要做官網 seo,口碑seo也非常的重要。首先,解釋一下 一般怎麼做 口碑seo 口碑seo 是基於seo理念的口碑營銷服務,利用問答平台等 ...

我是這樣賺15倍的

我是這樣賺15倍的 很多人要來向我索取 絕招,我其實也沒有絕招!我現在把一些心得寫在這裡和大家交流。1,我先研究自己的資金,時間。年齡等因素,把操作週期制定為 波段操作 2,然後根據操作週期選擇使用工具 圖表,macd指標。趨勢 我用20日線來判斷 只要20日線連續三天向上走 站在 上面 我就看多!...