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

前文已經講述,字母全排列是個驚人的數字,即使只遍歷小寫字母和數字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>
            一区二区三区www| 欧美日韩亚洲一区三区| 亚洲欧美精品伊人久久| 欧美日韩国产综合视频在线| 在线一区观看| 亚洲日本理论电影| 亚洲欧美在线x视频| 亚洲卡通欧美制服中文| 国产午夜一区二区三区| 亚洲自拍另类| 久久中文字幕导航| 久久精品视频播放| 香蕉久久一区二区不卡无毒影院| 六月婷婷久久| 久久婷婷国产综合尤物精品| 亚洲综合日韩在线| 怡红院精品视频| 亚洲免费在线电影| 久久激情中文| 麻豆精品视频| 亚洲国产裸拍裸体视频在线观看乱了| 欧美一区二区三区在线播放| 亚洲免费观看视频| 亚洲人成精品久久久久| 亚洲欧美日韩国产成人| 性欧美1819性猛交| 欧美国产一区二区| 欧美日韩综合一区| 欧美剧在线免费观看网站| 欧美成人一区二区三区在线观看 | 午夜精品免费| 蜜桃av久久久亚洲精品| 久久成人av少妇免费| 美女91精品| 亚洲电影在线免费观看| 午夜一区在线| 欧美.日韩.国产.一区.二区| 日韩图片一区| 久久久久久夜精品精品免费| 免费不卡在线视频| 夜夜夜久久久| 久久久久综合网| 欧美一区在线直播| 国产精品日韩欧美| 在线午夜精品| 亚洲欧洲视频| 久久这里有精品视频| 亚洲免费在线视频一区 二区| 亚洲肉体裸体xxxx137| 久久久久国产精品www| 在线观看日韩av电影| 久久爱www久久做| 欧美在线啊v一区| 99伊人成综合| 欧美啪啪成人vr| 亚洲人永久免费| 久久综合精品国产一区二区三区| 久久视频在线视频| 亚洲精品久久久久久久久久久| 久久婷婷综合激情| 久久青草久久| 亚洲国内自拍| 99re热这里只有精品免费视频| 国产酒店精品激情| 老色鬼久久亚洲一区二区| 久久免费黄色| 亚洲视频在线一区观看| 日韩午夜在线播放| 国产一区二区三区日韩| 亚洲日本中文字幕区| 欧美日韩国产限制| 久久久久久久一区| 免播放器亚洲一区| 99视频一区二区| 欧美体内谢she精2性欧美| 久久亚洲春色中文字幕久久久| 欧美成人免费网站| 久久久久久久999| 麻豆精品精华液| 欧美激情a∨在线视频播放| 国产日韩欧美日韩大片| 亚洲美女色禁图| 亚洲丰满少妇videoshd| 亚洲激情影视| 91久久精品国产91久久性色| 午夜在线观看欧美| 欧美精品一区二区三区视频 | 久久黄色级2电影| 猛干欧美女孩| 久久久久国色av免费看影院| 欧美另类极品videosbest最新版本| 久久精品亚洲| 一本色道综合亚洲| 国产精自产拍久久久久久| 亚洲午夜电影| 欧美一区二区视频网站| 国产精品视频最多的网站| 亚洲精品一区二区在线观看| 久久久噜噜噜久久人人看| 好男人免费精品视频| 小处雏高清一区二区三区| 久久精品国产精品亚洲精品| 国产精品网红福利| 久久免费视频在线观看| 嫩草影视亚洲| 99国产一区二区三精品乱码| 欧美日韩精品一区二区天天拍小说 | 国产在线观看一区| 久久精品成人一区二区三区蜜臀 | 久久av一区二区三区亚洲| 久久亚裔精品欧美| 亚洲一区二区三区免费观看| 欧美国产在线电影| 中文在线资源观看视频网站免费不卡| 久久久久国色av免费看影院| 日韩视频不卡中文| 国产免费成人av| 欧美电影免费| 在线观看欧美一区| 国产美女扒开尿口久久久| 欧美高清在线| 亚洲性感激情| 欧美激情视频在线播放| 午夜视频在线观看一区二区三区| 亚洲福利视频专区| 国产精品私人影院| 在线观看91精品国产入口| 欧美日韩精品综合在线| 久久在线免费| 欧美高清视频一区二区三区在线观看| 久久深夜福利免费观看| 久久久国产91| 亚洲国产精彩中文乱码av在线播放| 久久免费国产精品1| 老司机成人在线视频| aa级大片欧美三级| 亚洲午夜激情| 国产日产精品一区二区三区四区的观看方式| 国产精品久久一区主播| 狠久久av成人天堂| 亚洲精品一区二区三区蜜桃久 | 日韩亚洲成人av在线| 国产精品国产三级国产aⅴ浪潮 | 夜夜躁日日躁狠狠久久88av| 国产精品国产三级国产| 久久久99国产精品免费| 蜜臀av一级做a爰片久久| 可以看av的网站久久看| 可以免费看不卡的av网站| 欧美激情一区二区三区全黄| 亚洲国产欧美一区二区三区同亚洲 | 牛牛影视久久网| 国产日韩欧美一区在线| 在线观看91精品国产入口| 中文无字幕一区二区三区| 老**午夜毛片一区二区三区| 亚洲视频在线观看网站| 亚洲色诱最新| 你懂的亚洲视频| 在线欧美日韩| 久久不射网站| av72成人在线| 欧美成人三级在线| 一区二区三区欧美在线| 亚洲缚视频在线观看| 亚洲欧美久久久| 国产精品网站在线播放| 久久精品一区四区| 日韩一级大片| 欧美日韩和欧美的一区二区| 在线电影院国产精品| 99riav1国产精品视频| 亚洲美女在线视频| 久久一区二区三区四区五区| 亚洲福利视频二区| 中文日韩在线视频| 国产有码在线一区二区视频| 看片网站欧美日韩| 亚洲欧美激情视频在线观看一区二区三区| 久久综合网hezyo| 亚洲欧美国产一区二区三区| 亚洲欧美日本日韩| 国产亚洲欧美日韩日本| 亚洲伦理自拍| 精品69视频一区二区三区| 免费观看成人| 欧美不卡福利| 久久av在线看| 国产精品久久99| 久久精品一区二区三区中文字幕| 久久综合狠狠综合久久综青草| 一区二区欧美在线| 在线观看欧美黄色| 最新国产成人在线观看| 欧美欧美在线| 99热在这里有精品免费| 一本不卡影院| 久久一日本道色综合久久| 久久精品国产欧美亚洲人人爽| 久久视频精品在线|