青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

前文已經講述,字母全排列是個驚人的數字,即使只遍歷小寫字母和數字6個全排列也有36^6 = 217678233621億多個,7個排列36^7 = 78364164096783億多,8個排列36^8 = 28211099074562.8萬億多個,數字非常驚人。Md5反查是個string-string的映射,16-N個字符的映射,如果考慮hex模式的md5那就是32-N的映射,考慮映射人們最先想到的可能都是數據庫存儲方式,我也首先想到了用數據庫存儲,分別考察了一下sqliteberkeleydb,但測試下來制造數據的速度很慢,sqlite加索引大概只能到5w條記錄/s,不加索引為10w/sberkeleydb用單條模式大概只能到4.5w/s,這個速度已經很慢了,更難于接受的是如果寫1000wsqlite加索引來說不是耗時200s,而是2000s了,也就是說耗時隨單個數據文件記錄的條數增多幾乎成平方模式遞增,而不是簡單的線性遞增,這是很要命的,就算制造1億條數據耗時也是驚人,我的實測中沒有測試過用sqlite制造1000w條以上的數據,在我心目中已經否定了那種模式。雖然我知道很多號稱有多少億條數據的網站其實都是用的數據庫,我不知道他們花了多少時間制造數據,或者幾天,或者幾個月,或者更長時間,反正我對采用普通數據庫模式制造數據完全持否定態度,嵌入式速度太慢,其他數據庫則不光速度慢而且也不適合分布式應用,難道用戶每裝個點還要裝個mysql之類的數據庫,幾乎不可能啊。

下面說說我的方法,我本來第一版本是計劃先不做文件式數據庫的,第一版本來只規劃了做內存數據,充分榨取每一個字節,關于內存數據庫我實現了好幾個版本,下面分別介紹一下:

版本1hash模式

char key[16];做鍵,char pass[n];做內容,由于hash桶占用了一些字節:

                DWORD h, nKeyLen;               //hash鍵值, 字符串長度

                DWORD tag;                           //私有值,默認為0提供給外部使用

                bucket *pListNext;           //hash表雙鏈的下一個節點

                bucket *pListPrev;           //hash表雙鏈的上一個節點

                bucket *pNext;                        //拉鏈的下一個節點

                VALUE second;                        //具體數據

                _Elem first[0];                 //first

用這個hash模式大概存儲一個6個字符的串的md5信息花了50個字節,花費太多,結果自然存不了多少數據,該方案作為第一驗證方案,除了花費內存太多還是個能通過的方案。

 

版本2hash簡化方案

在上述版本基礎上簡化桶設計,拋棄作為標準桶的一些字段,精簡之后如下:

                DWORD h;                               //hash鍵值

                bucket *pNext;                        //拉鏈的下一個節點

                byte nKeyLen;                  //字符串長度

                VALUE second;                        //具體數據

                _Elem first[0];                 //first

該版本存儲一個6個字符的串的md5信息需要31個字節,比版本1少了很多,進步一些了。

方案1和方案2速度都很快。

 

版本3vector方案

考慮到hash占用內存較多,采用vector方案,直接存儲

Char mm[16];

Char pass[n];

存儲一個6個字符的串的md5信息需要22個字節,該方案排序速度太慢,查找速度肯定也比不上版本1和版本2,之后還測試過將vector里面存儲指針,那種模式每個6個字符的串的md5信息占用內存26個,接近hash版本,排序速度比直接存儲數據的好一點,但也還是很慢,總之這個方案作為一個過度方案最終也被放棄了。

 

 

方案4:全文件Hash緊縮方案

以上這些方案的特點是都存儲了char mm[16]; 也就是說存儲部分都有計算出來的md5,經過思考之后覺得可以放棄存儲md5,不存儲md5是個很妙的想法,繼續發揮hash思想,也不保存根據md5計算出來的hash值本身,只將該md5和串的信息關聯到hash值的模所在的索引節點,這樣就將索引節點信息減少到極致:

        size_t coffset;                  //content offset low

        unsigned short a:12;       //切分為12, 4

        unsigned short b:4;         //4,為下一個沖突值的索引序數,如果沒有就為0

        size_t nextindex;             //沖突條目的存儲序號,為0表示沒有沖突

 

使用該索引可讓單文件最多支持內容16T,最多687億記錄,具體實現的時候由于全使用文件所以速度比較慢,速度退化到sqlite之類同一級別了,不過這個設計思想為方案5提供了借鑒,如果跟方案5一樣用大塊內存輔助,速度大概可以上升一個級別,不過由于沒有具體實現,待研究之后再做評估。

 

方案5hash緊縮內存方案

學習方案4的設計思想,考慮僅在內存里面實現一個緊湊型文件,由于只考慮內存可表示的32位范圍,所以簡化索引節點定義如下:

Size_t coffset;          pass相對于內容區首的偏移

Size_t nindex;          沖突節點下一個序,如果為0則表示沒有沖突

內容區存儲更簡單,每個字符串直接保存,最后的0也保存,這樣每個字符串自然分開,對一個6個字符長的串來說,保存一個信息只需要15個字節,真的是省啊,1億個字符串也只要大約1.5g左右硬盤就夠了。此方案雖然很妙,但實現的時候卻費了一些周折,具體做的時候也做過好幾個版本,由于考慮該方案的內容和索引最后都可以直接保存到文件,所以該方案對位置的保存都用的是相對位置,也由于想讓索引節點信息簡單,最初是讓沖突索引采用線性步長跳躍方法,測試之后發現這個方法速度奇慢,而且還有個非常討厭的問題,隨著數據量的增多沖突擴散越來越厲害,耗時非線性的陡峭增長。放棄這個實現之后還是回到了經典的拉鏈法,拉鏈法速度就是快,但拉鏈法處理索引節點雖然容易,但要讓索引信息可直接保存卻要花一些腦子,最后采用先用內存擴展拉鏈,待全部索引構造好之后再把拉鏈出來的部分重新填到原始索引區中的空區,并修正對應索引相對位置。這個方法的精妙之處在于既省空間又有速度,最令人興奮的是采用該方法耗時隨著數據量的增大是線性增長,最后的實現在我的筆記本上大概100w/s1億條記錄從字母組合到最終生成索引文件也只要不到2分鐘的時間,制造了一些數據之后統計了一下,沖突節點比例大概占26%-35%,也就是說有65%以上的數據只要一次hash就直接命中,平均拉鏈長度1.2左右,最長拉鏈10,總體還是很滿意的。

 

原本第一版沒有考慮這個可存儲的方案,但花了幾天就搞定了一個基本可用的存儲方案還是很令人興奮的,雖然該存儲方案還有一些問題沒有徹底解決,但已經有進一步處理的辦法,待下一個相對空閑時間段再仔細研究一下,定會有更簡潔的實現做出來,至于待解決的是什么問題以及如何解決那些問題還是等我代碼寫好了再寫出來吧。

Posted on 2010-10-03 14:18 袁斌 閱讀(204) 評論(0)  編輯 收藏 引用
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一区二区三区精品动漫| 在线观看亚洲| 欧美国产一区二区三区激情无套| 国产一区二区日韩精品| 久久视频在线免费观看| 亚洲免费观看高清在线观看| 国产美女精品一区二区三区| 欧美ab在线视频| 久久av一区二区三区漫画| 亚洲美女尤物影院| 亚洲国内精品在线| 久久国产一区二区| 欧美一区二区三区免费在线看| 亚洲精品乱码久久久久久蜜桃91| 久久亚洲电影| 欧美另类专区| 欧美成人资源网| 一区二区三区视频观看| 日韩午夜在线| 激情欧美亚洲| 国产欧美一级| 久久久亚洲成人| 欧美激情1区| 国产欧美在线看| 91久久精品www人人做人人爽| 一区视频在线看| 夜夜爽夜夜爽精品视频| 久久精品一区二区国产| 久久人体大胆视频| 欧美激情一区三区| 亚洲午夜精品久久久久久app| 欧美在线观看视频一区二区| 久久精品欧美日韩| 国产精品男女猛烈高潮激情| 国产视频久久久久久久| 亚洲国产精品专区久久| 午夜精品免费在线| 亚洲国产综合91精品麻豆| 日韩亚洲在线观看| 久久亚洲精品欧美| 国产日韩精品入口| 国产亚洲成年网址在线观看| 亚洲国产日韩欧美在线99 | 一道本一区二区| 午夜精品久久| 99视频精品在线| 欧美激情中文字幕乱码免费| 亚洲国产精品激情在线观看| 午夜精品久久久久久久男人的天堂| 久久综合九色综合网站| 欧美在线观看网站| 香港成人在线视频| 亚洲亚洲精品三区日韩精品在线视频 | 久久狠狠亚洲综合| 9国产精品视频| 欧美激情精品久久久久久变态| 一色屋精品视频免费看| 欧美亚洲视频在线观看| 久久乐国产精品| 国产亚洲欧洲997久久综合| 欧美一区二区三区的| 欧美日韩在线播放| 亚洲欧美日韩精品久久亚洲区| 亚洲人成在线观看网站高清| 国产精品资源| 欧美有码视频| 猛干欧美女孩| 国外成人在线视频网站| 久久精品二区三区| 久久国产日本精品| 国产精品稀缺呦系列在线| 免费成人黄色片| 国产一区二区三区久久 | 久久久久久久久久久久久女国产乱| 黑人极品videos精品欧美裸| 免费在线观看一区二区| 正在播放亚洲一区| 亚洲国产日韩综合一区| 欧美 日韩 国产 一区| 国产欧美一区二区白浆黑人| 亚洲欧美一区二区三区在线| 欧美在线视频免费观看| 久久一区二区视频| 亚洲国产精品传媒在线观看| 欧美.日韩.国产.一区.二区| 男同欧美伦乱| 99视频+国产日韩欧美| 欧美日韩一区二区高清| 99视频精品免费观看| 亚洲欧美日韩久久精品 | 亚洲欧美日韩国产综合| 国产日韩精品视频一区| 欧美成人资源| 久久免费视频在线| 免费成人毛片| 久久久无码精品亚洲日韩按摩| 亚洲综合精品自拍| 亚洲视频国产视频| 在线亚洲一区二区| aa级大片欧美三级| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美黑人在线观看| 欧美激情1区2区3区| 欧美国产国产综合| 久久午夜电影网| 亚洲免费在线播放| 一区二区三区 在线观看视频| 亚洲国产精品va在线看黑人 | 国产精品99久久久久久人 | 在线看欧美日韩| 亚洲精品一区二区三区福利| 亚洲欧美另类综合偷拍| 午夜一区二区三区在线观看| 亚洲福利一区| 亚洲国产精品电影在线观看| 久久女同互慰一区二区三区| 久久中文字幕一区| 亚洲精选中文字幕| 亚洲激情成人网| 中文av字幕一区| 亚洲午夜视频| 久久精品首页| 亚洲第一天堂av| 亚洲一区尤物| 久久久久国产精品www| 狂野欧美激情性xxxx| 欧美成人精品h版在线观看| 欧美日韩精品一区| 国产精品久久影院| 亚洲国产精品123| 亚洲日本在线视频观看| 欧美日韩福利在线观看| 久久蜜桃av一区精品变态类天堂| 久久国产视频网| 欧美精品一区三区| 国产一区二区按摩在线观看| 伊人成年综合电影网| 亚洲手机成人高清视频| 免费观看国产成人| 亚洲综合精品自拍| 欧美视频在线观看视频极品| 在线免费精品视频| 久久精品亚洲一区| 亚洲香蕉网站| 欧美日韩国产色站一区二区三区| 狠狠入ady亚洲精品经典电影| 一本色道久久综合亚洲91| 老司机aⅴ在线精品导航| 激情综合在线| 欧美成人精品一区| 久久久久在线观看| 亚洲二区三区四区| 你懂的国产精品| 久久视频国产精品免费视频在线| 亚洲午夜精品| 国产精品mm| 亚洲一区精彩视频| 亚洲一区二区三区高清| 国产精品永久免费在线| 久久久999成人| 久久精品视频免费| 黄色成人在线观看| 亚洲欧洲美洲综合色网| 久久久xxx| 一区二区精品在线观看| 一本色道久久| 在线看不卡av| 午夜日韩在线| 一本色道久久综合亚洲精品不 | 欧美三级电影大全| 欧美在线观看天堂一区二区三区| 欧美制服丝袜第一页| 99精品国产99久久久久久福利| 亚洲第一黄色| 国产在线乱码一区二区三区| 亚洲乱码视频| 亚洲国产精品久久久久秋霞影院 | 一区二区电影免费观看| 国产一在线精品一区在线观看| 亚洲精品综合| 亚洲精品乱码久久久久久按摩观| 香蕉国产精品偷在线观看不卡| 日韩一本二本av| 欧美精品v国产精品v日韩精品 | 亚洲欧洲一区二区三区久久| 国产日韩欧美在线播放| 亚洲男人的天堂在线| 亚洲乱码精品一二三四区日韩在线| 亚洲欧美日韩一区| 欧美一区二区三区成人| 欧美日韩在线视频首页| 亚洲高清视频的网址| 亚洲盗摄视频| 欧美理论在线播放| 亚洲一区二区在线视频 | 一区二区免费看| 午夜国产精品影院在线观看| 国产麻豆综合| 久久一区二区三区四区五区| 亚洲高清免费|