當前位置:
首頁 > 最新 > 文件夾負載均衡-使用bit解決跳位問題

文件夾負載均衡-使用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的用戶要小心了