91人妻论坛精品,99热精品国产三级在线观看,久久99精品久久久久久久野外,免费黄片wwww,日本黄色网站wwwxxⅹ,五月丁香婷婷激情综合网,欧美日韩国产精品综合

三穗縣政務(wù)oa系統(tǒng):市轄區(qū)政府機(jī)關(guān)oa中解密hash算法:散列表、布隆過(guò)濾器和分布式一致性hash的原理與應(yīng)用

時(shí)間:2025-02-06 20:34:45 信創(chuàng)OA資訊首頁(yè) 韓城市政務(wù)OA

PHPOA!國(guó)內(nèi)首家專業(yè)OA辦公軟件、OA系統(tǒng)、政務(wù)辦公開(kāi)源oa系統(tǒng)服務(wù)提供商,采用PHP+MYSQL開(kāi)源語(yǔ)言,一直致力于應(yīng)用管理軟件基層研發(fā),現(xiàn)己推出企業(yè)OA、政府OA、集團(tuán)OA、SAAS版OA等應(yīng)用平臺(tái),詳細(xì)咨詢13807814037 現(xiàn)在論壇購(gòu)買,只需588元

三穗縣政務(wù)政務(wù)OA系統(tǒng):市轄區(qū)政府機(jī)關(guān)oa中解密hash算法:散列表、布隆過(guò)濾器和分布式一致性hash的原理與應(yīng)用地改變著企業(yè)的運(yùn)營(yíng)方式和管理模式。作為企業(yè)信息化建設(shè)的重要一環(huán),移動(dòng)協(xié)同OA辦公系統(tǒng)app已成為許多企業(yè)數(shù)字化轉(zhuǎn)型的關(guān)鍵數(shù)據(jù)。 平衡二叉樹(shù)增刪改查的時(shí)間復(fù)雜度為o(log2?n)。比如,100萬(wàn)個(gè)節(jié)點(diǎn),最多比較 20 次;10 億 個(gè)節(jié)點(diǎn),最多比較 30 次; 平衡二叉樹(shù)通過(guò)比較保證有序,通過(guò)每次排除一半的元素達(dá)到快速索引的目的。 二、散列表 平衡二叉樹(shù)通過(guò)比較讓結(jié)構(gòu)有序,從而提升收搜索效率。在平衡二叉樹(shù)中,搜索數(shù)據(jù)時(shí)總是對(duì)key進(jìn)行比較,如果在海量數(shù)據(jù)中使用這種方式,搜索效率會(huì)很低。 相較于平衡二叉樹(shù),散列表是一種不比較key,而是根據(jù)key計(jì)算key


英國(guó)政府以國(guó)家安全為由調(diào)查nvidia收購(gòu)arm案:

arm收購(gòu)案已經(jīng)引起了全球監(jiān)管部門和競(jìng)爭(zhēng)對(duì)手的嚴(yán)格審查。作者 | 來(lái)自鎂客星球的家衡早前nvidia以400億美元收購(gòu)arm的提案已遭到高通等公司的反對(duì),并且受到英國(guó)競(jìng)爭(zhēng)和市場(chǎng)管理局(cma)的審查。 而就在當(dāng)?shù)貢r(shí)間周一,英國(guó)政府網(wǎng)發(fā)布公告稱,英國(guó)將以國(guó)家安全為由,干預(yù)此樁收購(gòu)案。 當(dāng)?shù)孛襟w報(bào)道稱,英國(guó)文化大臣奧利弗·道登已下令采取進(jìn)一步行動(dòng),他希望cma加強(qiáng)審查力度,開(kāi)始進(jìn)行“第一階段”調(diào)查以評(píng)估該收購(gòu)交易有關(guān)競(jìng)爭(zhēng)、管轄權(quán)等特定因素,并且提供一份關(guān)于反托拉斯和國(guó)家安全問(wèn)題的報(bào)告。 在采訪中,道登這么說(shuō)到:在仔細(xì)考慮了對(duì)arm的收購(gòu)建議后,我今天以國(guó)家安全為由發(fā)出了干預(yù)通知。 我們希望支持我們蓬勃發(fā)展的英國(guó)科技產(chǎn)業(yè),并歡迎外國(guó)投資,但我們應(yīng)該適當(dāng)考慮這樣的交易對(duì)國(guó)家安全的影響。此前,cma就曾邀請(qǐng)有關(guān)方面就此次交易及其對(duì)當(dāng)?shù)馗?jìng)爭(zhēng)的影響提出意見(jiàn)。

英飛凌擬收購(gòu)st半導(dǎo)體,或?qū)⒁卉S成為世界級(jí)半導(dǎo)體巨頭 | 熱點(diǎn):

收購(gòu)st后,英飛凌年銷售額將達(dá)到175億美元。根據(jù)歐洲媒體的最新消息,于德國(guó)慕尼黑成立的英飛凌擬收購(gòu)st半導(dǎo)體公司。而本次收購(gòu)如果成功的話,英飛凌將一躍成為世界級(jí)的半導(dǎo)體巨頭。 而英飛凌想要收購(gòu)的st半導(dǎo)體公司是什么來(lái)頭呢?據(jù)了解,st半導(dǎo)體又稱為意法半導(dǎo)體集團(tuán),成立于1988年6月,是有意大利的sgs微電子公司和法國(guó)的thomson半導(dǎo)體公司合并而成。 目前,該公司是世界上最大的半導(dǎo)體公司之一。2017意法半導(dǎo)體集團(tuán)全年凈收入83.5億美元,全年凈利潤(rùn)則為8.02億美元。?英飛凌為了本次收購(gòu)事宜可謂付出了不少努力。 因?yàn)椋▏?guó)政府是st半導(dǎo)體公司最大的股東之一,其一直反對(duì)st半導(dǎo)體公司被英飛凌收購(gòu)。法國(guó)政府更希望st半導(dǎo)體公司去提升自身的業(yè)務(wù)規(guī)模,而非依靠收購(gòu)并的方式進(jìn)行資本的擴(kuò)張。 而兩家合并成功的話,收購(gòu)st后的英飛凌年銷售額將達(dá)到175億美元。同時(shí),在去年全球半導(dǎo)體供貨商排行榜中,英飛凌位于第四,st半導(dǎo)體公司位于第五。

“錢塘工業(yè)百科”正式發(fā)布 ——錢塘數(shù)據(jù)完成平臺(tái)矩陣部署:

目前錢塘大數(shù)據(jù)交易平臺(tái)是國(guó)內(nèi)最大規(guī)模的工業(yè)信息數(shù)據(jù)聚合平臺(tái),近1000家數(shù)據(jù)供應(yīng)商入駐,基于數(shù)據(jù)形成了500余份應(yīng)用報(bào)告并服務(wù)于2000多家企業(yè)用戶。 錢塘號(hào)基于大數(shù)據(jù)技術(shù),借助對(duì)工業(yè)全產(chǎn)業(yè)鏈資源的整合運(yùn)營(yíng)支持,打造新媒體、制造企業(yè)、制造相關(guān)服務(wù)商等“金三角”垂直資源生態(tài)圈。 錢塘號(hào)實(shí)現(xiàn)與工業(yè)行業(yè)的全程供應(yīng)鏈、全域生產(chǎn)服務(wù)的媒體、電商和機(jī)構(gòu)、組織的共享、互推、互通。錢塘號(hào)完成了工業(yè)領(lǐng)域的信息結(jié)合、互動(dòng)和融媒傳播。 目前已成功推出中國(guó)電影行業(yè)招商大數(shù)據(jù)云服務(wù)平臺(tái)、浦江水晶行業(yè)大數(shù)據(jù)云服務(wù)平臺(tái)等。其中浦江水晶云平臺(tái)已成為浙江省委省政府支持的浦江“四個(gè)全面試點(diǎn)”建設(shè)重點(diǎn)項(xiàng)目之一。 整合制造加工、研發(fā)設(shè)計(jì)、金融服務(wù)、市場(chǎng)銷售等功能資源,打造水晶行業(yè)產(chǎn)業(yè)資訊、水晶數(shù)據(jù)分析應(yīng)用、水晶知識(shí)產(chǎn)權(quán)交易等服務(wù)。四、錢塘工業(yè)百科?

浙江大學(xué)近五年科研發(fā)展報(bào)告:

oa文章數(shù)目?oa文章比例?2015年-2019年各年發(fā)文量最多的雜志以及發(fā)表在此雜志的數(shù)量?????2015-2019年國(guó)自然數(shù)量?2015-2019年國(guó)自然金額? 2019年國(guó)自然金額大于100萬(wàn)元項(xiàng)目 植物信號(hào)轉(zhuǎn)導(dǎo),徐娟,120萬(wàn)元 神經(jīng)生物學(xué),崔一卉,120萬(wàn)元 單細(xì)胞技術(shù),韓曉平,120萬(wàn)元 農(nóng)業(yè)農(nóng)藥殘留信息感知,平建峰,120萬(wàn)元 生防細(xì)菌與赤霉病菌互作機(jī)制研究

三穗縣政務(wù)政務(wù)OA系統(tǒng):市轄區(qū)政府機(jī)關(guān)oa中解密hash算法:散列表、布隆過(guò)濾器和分布式一致性hash的原理與應(yīng)用

p的特點(diǎn)、優(yōu)勢(shì)及其在企業(yè)數(shù)字化轉(zhuǎn)型中的作用進(jìn)行深入探討。一、移動(dòng)協(xié)同OA辦公系統(tǒng)app的特點(diǎn) 移動(dòng)協(xié)同OA辦公系統(tǒng)app是在傳統(tǒng)政務(wù)OA系統(tǒng)的基礎(chǔ)上,充分利用移動(dòng)互聯(lián)網(wǎng)技術(shù)而研發(fā)的新一代辦公管理系統(tǒng)。它主要具有以下幾個(gè)鮮明特點(diǎn):移動(dòng)化辦公:移動(dòng)協(xié)同OA辦公系統(tǒng)app可以實(shí)現(xiàn)隨時(shí)隨地的移動(dòng)辦公,無(wú)論在辦公室還是外出在路上,員工都可以通過(guò)智能手機(jī)、平板電腦等移動(dòng)終端高效地完成各項(xiàng)工作任務(wù)。這大大提高了員工的工作效率和靈活性。協(xié)同化管理:移動(dòng)協(xié)同OA辦公系統(tǒng)app集成了流程審批、任務(wù)管理、即時(shí)通訊等功能,實(shí)現(xiàn)了企業(yè)內(nèi)部各部門、各崗位之間的高度協(xié)同,打通了信息island,提升了企業(yè)的整體協(xié)作能力。智能化辦公:移動(dòng)協(xié)同OA辦公系統(tǒng)app融合了大數(shù)據(jù)、云計(jì)算、人工智能等前沿技術(shù),可以為企業(yè)提供智能化的辦公一、背景知識(shí) 在了解hash算法之前,先思考如下問(wèn)題: 使用 word 文檔時(shí),word 如何判斷某個(gè)單詞是否拼寫正確? 網(wǎng)絡(luò)爬蟲程序,怎么讓它不去爬相同的 url 頁(yè)面? 垃圾郵件過(guò)濾算法如何設(shè)計(jì)? 公安辦案時(shí),如何判斷某嫌疑人是否在網(wǎng)逃名單中? 緩存穿透問(wèn)題如何解決? 了解平衡二叉樹(shù): 平衡二叉樹(shù)查找數(shù)據(jù)采用二分查找,每次查找排除一半。平衡的目的是增刪改之后,保證下次搜索能夠穩(wěn)定排除一半的數(shù)據(jù)。 平衡二叉樹(shù)增刪改查的時(shí)間復(fù)雜度為o(log2?n)。比如,100萬(wàn)個(gè)節(jié)點(diǎn),最多比較 20 次;10 億 個(gè)節(jié)點(diǎn),最多比較 30 次; 平衡二叉樹(shù)通過(guò)比較保證有序,通過(guò)每次排除一半的元素達(dá)到快速索引的目的。 二、散列表 平衡二叉樹(shù)通過(guò)比較讓結(jié)構(gòu)有序,從而提升收搜索效率。在平衡二叉樹(shù)中,搜索數(shù)據(jù)時(shí)總是對(duì)key進(jìn)行比較,如果在海量數(shù)據(jù)中使用這種方式,搜索效率會(huì)很低。 相較于平衡二叉樹(shù),散列表是一種不比較key,而是根據(jù)key計(jì)算key在表中的位置的數(shù)據(jù)結(jié)構(gòu);是key和其所在存儲(chǔ)地址的映射關(guān)系。散列表通過(guò)此方式達(dá)到快速索引的目的。 注意:散列表的節(jié)點(diǎn)中key-value是存儲(chǔ)在一起的。 代碼語(yǔ)言:javascript 復(fù)制 struct node { void *key; void *val; struct node *next; }; 2.1、散列表的構(gòu)成 (1)hash函數(shù)。hash函數(shù)的作用是映射,把key映射到具體存儲(chǔ)的位置,通過(guò)key找到其存儲(chǔ)地址。 (2)數(shù)組。key通過(guò)hash函數(shù)找到數(shù)組的位置(hash出來(lái)的值要對(duì)數(shù)組長(zhǎng)度取余),該位置就是存儲(chǔ)key-value的地方。 2.2、hash函數(shù) 映射函數(shù) hash(key)=addr;hash 函數(shù)可能會(huì)把兩個(gè)或兩個(gè)以上的不同 key 映射到同一地址,這種情況稱之為沖突(或者h(yuǎn)ash 碰撞);hash函數(shù)的作用是將key映射為地址。 注意,hash函數(shù)可能會(huì)把兩個(gè)或兩個(gè)以上的不同key映射到同一地址,這種現(xiàn)象稱為hash沖突。 hash函數(shù)的選擇: 計(jì)算速度快。因?yàn)槿绻?jì)算速度慢,還不如直接比較key。 強(qiáng)隨機(jī)分布(等概率、均勻地分布在整個(gè)地址空間) 常用的hash函數(shù): murmurhash1:速度快、但質(zhì)量一般。 murmurhash2:速度比較快、質(zhì)量比較好,因此是使用最廣泛的一種。 murmurhash3:計(jì)算速度慢,但質(zhì)量是最好的。 siphash: redis6.0 當(dāng)中使用,rust 等大多數(shù)語(yǔ)言選用的 hash 算法來(lái)實(shí)現(xiàn) hashmap。 cityhash 等都具備強(qiáng)隨機(jī)分布性。 不同hash算法的效率、速度、質(zhì)量測(cè)試:測(cè)試地址。 siphash 主要解決字符串接近的強(qiáng)隨機(jī)分布性 。 2.3、散列表的操作流程 散列表的插入操作和搜索操作都要經(jīng)過(guò)hash函數(shù)找到key對(duì)應(yīng)的存儲(chǔ)地址。首先,key經(jīng)過(guò)hash函數(shù)hash(key)得到一個(gè)64bit或32bit的整數(shù)maddr;然后maddr對(duì)數(shù)組長(zhǎng)度取余,得到的值就是存儲(chǔ)節(jié)點(diǎn)的位置。 插入流程:key-value對(duì)要存儲(chǔ)到散列表中,首先將key通過(guò)hash函數(shù)進(jìn)行hash,生成64位或32位的一個(gè)整數(shù);然后利用這個(gè)整數(shù)對(duì)數(shù)組長(zhǎng)度進(jìn)行取余,得到的值必定能落在數(shù)組的某個(gè)槽位中;最后在該槽位增加一個(gè)節(jié)點(diǎn),完成數(shù)據(jù)的存儲(chǔ)池。 搜索流程:同樣的,也是通過(guò)將key通過(guò)hash函數(shù)進(jìn)行hash運(yùn)算生成一個(gè)64位或32位的整數(shù);然后利用這個(gè)整數(shù)對(duì)數(shù)組長(zhǎng)度進(jìn)行取余,得到該值所在數(shù)組的某個(gè)槽位。 hans運(yùn)算是一個(gè)線性運(yùn)算,相同的key通過(guò)運(yùn)算后得到的值總是相同的。相同的值對(duì)數(shù)組長(zhǎng)度取余必定落在相同的數(shù)組槽位。 散列表的指針數(shù)組通常是動(dòng)態(tài)增加的過(guò)程,最開(kāi)始定義的數(shù)組長(zhǎng)度為4,當(dāng)數(shù)據(jù)增多時(shí)將長(zhǎng)度翻倍變成8,以此類推,16、32、… 。隨著刪除元素越來(lái)越多,散列表的數(shù)組長(zhǎng)度也會(huì)自動(dòng)縮小。 注意,散列表是無(wú)序的,通過(guò)犧牲有序性來(lái)提高它的效率。而平衡二叉樹(shù)是通過(guò)保證有序性來(lái)提高它的搜索效率。散列表通過(guò)映射的關(guān)系不保證有序性,但可以查詢某個(gè)節(jié)點(diǎn)在哪個(gè)位置。 2.4、hash沖突 沖突產(chǎn)生原因: 在數(shù)組大小不變情況下,隨著添加的元素(數(shù)據(jù))的越來(lái)越多,必然產(chǎn)生沖突;而且hash是隨機(jī)性的,這也可能會(huì)產(chǎn)生沖突。 比如把n+1個(gè)元素放入n大小的數(shù)組,勢(shì)必有一個(gè)空間需要存放兩個(gè)元素,這就是沖突。另外,hash是隨機(jī)的,產(chǎn)生的數(shù)對(duì)數(shù)組長(zhǎng)度取余很可能相同,這也會(huì)沖突。 舉個(gè)經(jīng)典的數(shù)學(xué)原理:抽屜原理。桌上有十個(gè)蘋果,要把這十個(gè)蘋果放到九個(gè)抽屜里,無(wú)論怎樣放,我們會(huì)發(fā)現(xiàn)至少會(huì)有一個(gè)抽屜里面放不少于兩個(gè)蘋果。這一現(xiàn)象就是我們所說(shuō)的“抽屜原理”。 抽屜原理的一般含義為:“如果每個(gè)抽屜代表一個(gè)集合,每一個(gè)蘋果就可以代表一個(gè)元素,假如有n+1個(gè)元素放到n個(gè)集合中去,其中必定有一個(gè)集合里至少有兩個(gè)元素。” 抽屜原理有時(shí)也被稱為鴿巢原理。它是組合數(shù)學(xué)中一個(gè)重要的原理。 hash沖突的定義:多個(gè)key經(jīng)過(guò)hash函數(shù),然后對(duì)數(shù)組長(zhǎng)度取余,落在同一個(gè)數(shù)組槽位,這時(shí)就產(chǎn)生沖突。 描述hash沖突激烈程度和存儲(chǔ)密度的參數(shù)/系數(shù):負(fù)載因子。負(fù)載因子用于描述沖突的激烈程度和存儲(chǔ)的密度;負(fù)載因子越小,沖突概率越小,負(fù)載因子越大,沖突概率越大。 計(jì)算公式:負(fù)載因子=數(shù)組存儲(chǔ)元素的個(gè)數(shù) / 數(shù)組長(zhǎng)度。 2.5、hash沖突的處理 解決沖突的方法有很多,開(kāi)源框架中比較常用的有:鏈表法 / 拉鏈法、開(kāi)放尋址法等。 一般,鏈表法和開(kāi)放尋址法適用于負(fù)載因子在合理范圍內(nèi)的情況,即數(shù)組存儲(chǔ)元素的個(gè)數(shù)小于數(shù)組長(zhǎng)度的情況。 (1)鏈表法 / 拉鏈法。 使用場(chǎng)景:redis、stl的unordered_*系列、java的一些容器中 等等。 鏈表法是常用的處理沖突的方式。通過(guò)引用鏈表來(lái)處理hash沖突;散列表中的數(shù)組是指針數(shù)組,通過(guò)一個(gè)鏈表,將落在同一個(gè)槽位的元素連接起來(lái);即將沖突元素用鏈表鏈接起來(lái)。 但可能出現(xiàn)極端情況,沖突元素比較多,該沖突鏈表過(guò)長(zhǎng);這個(gè)時(shí)候可以考慮將鏈表轉(zhuǎn)換為紅黑樹(shù)、最小堆;由原來(lái)鏈表時(shí)間復(fù)雜度o(n)o(n)轉(zhuǎn)換為紅黑樹(shù)時(shí)間復(fù)雜度o(log?2n)o(log2?n);可以采用超過(guò) 256(經(jīng)驗(yàn)值)個(gè)節(jié)點(diǎn)的時(shí)候?qū)㈡湵斫Y(jié)構(gòu)轉(zhuǎn)換為紅黑樹(shù)或堆結(jié)構(gòu)。 (2)開(kāi)放尋址法。使用場(chǎng)景:布隆過(guò)濾器。 開(kāi)放尋址法將所有的元素都存放在哈希表的數(shù)組中(這個(gè)數(shù)組不再是指針數(shù)組),不使用額外的數(shù)據(jù)結(jié)構(gòu)。一般使用線性探查的的思路解決: 當(dāng)插入新元素時(shí),使用hash函數(shù)在hash表中定位元素的位置; 檢查數(shù)組中該槽位索引是否存在元素,如果該槽位為空,則插入數(shù)據(jù),否則進(jìn)入(3)。 在第二點(diǎn)檢測(cè)的槽位索引上加一定步長(zhǎng)接著檢查第二點(diǎn);加步長(zhǎng)有以下幾種: i+1,i+2,i+3,i+4,…,i+n。這種方式缺點(diǎn)比較大,當(dāng)key非常接近時(shí),落在數(shù)組的槽位都是非常接近的,一直往下找就可能造成由o(1)的時(shí)間復(fù)雜度退化成o(n)的時(shí)間復(fù)雜度。 i-1212,i+2222,i-3232,i+4242,…。對(duì)上面的方式進(jìn)行改進(jìn),雖然可以緩解hash聚集,但不能解決hash聚集問(wèn)題。當(dāng)hash聚集多了之后,也會(huì)慢慢的生成hash聚集問(wèn)題。 雙重hash。解決hash聚集現(xiàn)象,本質(zhì)上是線性探查的的思路。 前兩種都會(huì)產(chǎn)生同類hash聚集,也就是近似值它的hash值也近似,那么它的數(shù)組槽位也靠近,形成 hash 聚集;第一種同類聚集沖突在前,第二種只是將聚集沖突延后; 可以使用雙重哈希來(lái)解決上面出現(xiàn)hash聚集現(xiàn)象。比如,在.net hashtable類的hash函數(shù)hk定義如下: hk(key) = [gethash(key) + k * (1 +(((gethash(key) >> 5) + 1) %(hashsize – 1)))] % hashsize 在此 (1 + (((gethash(key) >> 5) + 1) %(hashsize – 1))) 與 hashsize互為素?cái)?shù)(兩數(shù)互為素?cái)?shù)表示兩者沒(méi)有共同的質(zhì)因?);執(zhí)?了 hashsize 次探查后,哈希表中的每?個(gè)位置都有且只有?次被訪問(wèn)到,即對(duì)于給定的 key,對(duì)哈希表中的同?位置不會(huì)同時(shí)使?hi 和 hj。 (3)擴(kuò)容和縮容。 上面兩種解決hash沖突的方式都是負(fù)載因子在合理范圍內(nèi)的情況。當(dāng)負(fù)載因子不在合理范圍內(nèi)是,即數(shù)組存儲(chǔ)元素的個(gè)數(shù)大于數(shù)組長(zhǎng)度的情況,可以使用擴(kuò)容和縮容的方式避免hash沖突。 當(dāng)used > size,即要使用的空間大于數(shù)組的長(zhǎng)度,這時(shí)就需要通過(guò)擴(kuò)容來(lái)避免或降低沖突。擴(kuò)容通常采用翻倍擴(kuò)容。 當(dāng)used < 0.1 * size,即要使用的空間遠(yuǎn)遠(yuǎn)小于數(shù)組的長(zhǎng)度,這時(shí)就需要縮容;縮容不能解決沖突,只能節(jié)約空間,減少內(nèi)存浪費(fèi)。 rehash,重新hash。因?yàn)槿萘堪l(fā)生了改變,前面解釋過(guò)key在數(shù)組的位置是通過(guò)key % size的方式;所以,需要重新做key % new_size找到key的槽位,然后重新放到新的數(shù)組中去。 2.6、stl unordered_* 散列表的實(shí)現(xiàn) 在 stl 中 unordered_map、unordered_set、unordered_multimap、unordered_multiset 四個(gè)容器的底層實(shí)現(xiàn)都是散列表。 一般,hash table里面的槽位單獨(dú)通過(guò)鏈表串聯(lián)所屬槽位的數(shù)據(jù);stl散列表的槽位指針不再這么做,而是做了優(yōu)化:將后面具體結(jié)點(diǎn)串成一個(gè)單鏈表,而槽位指針指向上一個(gè)的結(jié)點(diǎn)。 unordered_map的類定義如下: 代碼語(yǔ)言:javascript 復(fù)制 template<class _key, class _tp, class _hash = hash<_key>, class _pred = std::equal_to<_key>, class _alloc = std::allocator<std::pair<const _key, _tp> > > class unordered_map { typedef __umap_hashtable<_key, _tp, _hash, _pred, _alloc> _hashtable; _hashtable _m_h; } 看下_hashtable具體定義: 代碼語(yǔ)言:javascript 復(fù)制 template<bool _cache> using __umap_traits = __detail::_hashtable_traits<_cache, false, true>; template<typename _key, typename _tp, typename _hash = hash<_key>, typename _pred = std::equal_to<_key>, typename _alloc = std::allocator<std::pair<const _key, _tp> >, typename _tr = __umap_traits<__cache_default<_key, _hash>::value>> using __umap_hashtable = _hashtable<_key, std::pair<const _key, _tp>, _alloc, __detail::_select1st, _pred, _hash, __detail::_mod_range_hashing, __detail::_default_ranged_hash, __detail::_prime_rehash_policy, _tr>; 舉個(gè)例子: 現(xiàn)在的hash table是空的,還沒(méi)有數(shù)據(jù)插入,當(dāng)?shù)谝粋€(gè)hash(key) % array_size插入時(shí),假設(shè)這個(gè)hash(key) % array_size=4,那么4的_hash_node_base*指向頭指針_m_before_begin,_m_before_begin.next等于新插入的_hash_node_base*;后面又來(lái)一個(gè)插入,假設(shè)hash(key) % array_size=1,那么1的_hash_node_base*指向頭結(jié)點(diǎn)_m_before_begin,_m_before_begin.next等于新插入的_hash_node_base*,新插入的_hash_node_base.next等于4的_hash_node_base,4的槽位指針指向新插入的_hash_node_base*。目的是將所有的節(jié)點(diǎn)串成一個(gè)單鏈表,以便實(shí)現(xiàn)迭代器。當(dāng)前槽位的指針指向上一個(gè)槽位的位置是為了方便進(jìn)行頭插法。 2.7、小結(jié) 散列表需要掌握的知識(shí)點(diǎn): 散列表與其他數(shù)據(jù)結(jié)構(gòu)的比較,比如平衡二叉樹(shù)。平衡二叉樹(shù)通過(guò)比較key,增、刪、改操作都要保證結(jié)構(gòu)有序,穩(wěn)定搜索時(shí)間復(fù)雜度在o(log2n)o(log2?n)(二分查找)。而散列表是找key與存儲(chǔ)位置的映射關(guān)系,整個(gè)過(guò)程是無(wú)序的。 散列表的組成:hash函數(shù)、數(shù)組、運(yùn)算流程/算法;確定映射關(guān)系。 函數(shù)函數(shù)有映射的作用,選擇hash時(shí)需要注意幾點(diǎn):計(jì)算速度快、強(qiáng)隨機(jī)分布性。常用的hash函數(shù)會(huì)選擇murmurhash2、cityhash、siphash。 散列表操作流程是根據(jù)hash(key) % size = index找到存儲(chǔ)位置。既使參數(shù)hash沖突了,鏈表法的解決方案還是需要通過(guò)比較key來(lái)找到value。java的hashmap會(huì)將其組織成一個(gè)最小堆結(jié)構(gòu),因?yàn)閱捂湵淼臅r(shí)間復(fù)雜度是o(n),通過(guò)將其轉(zhuǎn)換為紅黑樹(shù)或堆的數(shù)據(jù)結(jié)構(gòu)可以將時(shí)間復(fù)雜度降低到o(log2n)o(log2?n)。這是一種優(yōu)化思路。 hash沖突中需要注意負(fù)載因子的重要性,以及解決沖突的方式。負(fù)載因子在合理范圍內(nèi)(負(fù)載因子小于1)可以使用鏈表法或開(kāi)放尋址法解決hash沖突。負(fù)載因子不在合理范圍內(nèi)則可以使用擴(kuò)容并進(jìn)行rehash來(lái)解決hash沖突。 注意stl散列表的優(yōu)化方案。 三、布隆過(guò)濾器 (bloom filter) 3.1、背景 無(wú)論是使用散列表還是平衡二叉樹(shù)(紅黑樹(shù)、b樹(shù)、b+樹(shù)等)的數(shù)據(jù)結(jié)構(gòu),都存儲(chǔ)了key-value值。而有些場(chǎng)景,內(nèi)存是有限的,僅需要了解key是否存在,不想知道具體內(nèi)容(value)。這時(shí)就需要布隆過(guò)濾器。 布隆過(guò)濾器是一種概率型數(shù)據(jù)結(jié)構(gòu),它的特點(diǎn)是高效的插入和查詢,能確定某個(gè)字符串一定存在或者可能存在。 布隆過(guò)濾器不存儲(chǔ)具體數(shù)據(jù),所以占用空間小,查詢結(jié)果存在誤差,但誤差可控,同時(shí)不支持刪除操作。 布隆過(guò)濾器的使用場(chǎng)景: (1)一個(gè)巨大的數(shù)據(jù)文件,需要知道是否存在某個(gè)key,如果把整個(gè)文件讀取進(jìn)行查找,這個(gè)效率就比較低。那么可以添加一個(gè)布隆過(guò)濾器,插入數(shù)據(jù)時(shí)對(duì)key做標(biāo)識(shí),查詢key是否存在時(shí)直接查詢key是否在布隆過(guò)濾器,從而判斷key是不是存在文件中。布隆過(guò)濾器僅僅只能判斷key是否存在,不能獲得value值。 (2)一個(gè)數(shù)據(jù)庫(kù)查詢,想要查詢數(shù)據(jù)庫(kù)中是否存在key,可以添加一個(gè)布隆過(guò)濾器,查詢key時(shí)直接查詢布隆過(guò)濾器,不需要io操作,大大提升查詢效率。 3.2、布隆過(guò)濾器的構(gòu)成 布隆過(guò)濾器的原理本質(zhì)上和散列表是一樣的。但布隆過(guò)濾器為了節(jié)約內(nèi)存,不是使用的數(shù)組,而是使用的位圖(bitmap)。位圖的特點(diǎn)是它的槽位只有兩種狀態(tài):0或者1。 (1)位圖。bit的數(shù)組,實(shí)現(xiàn)方式有多種。 代碼語(yǔ)言:javascript 復(fù)制 // 例如 vector<char> bitmap;// 一個(gè)字節(jié),8個(gè)bit位 uint64_t bitmap; (2)n個(gè)hash函數(shù)。 映射關(guān)系計(jì)算公式:m % 2n2n = m &(2n?12n?1) 舉例: 使用byte buf[8]構(gòu)建64 bit 的位圖,那么n=i*8+j;假設(shè)hash(key)=173,先對(duì)總長(zhǎng)度8×88×8 = 64取余:n=173%64=173&63=45;然后對(duì)寬度8進(jìn)行取余:j=n%8=45%8=5;最后再對(duì)寬度8進(jìn)行整除:i=n/8=45/8=5。因此得到坐標(biāo)(5,5)位置將其置 1。 3.3、布隆過(guò)濾器原理 當(dāng)一個(gè)元素加入位圖時(shí),通過(guò)k個(gè)hash函數(shù)將元素映射到位圖的k個(gè)點(diǎn),并把它們置1;當(dāng)檢索時(shí),再通過(guò)k個(gè)hash函數(shù)運(yùn)算檢查位圖的k個(gè)點(diǎn)是否都為1;如果有不為1的點(diǎn),那么認(rèn)為該key不存在;如果全部為1,則可能存在。 布隆過(guò)濾器是不支持刪除操作的,原因在于: 在位圖中每個(gè)槽位只有兩種狀態(tài)(0或者1),一個(gè)槽位被置為1,但不確定它被設(shè)置了多少次;也不知道被多少個(gè)key hash映射而來(lái);以及具體被哪個(gè)hash函數(shù)映射而來(lái)。 只要有一個(gè)槽位為0,則key一定不存在;如果key映射的所有槽位都為1,不能說(shuō)明一定存在,只能說(shuō)明可能存在(假陽(yáng)率)。 如上圖,位圖長(zhǎng)度未知,有兩個(gè)key,三個(gè)hash函數(shù)。這個(gè)怎么進(jìn)行操作的呢? 存儲(chǔ):首先將str1分別依次對(duì)三個(gè)hash函數(shù)進(jìn)行hash,然后就可以在位圖中鎖定三個(gè)存儲(chǔ)位置并相應(yīng)的置為1。str2也同樣的經(jīng)過(guò)三個(gè)hash函數(shù)得到三個(gè)存儲(chǔ)位置并相應(yīng)的置為1。 搜索:將key通過(guò)三個(gè)hash函數(shù)進(jìn)行hash,找到在位圖上具體的位置,只要發(fā)現(xiàn)其中有一個(gè)位置的值為0,則這個(gè)key肯定不存在;因?yàn)槿绻鹝ey存在,那么所有位置都應(yīng)該是1。注意,即使所有都為1,不能說(shuō)明該key一定存在,因?yàn)橛屑訇?yáng)率。 布隆過(guò)濾器可以判斷一個(gè)key一定不存在,不能判斷一個(gè)key一定存在。布隆過(guò)濾器中的位圖大小遠(yuǎn)遠(yuǎn)大于要存儲(chǔ)的數(shù)據(jù)。 布隆過(guò)濾器的假陽(yáng)率是可控的,可以通過(guò)配置來(lái)控制假陽(yáng)率。 3.4、應(yīng)用場(chǎng)景 前面介紹了布隆過(guò)濾器的原理,除了原理還需要掌握如何利用布隆過(guò)濾器解決實(shí)際問(wèn)題。布隆過(guò)濾器通常用于判斷某個(gè) key 一定不存在的場(chǎng)景,同時(shí)允許判斷存在時(shí)有誤差的情況。 常見(jiàn)處理場(chǎng)景: 緩存穿透的解決。 熱 key 限流。 緩存場(chǎng)景:為了減輕數(shù)據(jù)庫(kù)(mysql)的訪問(wèn)壓力,在server 端與數(shù)據(jù)庫(kù)(mysql)之間加入緩存用來(lái)存儲(chǔ)熱點(diǎn)數(shù)據(jù)。 緩存穿透:server端請(qǐng)求數(shù)據(jù)時(shí),緩存和數(shù)據(jù)庫(kù)都不包含該數(shù)據(jù),最終請(qǐng)求壓力全部涌向數(shù)據(jù)庫(kù)。 數(shù)據(jù)請(qǐng)求步驟,如圖中 2 所示: 先訪問(wèn)redis,如果存在則直接返回,如果不存在則走2訪問(wèn)數(shù)據(jù)庫(kù); 訪問(wèn)數(shù)據(jù)庫(kù),如果不存在直接返回,如果存在則將mysql存在的key寫回redis。 發(fā)生原因:黑客利用漏洞偽造數(shù)據(jù)攻擊或者內(nèi)部業(yè)務(wù) bug 造成大量重復(fù)請(qǐng)求不存在的數(shù)據(jù)。 解決方案,如圖中 3 所示: 在redis設(shè)置<key,null>鍵值對(duì),依次避免訪問(wèn)數(shù)據(jù)庫(kù);缺點(diǎn)是<key,null>過(guò)多會(huì)占用過(guò)多內(nèi)存,可以給key設(shè)置過(guò)期expire key 600ms,停止攻擊后最終由redis自動(dòng)清除無(wú)用的key。 在服務(wù)端(server)存儲(chǔ)一個(gè)布隆過(guò)濾器,將mysql存在的key放入布隆過(guò)濾器中,布隆過(guò)濾器可以過(guò)濾一定不存在的數(shù)據(jù)。 3.5、應(yīng)用分析 在實(shí)際應(yīng)用中,該選擇多少個(gè) hash 函數(shù)?要分配多少空間的位圖?預(yù)期存儲(chǔ)多少元素?如何控制誤差? 通常有四個(gè)參數(shù)可以控制布隆過(guò)濾器。 n : 預(yù)期布隆過(guò)濾器中元素的個(gè)數(shù),如上圖 只有str1和str2 兩元素 那么 n=2。 p : 假陽(yáng)率,在0-1之間。 m: 位圖所占空間。 k : hash函數(shù)的個(gè)數(shù)。 可以使用如下公式計(jì)算: n = ceil(m / (-k / log(1 - exp(log§ / k)))) p = pow(1 - exp(-k / (m / n)), k) m = ceil((n * log(p)) / log(1 / pow(2, log(2)))); k = round((m / n) * log(2)); 這些公式的證明這里就不展開(kāi)了,這里主要從應(yīng)用的角度介紹它們。 (1)假陽(yáng)率p會(huì)隨著插入元素的增多而逐漸變高。 (2)假陽(yáng)率p會(huì)隨著位圖所占空間的增大而減小。 (3)假陽(yáng)率p會(huì)隨著hash函數(shù)個(gè)數(shù)增多,呈現(xiàn)快速減小后緩慢增長(zhǎng)的趨勢(shì)。hash函數(shù)個(gè)數(shù)在31時(shí)假陽(yáng)率最低。這里可以驗(yàn)證一個(gè)結(jié)論:在hash函數(shù)中,在31處出現(xiàn)沖突的概率最低。 在實(shí)際使用布隆過(guò)濾器時(shí),首先需要確定 n 和 p,通過(guò)上面的運(yùn)算得出 m 和 k;推薦一個(gè)布隆過(guò)濾器計(jì)算器可以選出合適的值。 選擇hash函數(shù): 選擇一個(gè) hash 函數(shù),通過(guò)給 hash 傳遞不同的種子偏移值,采用線性探尋的方式構(gòu)造多個(gè) hash 函數(shù)。 代碼語(yǔ)言:javascript 復(fù)制 #define mix_uint64(v) ((uint32_t)((v>>32)^(v))) uint64_t hash1 = murmurhash2_x64(key, len, seed); uint64_t hash2 = murmurhash2_x64(key, len,mix_uint64(hash1)); for (i = 0; i < k; i++) // k 是hash函數(shù)的個(gè)數(shù) { pos[i] = (hash1 + i*hash2) % m; // m 是位圖的?? } 所謂不同的hash函數(shù)主要是seed不一樣創(chuàng)造出來(lái)的。在實(shí)際應(yīng)用中會(huì)有一個(gè)seed表,用于不斷的計(jì)算偏移值。每次生成hash函數(shù)的時(shí)候會(huì)把seed值修改,通過(guò)不同的數(shù)值運(yùn)算來(lái)得到hash函數(shù)。在使用過(guò)程中會(huì)先填充一個(gè)隨機(jī)種子,然后進(jìn)行偏移計(jì)算,最終得到所需的hash函數(shù)。 3.6、布隆過(guò)濾器的實(shí)際使用 為了避免篇幅過(guò)長(zhǎng),代碼已經(jīng)上傳到gitee,感興趣可以點(diǎn)擊了解。里面包含布隆過(guò)濾器的實(shí)現(xiàn)源碼和三個(gè)使用示例。 布隆過(guò)濾器的接口分為兩個(gè)部分: 計(jì)算所需的四個(gè)參數(shù):n、p、m、k;主要是根據(jù)n、和p計(jì)算出m和k。利用一個(gè)類封裝好,包含計(jì)算m、k的值。 布隆過(guò)濾器。會(huì)準(zhǔn)備一個(gè)位圖,實(shí)現(xiàn)插入元素的接口,定義hash函數(shù)的最大個(gè)數(shù),確定布隆過(guò)濾器的長(zhǎng)度,預(yù)期插入元素的個(gè)數(shù),已經(jīng)插入元素的個(gè)數(shù),seed隨機(jī)值,具體的假陽(yáng)率等等。 使用過(guò)程:先插入,然后contain。 3.7、小結(jié) 布隆過(guò)濾器的特征: 能確定一個(gè)key一定不存在,可控假陽(yáng)率確定存在。 不能刪除。可以通過(guò)準(zhǔn)備兩個(gè)布隆過(guò)濾器來(lái)解決刪除時(shí)也降低假陽(yáng)率,添加放在第一個(gè)布隆過(guò)濾器,刪除放在第二個(gè)布隆過(guò)濾器。判斷key是否存在時(shí)先判斷key是否在第二個(gè)布隆過(guò)濾器(目的是檢查之前是否刪除過(guò)該key),如果之前刪除過(guò)該key,就可以將該key加入第一個(gè)布隆過(guò)濾器。 使用過(guò)程中根據(jù)n和p計(jì)算出m和k。hash函數(shù)的生成使用開(kāi)放尋址法進(jìn)行。 四、分布式一致性hash 分布式一致性hash主要解決分布式緩存中的擴(kuò)容問(wèn)題。 4.1、背景 假設(shè)一個(gè)服務(wù)器,只有一個(gè)緩存結(jié)點(diǎn),當(dāng)存儲(chǔ)的數(shù)據(jù)越來(lái)越多時(shí),效率就越來(lái)越低,這時(shí)就需要增加結(jié)點(diǎn)進(jìn)行分流分壓。那么如何實(shí)現(xiàn)優(yōu)雅的擴(kuò)容(數(shù)據(jù)隨機(jī)、均勻分布)?首先想到使用hash方法解決,但擴(kuò)容時(shí)(增加結(jié)點(diǎn))會(huì)出現(xiàn)算法改變;比如原來(lái)有n個(gè)結(jié)點(diǎn),key通過(guò)hash(key)%n確定存儲(chǔ)在哪個(gè)結(jié)點(diǎn),現(xiàn)在添加新的結(jié)點(diǎn)變成了n+1,key通過(guò)hash(key)%(n+1)尋找存儲(chǔ)結(jié)點(diǎn)就會(huì)出現(xiàn)緩存失效。 分布式一致性hash就解決了緩存擴(kuò)容的問(wèn)題。為解決緩存失效,首先會(huì)固定算法;然后改變查找節(jié)點(diǎn)的映射關(guān)系。 分布式一致性hash算法將hash空間組織成一個(gè)虛擬的圓環(huán),圓環(huán)大小為232232 。 算法為:hash(ip) % 232232,最終會(huì)得到一個(gè) [0, 232?1232?1] 之間的一個(gè)無(wú)符號(hào)整型,這個(gè)整數(shù)代表服務(wù)器的編號(hào);多個(gè)服務(wù)器都通過(guò)這種方式在 hash 環(huán)上映射一個(gè)點(diǎn)來(lái)標(biāo)識(shí)該服務(wù)器的位置;當(dāng)用戶操作某個(gè) key,通過(guò)同樣的算法生成一個(gè)值,沿環(huán)順時(shí)針定位某個(gè)服務(wù)器,那么該 key 就在該服務(wù)器中。 4.2、一致性hash原理 (1)映射空間可抽象為一個(gè)環(huán),長(zhǎng)度為232232,范圍為[0, 232?1232?1],每個(gè)服務(wù)器節(jié)點(diǎn)根據(jù)自己的哈希值被映射到這個(gè)環(huán)上; (2)判斷一條數(shù)據(jù)屬于哪個(gè)服務(wù)器節(jié)點(diǎn)的方法:根據(jù)數(shù)據(jù)的哈希值,去哈希環(huán)找到第一個(gè)大于等于數(shù)據(jù)哈希值的機(jī)器(可以理解為離它最近)。如果數(shù)據(jù)的哈希值大于當(dāng)前最大的機(jī)器哈希值,那么就把這個(gè)數(shù)據(jù)放在位置最靠前(哈希值最小)的機(jī)器上,因?yàn)槭且粋€(gè)環(huán)。 (3)為了解決實(shí)際機(jī)器過(guò)少導(dǎo)致的數(shù)據(jù)傾斜問(wèn)題(例如目前一共3個(gè)機(jī)器,機(jī)器a、b的哈希值分別為1和2,而另一個(gè)機(jī)器c的哈希值為 2^32-1,那么大部分的數(shù)據(jù)都會(huì)被分給機(jī)器c),引入了虛擬節(jié)點(diǎn)概念,虛擬節(jié)點(diǎn)相當(dāng)于真實(shí)節(jié)點(diǎn)的分身,一個(gè)真實(shí)節(jié)點(diǎn)可以有很多個(gè)虛擬節(jié)點(diǎn),當(dāng)數(shù)據(jù)被分配給這些虛擬節(jié)點(diǎn)時(shí),本質(zhì)上是分給這個(gè)真實(shí)節(jié)點(diǎn)的。由于數(shù)量變多了,數(shù)據(jù)分布的均衡性會(huì)有所提高; (4)新增節(jié)點(diǎn)時(shí):例如原本的節(jié)點(diǎn)哈希值列表為[1,100,500,1000],新增節(jié)點(diǎn)800后,在501~799范圍內(nèi)的數(shù)據(jù)原本是分給哈希值為1000的節(jié)點(diǎn)的,現(xiàn)在要把這部分?jǐn)?shù)據(jù)遷移到節(jié)點(diǎn)800; (5)刪除節(jié)點(diǎn):例如原本的節(jié)點(diǎn)哈希值列表為[1,100,500,800,1000],刪除節(jié)點(diǎn)500后,原本范圍是101~500的數(shù)據(jù)要遷移到節(jié)點(diǎn)800. 4.3、應(yīng)用場(chǎng)景 (1)分布式緩存;將數(shù)據(jù)均衡地分散在不同的服務(wù)器當(dāng)中,用來(lái)分?jǐn)偩彺娣?wù)器的壓力; (2)解決緩存服務(wù)器數(shù)量變化盡量不影響緩存失效. 4.4、hash偏移 hash算法得到的結(jié)果是隨機(jī)的,不能保證服務(wù)器節(jié)點(diǎn)均勻分布在hash環(huán)上;分布不均造成請(qǐng)求訪問(wèn)不均勻,服務(wù)器承受的壓力不均勻。 為了解決實(shí)際機(jī)器過(guò)少導(dǎo)致的數(shù)據(jù)傾斜問(wèn)題(例如目前一共3個(gè)機(jī)器,機(jī)器a、b的哈希值分別為1和2,而另一個(gè)機(jī)器c的哈希值為 2^32-1,那么大部分的數(shù)據(jù)都會(huì)被分給機(jī)器c),引入了虛擬節(jié)點(diǎn)概念,虛擬節(jié)點(diǎn)相當(dāng)于真實(shí)節(jié)點(diǎn)的分身,一個(gè)真實(shí)節(jié)點(diǎn)可以有很多個(gè)虛擬節(jié)點(diǎn),當(dāng)數(shù)據(jù)被分配給這些虛擬節(jié)點(diǎn)時(shí),本質(zhì)上是分給這個(gè)真實(shí)節(jié)點(diǎn)的。由于數(shù)量變多了,數(shù)據(jù)分布的均衡性會(huì)有所提高; 4.5、hash遷移 新增節(jié)點(diǎn)時(shí),例如原本的節(jié)點(diǎn)哈希值列表為[1,100,500,1000],新增節(jié)點(diǎn)800后,在501~799范圍內(nèi)的數(shù)據(jù)原本是分給哈希值為1000的節(jié)點(diǎn)的,現(xiàn)在要把這部分?jǐn)?shù)據(jù)遷移到節(jié)點(diǎn)800。 4.6、虛擬結(jié)點(diǎn) 為了解決哈希偏移的問(wèn)題,增加了虛擬節(jié)點(diǎn)的概念;理論上,哈希環(huán)上節(jié)點(diǎn)數(shù)越多,數(shù)據(jù)分布越均衡;為每個(gè)服務(wù)節(jié)點(diǎn)計(jì)算多個(gè)哈希節(jié)點(diǎn)(虛擬節(jié)點(diǎn));通常做法 是,hash(“ip:port:seqno”) %232232。 添加虛擬節(jié)點(diǎn)解決了哈希偏移的問(wèn)題,同時(shí)使hash遷移的數(shù)據(jù)量變小;這對(duì)工程應(yīng)用來(lái)說(shuō)是非常重要的,因?yàn)樵谧鰯?shù)據(jù)遷移的過(guò)程中,整個(gè)系統(tǒng)是不能提供服務(wù)的。 五、思考 (1)只用 2gb 內(nèi)存在 20 億個(gè)整數(shù)中找到出現(xiàn)次數(shù)最多的數(shù)? 關(guān)鍵點(diǎn),內(nèi)存有限、海量數(shù)據(jù)、次數(shù)最多。要找出現(xiàn)次數(shù)最多,那么就一定要統(tǒng)計(jì),使用key-value鍵值對(duì),key保存整數(shù),value保存出現(xiàn)次數(shù)。統(tǒng)計(jì)可以使用散列表來(lái)解決。 對(duì)于key-value鍵值對(duì),key是整數(shù)占4字節(jié),如果按照最壞情況(即1個(gè)整數(shù)出現(xiàn)20 億次),value可以使用uint32存儲(chǔ)(uint32可達(dá)21億多,剛好能存儲(chǔ)下20億),uint32也是占4字節(jié);因此一個(gè)key-value對(duì)占8個(gè)字節(jié)。如果要在內(nèi)存中處理20億個(gè)數(shù)據(jù)就需要2000000000×8=16gb2000000000×8=16gb內(nèi)存,超出2gb內(nèi)存的限制。 要在有限內(nèi)存里處理,可以采用拆分的思維,將20億拆分成若干等份。那么采用什么策略來(lái)拆分?首先要清楚,20億的數(shù)據(jù)是散列分布的,不能采用等分的方式,我們的目的要把相同的整數(shù)放在同一個(gè)文件中,hash函數(shù)可以實(shí)現(xiàn)這個(gè)目的(相同的key經(jīng)過(guò)hash得到的值總是相同)。 一個(gè)hash函數(shù)兩個(gè)用途,一方面是對(duì)數(shù)據(jù)拆分將相同整數(shù)放入同一個(gè)文件或等份,另一方面將其應(yīng)用到散列表中(散列表的存儲(chǔ)數(shù)據(jù)取余)。hash函數(shù)具有強(qiáng)隨機(jī)性,數(shù)據(jù)屬于海量數(shù)據(jù),那么數(shù)據(jù)拆分多少份?可以計(jì)算最差情況需要拆分多少份和最好的情況需要拆分多少份,如果隨機(jī)性不能達(dá)到預(yù)期,再增加份數(shù)。 比如,將20億拆分為10份(如果不能達(dá)到預(yù)期的隨機(jī)性再增大),平均的情況是每份2億,具體情況再具體調(diào)整。 六、總結(jié) 分布式一致性hash算法通過(guò)固定算法,改變查找結(jié)點(diǎn)的映射關(guān)系,數(shù)據(jù)遷移,避免緩存失效,解決分布式擴(kuò)容的問(wèn)題;通過(guò)虛擬節(jié)點(diǎn)的方式保證數(shù)據(jù)均衡。 在大數(shù)據(jù)中,涉及到大文件或海量數(shù)據(jù)的,解決方案都是通過(guò)hash將大文件拆分為小文件;涉及單臺(tái)機(jī)器無(wú)法承受或處理不過(guò)來(lái)的問(wèn)題,解決方案都是通過(guò)hash分流到多臺(tái)機(jī)器;選擇hash的原因是利用其強(qiáng)隨機(jī)分布的特性,以及把相同的數(shù)據(jù)分配到相同的位置。

亮相一周年,騰訊智慧零售的進(jìn)化論:

傳統(tǒng)零售商在漫長(zhǎng)的業(yè)務(wù)實(shí)踐中總結(jié)了一套經(jīng)營(yíng)產(chǎn)品的法則,但他們并不懂得如何經(jīng)營(yíng)“人”,或者說(shuō)過(guò)去的技術(shù)并不支持他們經(jīng)營(yíng)“人”。 在騰訊副總裁林璟驊看來(lái),消費(fèi)者的數(shù)字化是零售業(yè)變革的源動(dòng)力,將推動(dòng)“人”、“貨”、“場(chǎng)”關(guān)系的重構(gòu)。首先,消費(fèi)者被全方位數(shù)字化后,成了一個(gè)實(shí)時(shí)在線的角色,可以被隨時(shí)觸達(dá)。 過(guò)去幾年里我們?cè)诹闶坌袠I(yè)看到的幾乎所有新鮮事物,包括無(wú)人便利店、會(huì)員識(shí)別系統(tǒng)、智能營(yíng)銷大屏、虛擬試衣鏡等等,本質(zhì)上都是在利用各種物聯(lián)網(wǎng)設(shè)備將消費(fèi)者的線下行為數(shù)字化。這也是騰訊智慧零售正在做的事情。 只不過(guò)相比創(chuàng)業(yè)公司布局無(wú)人便利店、會(huì)員人臉識(shí)別系統(tǒng)等,騰訊采用的是一種更輕的模式,即利用微信支付、社交廣告、小程序等工具連接人與商業(yè)。以騰訊和沃爾瑪合作的“掃瑪購(gòu)”為例。 公司最為倚重的兩大收入版塊——增值服務(wù)和游戲收入、社交媒體和廣告收入同時(shí)受挫。其中作為騰訊收入支柱的游戲業(yè)務(wù),受到政策嚴(yán)管。

2016大數(shù)據(jù)行業(yè)的變與不變:

幾個(gè)月后,由中國(guó)計(jì)算機(jī)協(xié)會(huì)(ccf)大數(shù)據(jù)專家委員會(huì)編撰的第三版關(guān)于大數(shù)據(jù)的白皮書將發(fā)布,ccf大數(shù)據(jù)專家委員會(huì)副秘書長(zhǎng)潘柱延卻“提前泄密”,他分析了大數(shù)據(jù)行業(yè)的幾個(gè)關(guān)鍵詞:民生、多樣性和融合性、政策拉動(dòng) ccf大數(shù)據(jù)專家組認(rèn)為,該綱要將對(duì)大數(shù)據(jù)的發(fā)展起到推動(dòng)性的作用,成為大數(shù)據(jù)產(chǎn)業(yè)快速發(fā)展的催化劑和政策標(biāo)桿,也將推動(dòng)地方政府出臺(tái)類似的配套政策。 潘柱延指出:“除了學(xué)術(shù)、技術(shù)、商業(yè)的推動(dòng)外,政策的扶持會(huì)產(chǎn)生很大作用,大數(shù)據(jù)相關(guān)的基礎(chǔ)設(shè)施建設(shè)和大數(shù)據(jù)創(chuàng)業(yè)公司在雙創(chuàng)政策的推動(dòng)下,兩個(gè)驅(qū)動(dòng)力會(huì)快速帶動(dòng)大數(shù)據(jù)的發(fā)展。” 調(diào)研結(jié)果顯示,業(yè)內(nèi)專家都希望能自己收集數(shù)據(jù),并利用收集的數(shù)據(jù)進(jìn)行數(shù)據(jù)服務(wù),希望能買到“數(shù)據(jù)機(jī)”,而專家和其所在的機(jī)構(gòu)計(jì)劃賣“數(shù)據(jù)機(jī)”的卻非常少。 潘柱延指出,數(shù)據(jù)流轉(zhuǎn)整體處在需求大于供給的狀態(tài),尤其是數(shù)據(jù)國(guó)際交換和賣數(shù)據(jù)?!跋Mㄟ^(guò)政府開(kāi)放共享,拉動(dòng)數(shù)據(jù)交流和交換。

日媒說(shuō):中國(guó)企業(yè)機(jī)器換人,是因?yàn)槟贻p人太容易辭職:

日本經(jīng)濟(jì)新聞網(wǎng)12月2日?qǐng)?bào)道,在山東省從事運(yùn)動(dòng)服裝的制造與出口的主力企業(yè)“山東岱銀進(jìn)出口公司”的高管王先生(33歲)就是這些經(jīng)營(yíng)者中的一人。 企業(yè)和政府或許忘記了一些更重要的東西。對(duì)于企業(yè)而言,最重要的是如何生產(chǎn)和提供與其他企業(yè)不同的產(chǎn)品或服務(wù)。因此“育人”才是中國(guó)企業(yè)面臨的最緊要的課題。 就算在工廠引進(jìn)機(jī)器人能暫時(shí)控制住成本,如果各企業(yè)都在生產(chǎn)同樣的產(chǎn)品、提供相同服務(wù)的話,經(jīng)營(yíng)遲早會(huì)走進(jìn)死胡同。雖然耗時(shí)耗力,但如果不注重“育人”,就無(wú)法培養(yǎng)真正的競(jìng)爭(zhēng)力,產(chǎn)業(yè)也將無(wú)法實(shí)現(xiàn)高度化。

自來(lái)水也和人工智能有關(guān)?看這家公司如何用ai+機(jī)器人維護(hù)管道:

△ hibot的機(jī)器人王新民 | 編譯自fastcompany量子位·qbitai 出品萬(wàn)萬(wàn)沒(méi)想到,美國(guó)人民喝個(gè)水也要和人工智能扯上關(guān)系了。 然而對(duì)于市政府的管道更換項(xiàng)目來(lái)說(shuō),現(xiàn)有的至少40%的管道是不需要更換的。 這就意味著如果可以進(jìn)行更有效的,針對(duì)性的更換,就能夠省下4億美元或更多的經(jīng)費(fèi)。這是hibot機(jī)器人可以大展身手的地方。 hibot通過(guò)其數(shù)據(jù)庫(kù)系統(tǒng),基于對(duì)已經(jīng)替換管道的檢查和地區(qū)土壤動(dòng)力學(xué)的評(píng)估,結(jié)合環(huán)境因素,能夠計(jì)算出城市中各區(qū)域泄漏的風(fēng)險(xiǎn)。然后,hibot公司的機(jī)器人進(jìn)入自來(lái)水管道,以確定水管道的受損程度。 這個(gè)機(jī)器人本身很小,有三個(gè)部分,像只有一節(jié)車廂的火車。 機(jī)器人的頭部有一個(gè)攝像頭,能夠引導(dǎo)內(nèi)部的磁性傳感器,測(cè)量管道中的材料損失量,進(jìn)而分析管道來(lái)了解其特點(diǎn)。 hibot公司目前已經(jīng)和舊金山地區(qū)至少兩家市政管道公司達(dá)成合作。斯坦福大學(xué)電氣工程系兼職教授richard dasher說(shuō):“我認(rèn)為這項(xiàng)技術(shù)能夠真正改變美國(guó)城市的管道網(wǎng)絡(luò)。

轉(zhuǎn)載請(qǐng)注明出處,本站網(wǎng)址:http://www.dblinkclub.com/news_1918.html
相關(guān)推薦
熱門TAG

常德做網(wǎng)站 廣東哪家網(wǎng)站制作公司好 福田區(qū)做網(wǎng)站 伽師縣網(wǎng)站設(shè)計(jì) 峨邊彝族自治縣網(wǎng)站建設(shè) 云南SEO網(wǎng)站優(yōu)化 便宜的網(wǎng)站建設(shè)公司 山海關(guān)企業(yè)網(wǎng)站開(kāi)發(fā) 西安網(wǎng)站建設(shè)公司 市轄區(qū)SEO網(wǎng)站優(yōu)化 富寧做網(wǎng)站 渝北區(qū)公司網(wǎng)站建設(shè) seo服務(wù)網(wǎng)站 新蕪區(qū)自助建站 鞍山網(wǎng)站開(kāi)發(fā) 網(wǎng)站制作策劃 南芬政府公文系統(tǒng) 網(wǎng)站怎么優(yōu)化seo 靈武市網(wǎng)頁(yè)設(shè)計(jì) 磴口做網(wǎng)站 海林市政務(wù)OA 萬(wàn)盛區(qū)SEO網(wǎng)站優(yōu)化 東莞網(wǎng)站制作的公司 建一個(gè)網(wǎng)站的步驟 網(wǎng)站優(yōu)化排名公司 涉 縣自助建站 潁上縣網(wǎng)站設(shè)計(jì) 武進(jìn)區(qū)網(wǎng)頁(yè)設(shè)計(jì) 蘇尼特右旗公司網(wǎng)站建設(shè) 吳橋SEO網(wǎng)站優(yōu)化 好建站 濟(jì)陽(yáng)縣網(wǎng)站設(shè)計(jì) 新田縣SEO網(wǎng)站優(yōu)化 平山網(wǎng)頁(yè)設(shè)計(jì) 市轄區(qū)自助建站 沙依巴克區(qū)網(wǎng)站設(shè)計(jì) 天門市做網(wǎng)站 富拉爾基區(qū)政務(wù)OA 市轄區(qū)政府辦公oa系統(tǒng) 漢中SEO網(wǎng)站優(yōu)化 北京旅游網(wǎng)站建設(shè) 內(nèi)鄉(xiāng)縣做網(wǎng)站 古冶網(wǎng)站建設(shè) 蒲城縣SEO網(wǎng)站優(yōu)化 seo公司 北京 本溪網(wǎng)站制作 方城縣政務(wù)oa系統(tǒng) 市轄區(qū)企業(yè)網(wǎng)站開(kāi)發(fā) 普蘭店網(wǎng)站建設(shè) 新興縣網(wǎng)站建設(shè) 沈陽(yáng)企業(yè)自助建站系統(tǒng) 北安市政府公文系統(tǒng) 遵義網(wǎng)頁(yè)設(shè)計(jì) 燈塔政府oa系統(tǒng) 吉木乃縣做網(wǎng)站 臨汾網(wǎng)站建設(shè) 應(yīng)城市網(wǎng)站設(shè)計(jì) 洞口縣SEO網(wǎng)站優(yōu)化 渭源縣做網(wǎng)站 浮梁縣網(wǎng)頁(yè)設(shè)計(jì) 江永縣網(wǎng)站設(shè)計(jì) 遂川縣自助建站 羅甸縣政府辦公oa系統(tǒng) 霍山縣人民政府電話 市中區(qū)網(wǎng)站設(shè)計(jì) 武定網(wǎng)頁(yè)設(shè)計(jì) 岳陽(yáng)縣SEO網(wǎng)站優(yōu)化 吉林公司網(wǎng)站建設(shè) 沂源縣網(wǎng)頁(yè)設(shè)計(jì) 容 縣自助建站 荔波縣網(wǎng)站建設(shè) 好的建站網(wǎng)站 梧州網(wǎng)站建設(shè) 曲松縣自助建站 寶雞政務(wù)oa系統(tǒng) HR大數(shù)據(jù)分析與經(jīng)營(yíng)模擬決策平臺(tái)題目