導航:首頁 > 凈水問答 > 協同過濾

協同過濾

發布時間:2021-01-20 07:03:58

Ⅰ 協同過濾中的可擴展性問題是什麼

協同過濾演算法能夠容易地為幾千名用戶提供較好的推薦,但是對於電子商務網站,往往需要給成百上千萬的用戶提供推薦,這就一方面需要提高響應時間的要求,能夠為用戶實時地進行推薦;另一方面還應考慮到存儲空間的要求,盡量減少推薦系統運行的負擔。

1.3 可擴展性問題

在協同過濾推薦演算法中,全局數值演算法能及時利用最新的信息為用戶產生相對准確的用戶興趣度預測或進行推薦,但是面對日益增多的用戶,數據量的急劇增加,演算法的擴展性問題(即適應系統規模不斷擴大的問題)成為制約推薦系統實施的重要因素。雖然與基於模型的演算法相比,全局數值演算法節約了為建立模型而花費的訓練時間,但是用於識別「最近鄰居」演算法的計算量隨著用戶和項的增加而大大增加,對於上百萬的數目,通常的演算法會遇到嚴重的擴展性瓶頸問題。該問題解決不好,直接影響著基於協同過濾技術的推薦系統實時向用戶提供推薦問題的解決,而推薦系統的實時性越好,精確度越高,該系統才會被用戶所接受。

基於模型的演算法雖然可以在一定程度上解決演算法的可擴展性問題,但是該類演算法往往比較適於用戶的興趣愛好比較穩定的情況,因為它要考慮用戶模型的學習過程以及模型的更新過程,對於最新信息的利用比全局數值演算法要差些。

分析以上協同過濾在推薦系統實現中面臨的兩個問題,它們的共同點是均考慮到了最近鄰居的形成問題(包括用戶信息獲得的充分性、計算耗費等)。但是應該看到協同過濾在推薦系統的實現中,要獲得最近鄰居用戶,必須通過一定的計算獲得用戶之間的相似度,然後確定最佳的鄰居個數,形成鄰居用戶集。而在這一過程中,如果對全部數據集進行相似性計算,雖然直接,但是運算量和時間花費都極大,無法適應真實的商務系統。如果通過對訓練集數據(整個數據集的某一子集)進行實驗獲得,雖然不必對整個數據集進行計算,但是必須通過將多次實驗結果統計出來才可能得到,這無疑也增加了推薦結果獲得的代價和誤差。並且如果考慮到數據集的動態變化,這一形成最近鄰居用戶集技術的實際應用價值越來越小。因此,考慮使用更為有效的最近鄰居用戶形成辦法,對於協同過濾的應用非常必要。

Ⅱ 協同過濾演算法有哪些 slope

協同過濾演算法是這一領域的主流。作為基於內容的演算法執行方式內,協同過濾在准確性上具容有相當的優勢,但無法冷啟動、同質化和運算效率低使其依然存在很多不足。
協同過濾演算法的名稱來源於化學上的過濾操作。
原理
利用物質的溶解性差異,將液體和不溶於液體的固體分離開來的一種方法。如用過濾法除去粗食鹽中少量的泥沙

過濾實驗儀器
漏斗、燒杯、玻璃棒、鐵架台(含鐵圈)、濾紙。

過濾操作要領
要做到「一貼、二低、三靠」。
一貼
即使濾紙潤濕,緊貼漏斗內壁,中間不要留下氣泡。(防止氣泡減慢過濾速度。)
二低
1.濾紙邊緣略低於漏斗邊緣。
2.液面低於濾紙邊緣。(防止液體過濾不凈。)
三靠
1.傾倒時燒杯杯口要緊靠玻璃棒上。
2.玻璃棒下端抵靠在三層濾紙處。
3.漏斗下端長的那側管口緊靠燒杯內壁。

過濾注意事項
1.燒杯中的混合物在過濾前應用玻璃棒攪拌,然後進行過濾。
2.過濾後若溶液還顯渾濁,應再過濾一次,直到溶液變得透明為止。
3.過濾器中的沉澱的洗滌方法:用燒瓶或滴管向過濾器中加蒸餾水,使水面蓋沒沉澱物,待溶液全部濾出後,重復2~3次。
希望我能幫助你解疑釋惑。

Ⅲ 基於消費者的協同過濾與基於產品的協同過濾有何不同

協同過濾(Collaborative Filtering)的基本抄概念就是把這襲種推薦方式變成自動化的流程

協同過濾主要是以屬性或興趣相近的用戶經驗與建議作為提供個性化推薦的基礎。透過協同過濾,有助於搜集具有類似偏好或屬性的用戶,並將其意見提供給同一集群中的用戶作為參考,以滿足人們通常在決策之前參考他人意見的心態。

Ⅳ 協同過濾的演算法簡介

電子商務推薦系統的一種主要演算法。
協同過濾推薦(Collaborative Filtering recommendation)是在信息過濾和信息系統中正迅速成為一項很受歡迎的技術。與傳統的基於內容過濾直接分析內容進行推薦不同,協同過濾分析用戶興趣,在用戶群中找到指定用戶的相似(興趣)用戶,綜合這些相似用戶對某一信息的評價,形成系統對該指定用戶對此信息的喜好程度預測。
與傳統文本過濾相比,協同過濾有下列優點:
(1)能夠過濾難以進行機器自動基於內容分析的信息。如藝術品、音樂;
(2)能夠基於一些復雜的,難以表達的概念(信息質量、品位)進行過濾;
(3)推薦的新穎性。
正因為如此,協同過濾在商業應用上也取得了不錯的成績。Amazon,CDNow,MovieFinder,都採用了協同過濾的技術來提高服務質量。
缺點是:
(1)用戶對商品的評價非常稀疏,這樣基於用戶的評價所得到的用戶間的相似性可能不準確(即稀疏性問題);
(2)隨著用戶和商品的增多,系統的性能會越來越低;
(3)如果從來沒有用戶對某一商品加以評價,則這個商品就不可能被推薦(即最初評價問題)。
因此,現在的電子商務推薦系統都採用了幾種技術相結合的推薦技術。
案例: AMAZON個性化推薦系統先驅 (基於協同過濾)
AMAZON是一個虛擬的網上書店,它沒有自己的店面,而是在網上進行在線銷售。它提供了高質量的綜合節目資料庫和檢索系統,用戶可以在網上查詢有關圖書的信息。如果用戶需要購買的話,可以把選擇的書放在虛擬購書籃中,最後查看購書籃中的商品,選擇合適的服務方式並且提交訂單,這樣讀者所選購的書在幾天後就可以送到家。
AMAZON書店還提供先進的個性化推薦功能,能為不同興趣偏好的用戶自動推薦盡量符合其興趣需要的書籍。 AMAZON使用推薦軟體對讀者曾經購買過的書以及該讀者對其他書的評價進行分析後,將向讀者推薦他可能喜歡的新書,只要滑鼠點一下,就可以買到該書;AMAZON能對顧客購買過的東西進行自動分析,然後因人而異的提出合適的建議。讀者的信息將被再次保存,這樣顧客下次來時就能更容易的買到想要的書。此外,完善的售後服務也是AMAZON的優勢,讀者可以在拿到書籍的30天內,將完好無損的書和音樂光碟退回AMAZON,AMAZON將原價退款。當然AMAZON的成功還不止於此,如果一位顧客在AMAZON購買一本書,下次他再次訪問時,映入眼簾的首先是這位顧客的名字和歡迎的字樣。

Ⅳ Python實現協同過濾推薦演算法,用的大一些的數據集就報錯MemoryError

  1. python雖然易用,但是內存佔用比較多;所以如果你有C/C++/Java基礎,考慮用這些語專言來實現;

  2. CF演算法屬需要計算大量的相似度,如果能把中間結果存起來,或者簡化計算過程(如,你可能會重復計算一個item的均值)可以省下不少內存;(個人試過計算1w個用戶Pearson是沒問題的)

  3. 如果內存實在不夠用,那就用時間換空間,把中間計算結果分成小文件存到磁碟上,用的時候再讀取。

    供參考。

Ⅵ 協同過濾,基於內容推薦有什麼區別

舉個簡單的小例子,我們已知道
用戶u1喜歡的電影是A,B,C
用戶u2喜歡的電影是A, C, E, F
用戶u3喜歡的電影是B,D
我們需要解決的問題是:決定對u1是不是應該推薦F這部電影
基於內容的做法:要分析F的特徵和u1所喜歡的A、B、C的特徵,需要知道的信息是A(戰爭片),B(戰爭片),C(劇情片),如果F(戰爭片),那麼F很大程度上可以推薦給u1,這是基於內容的做法,你需要對item進行特徵建立和建模。
協同過濾的辦法:那麼你完全可以忽略item的建模,因為這種辦法的決策是依賴user和item之間的關系,也就是這里的用戶和電影之間的關系。我們不再需要知道ABCF哪些是戰爭片,哪些是劇情片,我們只需要知道用戶u1和u2按照item向量表示,他們的相似度比較高,那麼我們可以把u2所喜歡的F這部影片推薦給u1。
根據數據源的不同推薦引擎可以分為三類
1、基於人口的統計學推薦(Demographic-based Recommendation)
2、基於內容的推薦(Content-based Recommendation)
3、基於協同過濾的推薦(Collaborative Filtering-based Recommendation)
基於內容的推薦:
根據物品或內容的元數據,發現物品或內容的相關性,然後基於用戶以前的喜好記錄推薦給用戶相似的物品
基於內容推薦的一個典型的例子,電影推薦系統,首先我們需要對電影的元數據有一個建模,這里只簡單的描述了一下電影的類型;然後通過電影的元數據發現電影間的相似度,因為類型都是「愛情,浪漫」電影 A 和 C 被認為是相似的電影(當然,只根據類型是不夠的,要得到更好的推薦,我們還可以考慮電影的導演,演員等等);最後實現推薦,對於用戶 A,他喜歡看電影 A,那麼系統就可以給他推薦類似的電影 C。

Ⅶ 協同過濾和基於內容推薦有什麼區別

基於物品的協同過濾,首先從資料庫里獲取他之前喜歡的東西,然後從剩下的物品中找到和專他歷史興趣近屬似的物品推薦給他。核心是要計算兩個物品的相似度。

內容過濾的基本思想是,給用戶推薦和他們之前喜歡的物品在內容上相似的其他物品。核心任務就是計算物品的內容相似度。

Ⅷ 協同過濾演算法和聚類演算法有什麼區別

協同過濾多處理的是異構數據,數據差別大種類多;聚類多處理的是同構數據

Ⅸ 協同過濾中的實時性定義及解決思路

自從第一台IoT設備於年問世以來,物聯網已經有了長足的發展,這是一種可以在互聯網上開啟和關閉的烤麵包機。27年之後,聯網設備已經從新奇產品變成了日常生活中必不可少的一部分。

最近的預估顯示,成年人平均每天花在智能手機上的時間超過4個小時,只能手機也是一種裝有物聯網感測器數據的設備。目前,81%的成年人擁有智能手機。想像一下,當81%的成年人擁有智能汽車和智能家居時,我們將會收到多少數據。
今天,IoT設備的大部分數據都在雲中處理,這意味著全球所有角落產生的數據都被集中發送到數據中心的少數計算機上。然而,隨著IoT設備的數量預計將在2020年猛增至200億,通過互聯網發送數據的體積和速度對雲計算方法提出了嚴峻的挑戰。

越來越多的設備連接將迫使IoT製造商在2018年將雲計算模式從雲計算模式轉移到一種稱為「霧計算」的新模式。

越來越多的數據訪問,雲計算問題明顯
物聯網和人工智慧的發展將帶來價值數以億計的數據。分布廣泛的感測器、智能終端等每時每刻都在產生大量的數據。盡管雲計算擁有「無限」的計算和存儲資源池,但雲數據中心往往是集中化的且距離終端設備較遠,當面對大量的分布廣泛的終端設備及所採集的海量數據時,雲不可避免地遇到了三大難題:
網路擁塞,如果大量的物聯網和人工智慧應用部署在雲中,將會有海量的原始數據不間斷地湧入核心網路,造成核心網路擁塞;
高延遲,終端設備與雲數據中心的較遠距離將導致較高的網路延遲,而對實時性要求高的應用則難以滿足需求;
可靠性無法保證,對可靠性和安全性要求較高的應用,由於從終端到雲平台的距離遠,通信通路長,因而風險大,雲中備份的成本也高。

因此,為滿足物聯網和人工智慧等應用的需求,作為雲計算的延伸擴展,霧計算(Fog Computing)的概念應運而生。霧計算最早由思科提出,它是一種分布式的計算模型,作為雲數據中心和物聯網設備 / 感測器之間的中間層,它提供計算、網路和存儲設備,讓基於雲的服務可以離物聯網設備和感測器更近。
霧計算主要使用邊緣網路中的設備,可以是傳統網路設備,如網路中的路由器、交換機、網關等,也可以是專門部署的本地伺服器。這些設備的資源能力都遠小於一個數據中心,但是它們龐大的數量可以彌補單一設備資源的不足。
在物聯網中,霧可以過濾、聚合用戶消息,匿名處理用戶數據以保證隱秘性,初步處理數據以便實時決策,提供臨時存儲以提升用戶體驗,而雲則可以負責大運算量或長期存儲任務,與霧計算優勢互補。通過霧計算,可以將一些並不需要放到雲上的數據在網路邊緣層直接進行處理和存儲,提高數據分析處理的效率,降低時延,減少網路傳輸壓力,提升安全性。霧計算以其廣泛的地理分布、帶有大量網路節點的大規模感測器網路、支持高移動性和實時互動以及多樣化的軟硬體設備和雲在線分析等特點,迅速被物聯網和人工智慧應用領域的企業所接受並獲得廣泛應用,例如,M2M、人機協同、智能電網、智能交通、智能家居、智能醫療、無人駕駛等應用。
與邊緣計算(Edge Computing)不同的是,霧計算可以將基於雲的服務 , 如 IaaS、 PaaS、 SaaS,拓展到網路邊緣,而邊緣計算更多地專注於終端設備端。霧計算可以進行邊緣計算,但除了邊緣網路,霧計算也可以拓展到核心網路,也就是邊緣和核心網路的組件都可以作為霧計算的基礎設施。

「雲」和「霧」典型案例和應用場景
融合雲平台和霧計算,一方面可通過雲降低傳統 IT采購、管理和運維的開支,將 IaaS、 PaaS、 SaaS作為雲服務輸出;另一方面,通過霧計算可保證邊緣端數據的實時搜集、提取和分析速度,提高網路資源部署使用和管理效率,有助於提高人機協同效率,為企業業務創新、服務品質提升提供技術支持。以下是四個行業「雲」和「霧」的典型案例和應用場景。

工業
GE基於 Pivotal Cloud Foundry打造了 Predix 物聯網 PaaS平台,結合戴爾智能模擬技術,實現了「數據雙胞胎」。基於雲計算,GE 實現了飛機發動機生產過程中的調優,同時,基於霧計算,GE 實現了飛機飛行過程中的「自愈」。
GE Predix 作為物聯網 PaaS 平台,還助力製造企業將大數據、物聯網和人工智慧轉化為智能製造能力,實現數據創新。GE Predix 平台,融合雲計算和霧計算以及」數字雙胞胎「,幫助製造企業實現「虛擬 - 現實」的設計生產融合,並為其提供雲計算服務。
農業
Chitale Dairy是一家乳製品廠。基於戴爾科技虛擬化技術,Chitale Dairy實現了 ERP雲部署。他們基於霧計算,通過為奶牛裝上感測器,進行近實時數據採集分析、處理,實現精細化運營,保證乳製品生產全流程的監控、管理、優化。同時,Chitale Dairy 通過基於雲的乳業生命周期管理平台,實現了乳製品生產流程自動化管理,通過物聯網和大數據分析,對每頭奶牛從食料、喂養、健康、牛奶質量和產量進行全流程監控分析,實現精細化和自動化乳業生產。
將雲的整體業務管理和霧端的優化農場間協作以及奶源監控管理緊密連接起來,在提高乳製品生命周期管理效率的同時,提升了協同和協作效率,加速企業業務創新的速度。

服務業
TopGolf 是一家高爾夫俱樂部。通過採用戴爾科技的虛擬化和超融合技術,形成了高爾夫數字化高端服務輸出能力。他們通過向數字化轉型,打破了傳統高爾夫的業務模式。通過物聯網,將 RFID 晶元嵌入高爾夫球里,實現對每次擊球、每個隊員和賽事進行實時監控,並基於霧計算,實時跟蹤和分析每個擊球動作和球的路徑,實現實時積分。
TopGolf 的業務模式融合了雲計算和霧計算,實現了跨數據中心、雲和邊緣應用的實時數據監控、交互和管理,滿足賽事實時監控、場上場下互動、賽前球員積分分析、社交媒體、會員個性化數據管理等大數據分析的需求。

交通業
在智能交通中,可通過感測器搜集信息,進行實時數據分析和交通部署,以提高公共安全。通過霧計算,智能交通控制系統中的一個霧節點可以共享收集到的交通信息,以緩解高峰時段的交通擁堵、定位交通事故,並可以通過遠程式控制制緩解交通擁堵區域的交通狀況。同時,在每個用戶的電話和公共交通中,基於霧計算的應用程序允許用戶在沒有持續網路連接的情況下,共享並通過附近的用戶下載內容。
此外,自動化車輛的安全系統、道路上的監控系統以及公共交通的票務系統,都可以從感測器和視頻數據中收集大量信息。聚合後的數據將傳輸到雲上,根據用戶的需求進行數據提取和分析,再基於霧計算實現邊緣數據實時分析,從而為用戶快速提供精準信息,以保障公共交通的暢通和安全。

未來霧計算將扮演重大角色
從商業運營模式到工作生活方式,智能物聯網技術正深刻改變著人類社會。要讓物聯網擁有無處不在的智能,就必須充分利用網路環境中分散存在的計算、存儲、通信和控制等能力,通過資源共享機制和協同服務架構來有效提升生產效率或用戶體驗。

當前,霧計算技術的研究和標准化工作剛剛起步。我們面臨的主要技術挑戰和研究熱點為:如何在霧計算節點之間建立信任關系,如何在它們之間推動資源充分共享,如何在雲—霧—邊緣等多層次之間實現高效通信和緊密協作,如何在異構節點之間完成復雜任務的公平按需分配等。
可以預見,隨著霧計算技術的不斷發展成熟和普及應用,智能物聯網將越來越便捷、越來越真實地借鑒和映射人類社會的組織架構和決策機制,從而能用更自然和更熟悉的方式為每個人提供觸手可及、無處不在的智能服務。

Ⅹ 協同過濾java用什麼實現

眾所周知,java在處理數據量比較大的時候,載入到內存必然會導致內存溢出,而在一些數據處理中我們不得不去處理海量數據,在做數據處理中,我們常見的手段是分解,壓縮,並行,臨時文件等方法;例如,我們要將資料庫(不論是什麼資料庫)的數據導出到一個文件,一般是Excel或文本格式的CSV;對於Excel來講,對於POI和JXL的介面,你很多時候沒有法去控制內存什麼時候向磁碟寫入,很惡心,而且這些API在內存構造的對象大小將比數據原有的大小要大很多倍數,所以你不得不去拆分Excel,還好,POI開始意識到這個問題,在3.8.4的版本後,開始提供cache的行數,提供了SXSSFWorkbook的介面,可以設置在內存中的行數,不過可惜的是,他當你超過這個行數,每添加一行,它就將相對行數前面的一行寫入磁碟(如你設置2000行的話,當你寫第20001行的時候,他會將第一行寫入磁碟),其實這個時候他些的臨時文件,以至於不消耗內存,不過這樣你會發現,刷磁碟的頻率會非常高,我們的確不想這樣,因為我們想讓他達到一個范圍一次性將數據刷如磁碟,比如一次刷1M之類的做法,可惜現在還沒有這種API,很痛苦,我自己做過測試,通過寫小的Excel比使用目前提供刷磁碟的API來寫大文件,效率要高一些,而且這樣如果訪問的人稍微多一些磁碟IO可能會扛不住,因為IO資源是非常有限的,所以還是拆文件才是上策;而當我們寫CSV,也就是文本類型的文件,我們很多時候是可以自己控制的,不過你不要用CSV自己提供的API,也是不太可控的,CSV本身就是文本文件,你按照文本格式寫入即可被CSV識別出來;如何寫入呢?下面來說說。。。在處理數據層面,如從資料庫中讀取數據,生成本地文件,寫代碼為了方便,我們未必要1M怎麼來處理,這個交給底層的驅動程序去拆分,對於我們的程序來講我們認為它是連續寫即可;我們比如想將一個1000W數據的資料庫表,導出到文件;此時,你要麼進行分頁,oracle當然用三層包裝即可,mysql用limit,不過分頁每次都會新的查詢,而且隨著翻頁,會越來越慢,其實我們想拿到一個句柄,然後向下游動,編譯一部分數據(如10000行)將寫文件一次(寫文件細節不多說了,這個是最基本的),需要注意的時候每次buffer的數據,在用outputstream寫入的時候,最好flush一下,將緩沖區清空下;接下來,執行一個沒有where條件的SQL,會不會將內存撐爆?是的,這個問題我們值得去思考下,通過API發現可以對SQL進行一些操作,例如,通過:PreparedStatementstatement=connection.prepareStatement(sql),這是默認得到的預編譯,還可以通過設置:PreparedStatementstatement=connection.prepareStatement(sql,ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);來設置游標的方式,以至於游標不是將數據直接cache到本地內存,然後通過設置statement.setFetchSize(200);設置游標每次遍歷的大小;OK,這個其實我用過,oracle用了和沒用沒區別,因為oracle的jdbcAPI默認就是不會將數據cache到java的內存中的,而mysql里頭設置根本無效,我上面說了一堆廢話,呵呵,我只是想說,java提供的標准API也未必有效,很多時候要看廠商的實現機制,還有這個設置是很多網上說有效的,但是這純屬抄襲;對於oracle上面說了不用關心,他本身就不是cache到內存,所以java內存不會導致什麼問題,如果是mysql,首先必須使用5以上的版本,然後在連接參數上加上useCursorFetch=true這個參數,至於游標大小可以通過連接參數上加上:defaultFetchSize=1000來設置,例如:jdbc:mysql://xxx.xxx.xxx.xxx:3306/abc?zeroDateTimeconvertToNull&useCursorFetch=true&defaultFetchSize=1000上次被這個問題糾結了很久(mysql的數據老導致程序內存膨脹,並行2個直接系統就宕了),還去看了很多源碼才發現奇跡竟然在這里,最後經過mysql文檔的確認,然後進行測試,並行多個,而且數據量都是500W以上的,都不會導致內存膨脹,GC一切正常,這個問題終於完結了。我們再聊聊其他的,數據拆分和合並,當數據文件多的時候我們想合並,當文件太大想要拆分,合並和拆分的過程也會遇到類似的問題,還好,這個在我們可控制的范圍內,如果文件中的數據最終是可以組織的,那麼在拆分和合並的時候,此時就不要按照數據邏輯行數來做了,因為行數最終你需要解釋數據本身來判定,但是只是做拆分是沒有必要的,你需要的是做二進制處理,在這個二進制處理過程,你要注意了,和平時read文件不要使用一樣的方式,平時大多對一個文件讀取只是用一次read操作,如果對於大文件內存肯定直接掛掉了,不用多說,你此時因該每次讀取一個可控范圍的數據,read方法提供了重載的offset和length的范圍,這個在循環過程中自己可以計算出來,寫入大文件和上面一樣,不要讀取到一定程序就要通過寫入流flush到磁碟;其實對於小數據量的處理在現代的NIO技術的中也有用到,例如多個終端同時請求一個大文件下載,例如視頻下載吧,在常規的情況下,如果用java的容器來處理,一般會發生兩種情況:其一為內存溢出,因為每個請求都要載入一個文件大小的內存甚至於,因為java包裝的時候會產生很多其他的內存開銷,如果使用二進制會產生得少一些,而且在經過輸入輸出流的過程中還會經歷幾次內存拷貝,當然如果有你類似nginx之類的中間件,那麼你可以通過send_file模式發送出去,但是如果你要用程序來處理的時候,內存除非你足夠大,但是java內存再大也會有GC的時候,如果你內存真的很大,GC的時候死定了,當然這個地方也可以考慮自己通過直接內存的調用和釋放來實現,不過要求剩餘的物理內存也足夠大才行,那麼足夠大是多大呢?這個不好說,要看文件本身的大小和訪問的頻率;其二為假如內存足夠大,無限制大,那麼此時的限制就是線程,傳統的IO模型是線程是一個請求一個線程,這個線程從主線程從線程池中分配後,就開始工作,經過你的Context包裝、Filter、攔截器、業務代碼各個層次和業務邏輯、訪問資料庫、訪問文件、渲染結果等等,其實整個過程線程都是被掛住的,所以這部分資源非常有限,而且如果是大文件操作是屬於IO密集型的操作,大量的CPU時間是空餘的,方法最直接當然是增加線程數來控制,當然內存足夠大也有足夠的空間來申請線程池,不過一般來講一個進程的線程池一般會受到限制也不建議太多的,而在有限的系統資源下,要提高性能,我們開始有了newIO技術,也就是NIO技術,新版的裡面又有了AIO技術,NIO只能算是非同步IO,但是在中間讀寫過程仍然是阻塞的(也就是在真正的讀寫過程,但是不會去關心中途的響應),還未做到真正的非同步IO,在監聽connect的時候他是不需要很多線程參與的,有單獨的線程去處理,連接也又傳統的socket變成了selector,對於不需要進行數據處理的是無需分配線程處理的;而AIO通過了一種所謂的回調注冊來完成,當然還需要OS的支持,當會掉的時候會去分配線程,目前還不是很成熟,性能最多和NIO吃平,不過隨著技術發展,AIO必然會超越NIO,目前谷歌V8虛擬機引擎所驅動的node.js就是類似的模式,有關這種技術不是本文的說明重點;將上面兩者結合起來就是要解決大文件,還要並行度,最土的方法是將文件每次請求的大小降低到一定程度,如8K(這個大小是經過測試後網路傳輸較為適宜的大小,本地讀取文件並不需要這么小),如果再做深入一些,可以做一定程度的cache,將多個請求的一樣的文件,cache在內存或分布式緩存中,你不用將整個文件cache在內存中,將近期使用的cache幾秒左右即可,或你可以採用一些熱點的演算法來配合;類似迅雷下載的斷點傳送中(不過迅雷的網路協議不太一樣),它在處理下載數據的時候未必是連續的,只要最終能合並即可,在伺服器端可以反過來,誰正好需要這塊的數據,就給它就可以;才用NIO後,可以支持很大的連接和並發,本地通過NIO做socket連接測試,100個終端同時請求一個線程的伺服器,正常的WEB應用是第一個文件沒有發送完成,第二個請求要麼等待,要麼超時,要麼直接拒絕得不到連接,改成NIO後此時100個請求都能連接上伺服器端,服務端只需要1個線程來處理數據就可以,將很多數據傳遞給這些連接請求資源,每次讀取一部分數據傳遞出去,不過可以計算的是,在總體長連接傳輸過程中總體效率並不會提升,只是相對相應和所開銷的內存得到量化控制,這就是技術的魅力,也許不要太多的演算法,不過你得懂他。類似的數據處理還有很多,有些時候還會將就效率問題,比如在HBase的文件拆分和合並過程中,要不影響線上業務是比較難的事情,很多問題值得我們去研究場景,因為不同的場景有不同的方法去解決,但是大同小異,明白思想和方法,明白內存和體系架構,明白你所面臨的是沈陽的場景,只是細節上改變可以帶來驚人的效果。

閱讀全文

與協同過濾相關的資料

熱點內容
寺廟是地獄的電影 瀏覽:395
反滲透膜端蓋尺寸 瀏覽:274
電腦可以免費看的網站 瀏覽:247
重慶污水提升器什麼品牌好 瀏覽:335
丁巴度電影全集 瀏覽:527
大黃粉和蒸餾水的顯微結構圖 瀏覽:583
石油蒸餾產物中毒 瀏覽:481
凱越什麼濾芯好 瀏覽:480
80年代蛇魔電影 瀏覽:723
兩男大尺度電影 瀏覽:552
最近剛上市電影 瀏覽:62
雲米的凈水器濾芯與小米的有什麼區別 瀏覽:738
期貨用什麼軟體回測 瀏覽:699
利用濕地進行污水處理 瀏覽:489
韓國健身的電影是 瀏覽:526
房子前面有污水河 瀏覽:387
好看的免費電影網 瀏覽:263
美人魚2重返大海國語配音 瀏覽:948
四川環保污水處理水泵設備 瀏覽:646
子長污水檢查井多少錢一座 瀏覽:378