国产成人三级在线视频网站观看|日韩 亚洲一区 中文字幕|伊人久久大香线蕉综合热|亚洲欧美日韩最新一区

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

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

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

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


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

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

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

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

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

浙江大學近五年科研發(fā)展報告:

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

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

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

亮相一周年,騰訊智慧零售的進化論:

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

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

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

日媒說:中國企業(yè)機器換人,是因為年輕人太容易辭職:

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

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

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

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

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

广饶县| 芜湖县| 体育| 丽水市| 宾川县| 灵石县| 利川市| 惠安县| 鹤壁市| 潮州市| 桂林市| 乐业县| 岱山县| 新沂市| 闻喜县| 上思县| 资溪县| 察雅县| 三门峡市| 乌拉特前旗| 永州市| 通化县| 盐山县| 江永县| 古交市| 平罗县| 扎赉特旗| 湖口县| 盖州市| 巩留县| 屯门区| 威宁| 武汉市| 河津市| 林西县| 和林格尔县| 木里| 明水县| 淮滨县| 澄城县| 祥云县|