国产美女精品自在线拍照片,欧美人与兽,欧美成人高清在线播放,欧美成人精品三级网站,两个人免费完整在线观看直播

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

時(shí)間:2024-11-27 13:04:10 信創(chuàng)OA資訊首頁(yè) 三穗縣政務(wù)oa系統(tǒng)市轄區(qū)政府機(jī)關(guān)oa


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

arm收購(gòu)案已經(jīng)引起了全球監(jiān)管部門(mé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ā)布公告稱(chēng),英國(guó)將以國(guó)家安全為由,干預(yù)此樁收購(gòu)案。 當(dāng)?shù)孛襟w報(bào)道稱(chēng),英國(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后,英飛凌年銷(xiāo)售額將達(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)體又稱(chēng)為意法半導(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后的英飛凌年銷(xiāo)售額將達(dá)到175億美元。同時(shí),在去年全球半導(dǎo)體供貨商排行榜中,英飛凌位于第四,st半導(dǎo)體公司位于第五。

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

目前錢(qián)塘大數(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ù)。 錢(qián)塘號(hào)基于大數(shù)據(jù)技術(shù),借助對(duì)工業(yè)全產(chǎn)業(yè)鏈資源的整合運(yùn)營(yíng)支持,打造新媒體、制造企業(yè)、制造相關(guān)服務(wù)商等“金三角”垂直資源生態(tài)圈。 錢(qián)塘號(hào)實(shí)現(xiàn)與工業(yè)行業(yè)的全程供應(yīng)鏈、全域生產(chǎn)服務(wù)的媒體、電商和機(jī)構(gòu)、組織的共享、互推、互通。錢(qián)塘號(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)銷(xiāo)售等功能資源,打造水晶行業(yè)產(chǎn)業(yè)資訊、水晶數(shù)據(jù)分析應(yīng)用、水晶知識(shí)產(chǎn)權(quán)交易等服務(wù)。四、錢(qián)塘工業(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)部各部門(mén)、各崗位之間的高度協(xié)同,打通了信息island,提升了企業(yè)的整體協(xié)作能力。智能化辦公:移動(dòng)協(xié)同OA辦公系統(tǒng)app融合了大數(shù)據(jù)、云計(jì)算、人工智能等前沿技術(shù),可以為企業(yè)提供智能化的辦公一、背景知識(shí) 在了解hash算法之前,先思考如下問(wèn)題: 使用 word 文檔時(shí),word 如何判斷某個(gè)單詞是否拼寫(xiě)正確? 網(wǎng)絡(luò)爬蟲(chóng)程序,怎么讓它不去爬相同的 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 映射到同一地址,這種情況稱(chēng)之為沖突(或者h(yuǎn)ash 碰撞);hash函數(shù)的作用是將key映射為地址。 注意,hash函數(shù)可能會(huì)把兩個(gè)或兩個(gè)以上的不同key映射到同一地址,這種現(xiàn)象稱(chēng)為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,以此類(lèi)推,16、32、… 。隨著刪除元素越來(lái)越多,散列表的數(shù)組長(zhǎng)度也會(huì)自動(dòng)縮小。 注意,散列表是無(wú)序的,通過(guò)犧牲有序性來(lái)提高它的效率。而平衡二叉樹(shù)是通過(guò)保證有序性來(lái)提高它的搜索效率。散列表通過(guò)映射的關(guān)系不保證有序性,但可以查詢(xú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è)蘋(píng)果,要把這十個(gè)蘋(píng)果放到九個(gè)抽屜里,無(wú)論怎樣放,我們會(huì)發(fā)現(xiàn)至少會(huì)有一個(gè)抽屜里面放不少于兩個(gè)蘋(píng)果。這一現(xiàn)象就是我們所說(shuō)的“抽屜原理”。 抽屜原理的一般含義為:“如果每個(gè)抽屜代表一個(gè)集合,每一個(gè)蘋(píng)果就可以代表一個(gè)元素,假如有n+1個(gè)元素放到n個(gè)集合中去,其中必定有一個(gè)集合里至少有兩個(gè)元素?!?抽屜原理有時(shí)也被稱(chēng)為鴿巢原理。它是組合數(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)生同類(lèi)hash聚集,也就是近似值它的hash值也近似,那么它的數(shù)組槽位也靠近,形成 hash 聚集;第一種同類(lèi)聚集沖突在前,第二種只是將聚集沖突延后; 可以使用雙重哈希來(lái)解決上面出現(xiàn)hash聚集現(xiàn)象。比如,在.net hashtable類(lèi)的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的類(lèi)定義如下: 代碼語(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)是高效的插入和查詢(xún),能確定某個(gè)字符串一定存在或者可能存在。 布隆過(guò)濾器不存儲(chǔ)具體數(shù)據(jù),所以占用空間小,查詢(xún)結(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í),查詢(xún)key是否存在時(shí)直接查詢(xún)key是否在布隆過(guò)濾器,從而判斷key是不是存在文件中。布隆過(guò)濾器僅僅只能判斷key是否存在,不能獲得value值。 (2)一個(gè)數(shù)據(jù)庫(kù)查詢(xún),想要查詢(xún)數(shù)據(jù)庫(kù)中是否存在key,可以添加一個(gè)布隆過(guò)濾器,查詢(xún)key時(shí)直接查詢(xún)布隆過(guò)濾器,不需要io操作,大大提升查詢(xún)效率。 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寫(xiě)回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è)類(lèi)封裝好,包含計(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)用戶(hù)操作某個(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ù)放在位置最靠前(哈希值最?。┑臋C(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)銷(xiāo)大屏、虛擬試衣鏡等等,本質(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ù)專(zhuān)家委員會(huì)編撰的第三版關(guān)于大數(shù)據(jù)的白皮書(shū)將發(fā)布,ccf大數(shù)據(jù)專(zhuān)家委員會(huì)副秘書(shū)長(zhǎng)潘柱延卻“提前泄密”,他分析了大數(shù)據(jù)行業(yè)的幾個(gè)關(guān)鍵詞:民生、多樣性和融合性、政策拉動(dòng) ccf大數(shù)據(jù)專(zhuān)家組認(rèn)為,該綱要將對(duì)大數(shù)據(jù)的發(fā)展起到推動(dòng)性的作用,成為大數(shù)據(jù)產(chǎn)業(yè)快速發(fā)展的催化劑和政策標(biāo)桿,也將推動(dòng)地方政府出臺(tái)類(lè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)專(zhuān)家都希望能自己收集數(shù)據(jù),并利用收集的數(shù)據(jù)進(jìn)行數(shù)據(jù)服務(wù),希望能買(mǎi)到“數(shù)據(jù)機(jī)”,而專(zhuān)家和其所在的機(jī)構(gòu)計(jì)劃賣(mài)“數(shù)據(jù)機(jī)”的卻非常少。 潘柱延指出,數(shù)據(jù)流轉(zhuǎn)整體處在需求大于供給的狀態(tài),尤其是數(shù)據(jù)國(guó)際交換和賣(mài)數(shù)據(jù)。“希望通過(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é)車(chē)廂的火車(chē)。 機(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://m.opentechcloud.com/news_1918.html
相關(guān)推薦