文件夾負載均衡-使用bit解決跳位問題
背景
近期一直在做DFS的開發工作,在開發工作中碰到一個」跳目錄」的問題。其實就是遞增目錄 的情況.
具體是這樣的, 首先我們的DFS(名字叫ydb,一下就稱ydb吧。)也就是ydb會對每個配置的掛載點進行格 式化。這個格式化其實就是建立文件夾。文件夾的數量(一下簡稱storerooms)是可配置的,比如你可以配置成64 也可以配置成128或者任何一個你想要的數,但是最大不能超過256(其實是255,0-FF).那麼ydb就會對每個掛 載點進行一次storeromes*storerooms的文件夾建立,最後文件夾的呈現這樣一個情況:
在ydb中,每個文件夾保存的文件數也是可以配置的(配置項為storecount),只要文件 夾內的文件存儲量達到storecount,那麼下一個文件將會存入下一個文件夾,比如當前存 儲在00/03文件夾,那麼下一次就會存儲到00/04,如果storerooms為256,那麼如果當前 文件夾為00/FF,那麼下一次將會01/00(其實就是會跳母文件夾)。
其實就是這個跳文件夾的功能,怎麼樣才能解決問題?
解決方案
為了方便裡面,我們把前面的p1設成母文件夾,p2設成子文件夾,就是這樣p1/p2。
人類的代碼
人類能理解的代碼呢,基本上就是按部就班的解決這個問題,思路是這樣的:
判斷p2+1 是不是等於storerooms,如果沒有,那就+1;
如果等於storerooms,那麼p2歸零,p1+1;
判斷p1+1後是不是等於storerooms,如果不是,那麼正常執行,如果是,那麼p1,p2.
全部歸零,從頭開始;或者根據mp的負載均衡配置,決定存儲的mp。
代碼大概就是這樣的;
if(storerooms==p2+1){p2=;if(storerooms==p1+1){p1=;//insert get mp by storemode
}else{p1+=1;}
}else{p2+=1;
}
這樣勉強還算能看的下去,是吧?但是總歸讓人感覺不是很舒服,層級太多,判斷太多了 ,那麼我們來一種計算機喜歡的方式。
計算機喜歡的代碼
這裡我們使用了一個技巧,就是char和int之間的關係。
如上圖,一個int在內存中是4個byte,一個byte的最大值正好是255.完全符合我們的 storerooms的最大值。那麼也就是說p1,p2是一個int的2個byte(分別為 p2->byte0,p1->byte1,flag->byte2),而且如果我們的最大值 正好設定為255,那麼我們連跳級都不用了,直接就已經內置了(因為p2達到255,再加1 ,正好向p1加1,p2歸0)。所以我們就有如下的演算法:
u32_t total=;
u8_t flag=;
total=p1
total++;
flag=total>>16&0xFF;
p1=total>>8&0xFF;
p2=total&0xFF;
if(c->storerooms==p2){p1++;p2=;
}if(c->storerooms==p1){flag=1;p1=;
}
解釋一下:
首先,我們需要一個u32的臨時變數,所有的數據都是在它內部變的;
flag就是是不是需要重新獲取mp或者說該mp下所有的目錄都放滿的標誌;
把p1和p2根據位置壓入u32的臨時變數,然後直接對這個變數+1;
再把u32的變數分解成flag,p1和p2;
然後判斷母子目錄要不要跳;
最後根據flag,決定是否需要重新確定存儲mp。
公眾號已經開啟留言功能,歡迎大家在技術上和我交流!
如果大家喜歡我的文章,請關注我的微信公眾號!


※提升生活品質的好物Top7
※欲治黃褐斑,必先治其本
※從美債危機看貨幣經濟運行規律
※生活英語in起來
※為什麼很多人臉白凈,脖子卻黑黑的?
TAG:公眾號 |
※剖析關於-ansible配置文件和命令中ad-hoc模式使用參數詳解
※用一個實例講解rename命令中正則表達式的使用
※阻礙你使用 GraphQL 的十個問題
※問答:如何使用小米Wi-Fi放大器?
※蘋果承認使用谷歌雲存儲 iCloud 數據,但確保無隱私問題
※使用shell命令循環處理文件
※為什麼不應該使用Markdown來寫文檔
※Mac和iOS錯誤使用單個字元崩潰應用程序
※如何使用Hex-Rays API有效解決問題
※使用 foremost 恢復已刪除文件
※詳細分析使用Certutil解碼的Office惡意軟體
※thinkphp框架利用MVC模式使用模型查詢資料庫數組的四種寫法
※全文解析!如何使用TF-Hub構建一個簡單的文本分類器
※談談機制與策略分離-使用Latex排版
※Python數據處理實戰——使用Scikit-Learn進行多類文本分類
※如何使用Ensembl資料庫對基因變異進行分類
※Chromebook和安卓平板誰更好用?需求決定使用體驗
※停止使用6位iPhone密碼
※使用Python查找目錄中的重複文件
※iPhone操作系統核心組件源碼泄露,還在使用iOS 9的用戶要小心了