路由查詢演算法優化心得

2021-05-22 09:34:53 字數 894 閱讀 1157

專案**中有乙個基礎類庫,用於解析client到server的路由配置檔案,同時管理長連線。路由配置檔案格式大致如下所示:

大概含義表示,路由演算法是使用使用者id%1000,然後看落到[begin, end]的對應區間,找到對應的ip和port即是對應的server資訊。

【當前方案】

類庫把路由資訊和長連線物件儲存在vector中,每一條route記錄對應vector中乙個結點,那上面的配置在vector共儲存兩條記錄。

記錄對應的結構體如下所示:

類庫初始化時,每讀到一條route記錄,就初始化乙個stroutenode物件,建立長連線並push_back到vector中。

當上層請求乙個uin對應的server時,首先根據uin%1000得到modid,再逐個和vector中的物件進行比較,看是否在對應的區間中。

【改進方案】

優化前的方案缺點十分明顯,那就是順序查詢,並且每次查詢要進行2次比較,最壞的效率是2o(n),改進方案有很多,我這裡採用的方案是使用空間換時間的方式,底層儲存仍然使用vector,但是查詢使用下標直接索引的方法,以上面的路由配置方案為例,vector中儲存1000條記錄,其中0-499指向同乙個server物件,這樣即不會建立重複的長連線,又可以保證查詢時o(1)的效率。這樣記錄物件的結構體調整如下:

【總結】

改進後效率提公升了很多,效能測試,在vector中記錄數到3000個的情況下,優化後方案的耗時約為優化前的1%,效能提公升十分明顯,由此可見演算法優化對應系統效能提公升的巨大影響,同時也給大家一點建議,一定要注意避免順序查詢,盡可能使用下標索引的方案,現階段機器在的記憶體與cpu相比而言,cpu資源更加寶貴,而記憶體一般不太容易成為瓶頸(快取或檔案系統類除外),對於大的配置還可以使用檔案對映的方式,因此,建議大家對於配置檔案可以採用下標直接索引的方式,即使是使用map也不太推薦。

質數查詢演算法優化

1.最初版 由這個數從2開始除,直到這個數本身都沒有能夠除盡的數,則這個數是質數 2.第一步優化 首先判斷是不是偶數,是偶數則不是質數 基於第一步,將這個數從3開始除。除到這個數開方向下取整,如果沒有可以整除的數,則這個數是質數。3.第二步優化 由所有的合數都可以分解成多個質數想乘的來 步驟 首先判...

mysql 優化心得

mysql的優花其實是個艱難的工作,要搞的東西太多了,之前在 中摘了一些原則,最近對乙個100多萬條資料的表做優花時,有如下心得 1 取必須要用的資料 這裡對於select 語句中只選有用的字段,這樣的原則就肯定人人都知道的了。但關鍵的是,要從全域性考慮問題,比如我的這個應用 是每個新聞網頁的跟帖,...

oracle優化心得

資料庫優化oracle9i 很多的時侯,做oracle dba的我們,當應用管理員向我們通告現在應用很慢 資料庫很慢的時侯,我們到資料庫時做幾個示例的select也發現同樣的問題時,有些時侯我們會無從下手,因為我們認為資料庫的各種命種率都是滿足oracle文件的建議。實際上如今的優化己經向優化等待 ...