php 對(duì) mysql 數(shù)據(jù)庫(kù)遍歷的問(wèn)題

科技 未結(jié) 6 1646
枳杦
枳杦 2023-04-09 02:12

一個(gè)關(guān)于代理分銷系統(tǒng)的算法優(yōu)化問(wèn)題

比如,代理級(jí)別分:金、銀、銅三級(jí),我現(xiàn)在是金牌代理A,同時(shí)我發(fā)展了銀牌代理B、C、D,銀牌代理b發(fā)展了銅牌代理E、F,如圖:
A的下級(jí)代理列表
╦═══════

╠═ b
║ ╠══ e
║ ╠══ f
╠═ c
╠═ d
我現(xiàn)在用程序作出上面這樣一張例圖方法是:(PHP+MYSQL)
先搜索所有上級(jí)代理為A的代理,
例如找到了B代理,再搜索所有上級(jí)代理為B的代理,本次搜索完畢。
再搜索C代理 …………
以此類推。

問(wèn)題:

現(xiàn)在代理數(shù)據(jù)庫(kù)中有三十萬(wàn)條記錄,每個(gè)代理都可以在代理分銷系統(tǒng)中查看自己的下級(jí)代理樹,按照以上方法:
每次搜索都要很久,如果某個(gè)代理的下級(jí)代理有1000個(gè),那就根本顯示不出來(lái)。


我想到的解決辦法是用一個(gè)數(shù)組存儲(chǔ)所有用戶關(guān)系,然后將這個(gè)數(shù)組存儲(chǔ)為文件,對(duì)每次添加刪除用戶都對(duì)這個(gè)數(shù)組同時(shí)進(jìn)行更新操作,然后把想要的數(shù)據(jù)從數(shù)組遍歷出來(lái),然后直接到數(shù)據(jù)庫(kù)中執(zhí)行一個(gè)select就可以了。。這種辦法可行么,還有什么其他解決方案么


遍歷

想從上層會(huì)員找其下的底層會(huì)員,會(huì)用到遍歷,目測(cè)是三叉樹的層次遍歷,這個(gè)算法,目測(cè)會(huì)對(duì)數(shù)據(jù)庫(kù)進(jìn)行好多好多次的查詢。。。太耗費(fèi)資源了,有沒(méi)有什么替代方案?緩存?redis?

6條回答
  •  360U3208140907
    2023-04-09 02:42

    如果更新不是很頻繁的話,使用緩存(數(shù)據(jù)量30萬(wàn),估計(jì)只能緩存1~2級(jí)了),不用每次用SQL查詢。

提交回復(fù)