導航:首頁 > 凈水問答 > 協同過濾的數據量過大

協同過濾的數據量過大

發布時間:2021-01-19 04:49:48

A. 如何解決協同過濾的數據稀疏問題

以對原始的評分數據集進行變換,用評分值相對於平均評分值的偏差取代原始值,如基於物品過濾的數據預處理Amazon.com採用物品間

B. 如何讓Hadoop結合R語言做大數據分析

R語言和Hadoop讓我們體會到了,兩種技術在各自領域的強大。很多開發人員在計算機的角度,都會提出下面2個問題。問題1: Hadoop的家族如此之強大,為什麼還要結合R語言?
問題2: Mahout同樣可以做數據挖掘和機器學習,和R語言的區別是什麼?下面我嘗試著做一個解答:問題1: Hadoop的家族如此之強大,為什麼還要結合R語言?

a. Hadoop家族的強大之處,在於對大數據的處理,讓原來的不可能(TB,PB數據量計算),成為了可能。
b. R語言的強大之處,在於統計分析,在沒有Hadoop之前,我們對於大數據的處理,要取樣本,假設檢驗,做回歸,長久以來R語言都是統計學家專屬的工具。
c. 從a和b兩點,我們可以看出,hadoop重點是全量數據分析,而R語言重點是樣本數據分析。 兩種技術放在一起,剛好是最長補短!
d. 模擬場景:對1PB的新聞網站訪問日誌做分析,預測未來流量變化
d1:用R語言,通過分析少量數據,對業務目標建回歸建模,並定義指標d2:用Hadoop從海量日誌數據中,提取指標數據d3:用R語言模型,對指標數據進行測試和調優d4:用Hadoop分步式演算法,重寫R語言的模型,部署上線這個場景中,R和Hadoop分別都起著非常重要的作用。以計算機開發人員的思路,所有有事情都用Hadoop去做,沒有數據建模和證明,」預測的結果」一定是有問題的。以統計人員的思路,所有的事情都用R去做,以抽樣方式,得到的「預測的結果」也一定是有問題的。所以讓二者結合,是產界業的必然的導向,也是產界業和學術界的交集,同時也為交叉學科的人才提供了無限廣闊的想像空間。問題2: Mahout同樣可以做數據挖掘和機器學習,和R語言的區別是什麼?

a. Mahout是基於Hadoop的數據挖掘和機器學習的演算法框架,Mahout的重點同樣是解決大數據的計算的問題。
b. Mahout目前已支持的演算法包括,協同過濾,推薦演算法,聚類演算法,分類演算法,LDA, 樸素bayes,隨機森林。上面的演算法中,大部分都是距離的演算法,可以通過矩陣分解後,充分利用MapRece的並行計算框架,高效地完成計算任務。
c. Mahout的空白點,還有很多的數據挖掘演算法,很難實現MapRece並行化。Mahout的現有模型,都是通用模型,直接用到的項目中,計算結果只會比隨機結果好一點點。Mahout二次開發,要求有深厚的JAVA和Hadoop的技術基礎,最好兼有 「線性代數」,「概率統計」,「演算法導論」 等的基礎知識。所以想玩轉Mahout真的不是一件容易的事情。
d. R語言同樣提供了Mahout支持的約大多數演算法(除專有演算法),並且還支持大量的Mahout不支持的演算法,演算法的增長速度比mahout快N倍。並且開發簡單,參數配置靈活,對小型數據集運算速度非常快。
雖然,Mahout同樣可以做數據挖掘和機器學習,但是和R語言的擅長領域並不重合。集百家之長,在適合的領域選擇合適的技術,才能真正地「保質保量」做軟體。

如何讓Hadoop結合R語言?

從上一節我們看到,Hadoop和R語言是可以互補的,但所介紹的場景都是Hadoop和R語言的分別處理各自的數據。一旦市場有需求,自然會有商家填補這個空白。

1). RHadoop

RHadoop是一款Hadoop和R語言的結合的產品,由RevolutionAnalytics公司開發,並將代碼開源到github社區上面。RHadoop包含三個R包 (rmr,rhdfs,rhbase),分別是對應Hadoop系統架構中的,MapRece, HDFS, HBase 三個部分。

2). RHiveRHive是一款通過R語言直接訪問Hive的工具包,是由NexR一個韓國公司研發的。

3). 重寫Mahout用R語言重寫Mahout的實現也是一種結合的思路,我也做過相關的嘗試。

4).Hadoop調用R

上面說的都是R如何調用Hadoop,當然我們也可以反相操作,打通JAVA和R的連接通道,讓Hadoop調用R的函數。但是,這部分還沒有商家做出成形的產品。

5. R和Hadoop在實際中的案例

R和Hadoop的結合,技術門檻還是有點高的。對於一個人來說,不僅要掌握Linux, Java, Hadoop, R的技術,還要具備 軟體開發,演算法,概率統計,線性代數,數據可視化,行業背景 的一些基本素質。在公司部署這套環境,同樣需要多個部門,多種人才的的配合。Hadoop運維,Hadoop演算法研發,R語言建模,R語言MapRece化,軟體開發,測試等等。所以,這樣的案例並不太多。

C. 在Android想實現協同過濾演算法,數據能從SQLite導入嗎

首先你應該來知道思維導圖自是改變思維習慣的,我想推薦的是 東尼。博攢 和巴利。博攢的相關東西,首先第一位是大腦和學習世界超級作家,有過80多部名著,記憶力錦標賽創始人等等,第二位是經濟學國際關系研究專家等等。它們出版了一本叫思維導圖的圖書 是思維導圖學習的經典,除了《思維導圖》還有《超級記憶》《啟動大腦》《快速閱讀》《博攢學習技巧》等書,但是要學習思維導圖,就應該看《思維導圖》,堪稱經典,而且又不貴,這本書會介紹新概念-------發散思維,其次是用的工具,然後讓你智力自由控制思維,讓你有發散思維的體驗,最後讓你在探索新領域的時候有一種全新刺激的收獲,對人改善思維有很大幫助,如果想學習製作思維導圖,這本書更是提供了很好的幫助,一步一步的教授,我第一次看了之後就深深地喜歡上了,所以把全套的都買下來了,很便宜,希望你喜歡。

D. 協同過濾 推薦怎麼處理原始數據集

以對原始的評分數據集進行變換,用評分值相對於平均評分值的偏差取代原始值,如...基於物品過濾的數據預處理 Amazon.com採用物品間

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

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

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

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

    供參考。

F. 如何建立一個完整可用的安全大數據平台

整體而言,大數據平台從平台部署和數據分析過程可分為如下幾步:
1、linux系統安裝
一般使用開源版的Redhat系統--CentOS作為底層平台。為了提供穩定的硬體基礎,在給硬碟做RAID和掛載數據存儲節點的時,需要按情況配置。例如,可以選擇給HDFS的namenode做RAID2以提高其穩定性,將數據存儲與操作系統分別放置在不同硬碟上,以確保操作系統的正常運行。

2、分布式計算平台/組件安裝
目前國內外的分布式系統的大多使用的是Hadoop系列開源系統。Hadoop的核心是HDFS,一個分布式的文件系統。在其基礎上常用的組件有Yarn、Zookeeper、Hive、Hbase、Sqoop、Impala、ElasticSearch、Spark等。
先說下使用開源組件的優點:1)使用者眾多,很多bug可以在網上找的答案(這往往是開發中最耗時的地方)。2)開源組件一般免費,學習和維護相對方便。3)開源組件一般會持續更新,提供必要的更新服務『當然還需要手動做更新操作』。4)因為代碼開源,若出bug可自由對源碼作修改維護。
再簡略講講各組件的功能。分布式集群的資源管理器一般用Yarn,『全名是Yet Another Resource Negotiator』。常用的分布式數據數據『倉』庫有Hive、Hbase。Hive可以用SQL查詢『但效率略低』,Hbase可以快速『近實時』讀取行。外部資料庫導入導出需要用到Sqoop。Sqoop將數據從Oracle、MySQL等傳統資料庫導入Hive或Hbase。Zookeeper是提供數據同步服務,Yarn和Hbase需要它的支持。Impala是對hive的一個補充,可以實現高效的SQL查詢。ElasticSearch是一個分布式的搜索引擎。針對分析,目前最火的是Spark『此處忽略其他,如基礎的MapRece 和 Flink』。Spark在core上面有ML lib,Spark Streaming、Spark QL和GraphX等庫,可以滿足幾乎所有常見數據分析需求。
值得一提的是,上面提到的組件,如何將其有機結合起來,完成某個任務,不是一個簡單的工作,可能會非常耗時。

3、數據導入
前面提到,數據導入的工具是Sqoop。用它可以將數據從文件或者傳統資料庫導入到分布式平台『一般主要導入到Hive,也可將數據導入到Hbase』。

4、數據分析
數據分析一般包括兩個階段:數據預處理和數據建模分析。
數據預處理是為後面的建模分析做准備,主要工作時從海量數據中提取可用特徵,建立大寬表。這個過程可能會用到Hive SQL,Spark QL和Impala。
數據建模分析是針對預處理提取的特徵/數據建模,得到想要的結果。如前面所提到的,這一塊最好用的是Spark。常用的機器學習演算法,如樸素貝葉斯、邏輯回歸、決策樹、神經網路、TFIDF、協同過濾等,都已經在ML lib裡面,調用比較方便。

5、結果可視化及輸出API
可視化一般式對結果或部分原始數據做展示。一般有兩種情況,行熟悉展示,和列查找展示。在這里,要基於大數據平台做展示,會需要用到ElasticSearch和Hbase。Hbase提供快速『ms級別』的行查找。 ElasticSearch可以實現列索引,提供快速列查找。

平台搭建主要問題:
1、穩定性 Stability
理論上來說,穩定性是分布式系統最大的優勢,因為它可以通過多台機器做數據及程序運行備份以確保系統穩定。但也由於大數據平台部署於多台機器上,配置不合適,也可能成為最大的問題。 曾經遇到的一個問題是Hbase經常掛掉,主要原因是采購的硬碟質量較差。硬碟損壞有時會到導致Hbase同步出現問題,因而導致Hbase服務停止。由於硬碟質量較差,隔三差五會出現服務停止現象,耗費大量時間。結論:大數據平台相對於超算確實廉價,但是配置還是必須高於家用電腦的。

2、可擴展性 Scalability
如何快速擴展已有大數據平台,在其基礎上擴充新的機器是雲計算等領域應用的關鍵問題。在實際2B的應用中,有時需要增減機器來滿足新的需求。如何在保留原有功能的情況下,快速擴充平台是實際應用中的常見問題。

上述是自己項目實踐的總結。整個平台搭建過程耗時耗力,非一兩個人可以完成。一個小團隊要真正做到這些也需要耗費很長時間。

目前國內和國際上已有多家公司提供大數據平台搭建服務,國外有名的公司有Cloudera,Hortonworks,MapR等,國內也有華為、明略數據、星環等。另外有些公司如明略數據等還提供一體化的解決方案,尋求這些公司合作對 於入門級的大數據企業或沒有大數據分析能力的企業來說是最好的解決途徑。

對於一些本身體量較小或者目前數據量積累較少的公司,個人認為沒有必要搭建這一套系統,暫時先租用AWS和阿里雲就夠了。對於數據量大,但數據分析需求較簡單的公司,可以直接買Tableau,Splunk,HP Vertica,或者IBM DB2等軟體或服務即可。

G. 基於協同過濾的推薦系統的資料庫在什麼環境平台構建

大體試用了一下三個系統,得出了一個比較粗淺的結論: 1、phpcms: phpcms自2007版本開源以後才開始引起廣泛關注,但這次也是頭一次研究。用了幾天,有了一點初步的印象。(以下以2007版為例,2008版尚未正式推出) 粗看起來,phpcms 2007是三者中最為完善的,各項功能考慮的很細致,導致進了新手進了後台先要暈半天才行。各項功能,比如UNIX系統的許可權、模版修改、廣告、商城、信息、單網頁。。。。都做的相當的完備了。 發表文章的關鍵字、作者、來源、自動遠程圖片保存等等,都做的不錯。但是,phpcms發表文章的摘要,似乎是只能自動截取,不能手工設置,靈活性欠佳。 發表的文章可以通過關鍵字來索引相關貼,做的不錯。 支持通行證方式進行論壇和其它系統的整合,可以進行正向和反向兩種方式的整合。但是文檔說的不太清楚,研究了半天才成功。但是反向整合pw5.0.1登錄後自動跳轉不回來。 phpcms 2007的後台安排的太瑣碎,看的頭暈。發一篇文章也要暈半個鍾頭,而且首頁的更新莫不清規律,幻燈片老半天不更新。 phcms盡管功能很強大,但是卻缺少一樣重要的東西:可視化的模版工具,這也是php168和dedecms共同的缺點。在這方面,他們甚至不如剛剛起步的DiyPage好,DiyPage只是一個剛剛具備了雛形的CMS系統,卻擁有一個很方便的後台可視化界面設計工具,即使是菜鳥也可以輕松設計界面(雖然靈活性沒那麼強大,但是足夠你用了)。 phpcms 2007整體以頻道為依據進行組織,即使你不想用頻道,哪也得用,這個已經由不了你了 。所以如果僅僅是一個比較簡單的網站,也用上一個頻道,看起來夠別扭的,這是phpcms 2007最大的缺點,不過看了phpcms 2008beta2發現,phpcms終於解除了這個垃圾限制。 發現phpcms的廣告功能似乎不完善,一個廣告位定義了兩個廣告,不能自動輪換,總是顯示第一個。 phpcms雖然實現了模塊化,但是不管你用不用,一大堆模塊稀里呼嚕就裝上了,看起來很不爽,也不直觀。 phpcms雖然是很早就是商業化運作的軟體,然後開發效率卻是不高,新版本屢屢跳票,影響了它的產品形象,讓開源以來積累的人氣和一些擁躉大失所望。然而最近貼上了六間房以後,資金應該是沒有壓力了,新版本也開始浮出水面,2008beta1已經發布了,可惜問題多多。 phpcms 2008 beta2 在 MySQL4 上還是有使用問題,不過比beta1強一些,beta1直接就安裝不了,不知道正式版是否會正式放棄MySQL4。 phpcms 2008beta2看上去不錯,新功能令人振奮的,界面清爽。以前一團亂麻的後台界面已經打掃干凈了。phpcms 2008的標簽採用了中英文混合的方式,對菜鳥來說更加容易上手,比較新穎。另外,beta2好像是實現了類似php168的可視化模版中的標簽設置方式,雖然不是可視化的設計模版,總歸可以自定義一些元素樣式了。不過這個beta2版也還是頂多算是個預覽版,BUG極多,功能不全。如果准備用phpcms的話,怕是還要大大的等幾天才行。 另外,phpcms官方論壇對免費版的支持很不到位,傷了很多粉絲的心。 2、dedecms 5.1應該是dedecms正式商業化運作以後推出的第一個版本吧?以前的dedecms個體作坊式的發展,由於作者兼職時間和精力不足,導致發展緩慢,新版本頻頻跳票,引起廣大粉絲的強烈不滿,甚至導致柏拉圖和dedecms用家之間的語言沖突。然而dedecms在商業化運作以後,新版本的發布周期大大縮短,產品功能不斷改進,界面美化了很多,人氣和用戶數量大大增長了,現在看發展勢頭不錯。 dedecms的根目錄是最簡單的,只有幾個文件,比以上兩個都強多了,其實這樣不僅看起來清爽,維護起來也方便,值得表揚 dedecms的頻道非常費解,看起來只有頻道模型,要增加頻道就要添加模版文件有點費解,仔細研究發現,這個dedecms其實和php168的方式差不多,任何欄目都可以添加子目錄,綁定域名,其實就和頻道是一個意思,欄目和頻道可以互相轉換。 dedecms的通行證只支持反向整合,就是dedecms可以用服務端的用戶數據登錄。其實所謂整合,一般也就是這樣的。論壇用整站用戶數據的情況恐怕極為少見,對論壇管理也不利。 但是dedecms的通行證整合,需要修改論壇文件,不明白為啥要這樣,是因為論壇的通行證功能還不完善嗎? dedecms的廣告管理用起來比較麻煩,要先定義標簽,然後手工在模板中插入。好像模版上沒預定義好廣告位置,實在是太不應該了。。。。相當於手動操作,不符合當今歷史潮流啊。而且大家常用的廣告自動輪換功能,也沒有實現。 試用發現,dedecms有時還有一些小毛病,比如遠程附件功能,有時發現無法自動轉存到本地。另外,在模塊數量上,dedecms也無法和php168和phpcms相比,只有文章、下載、圖片、Flash等基本的功能,不知道dedecms 2007發布以後能否有所改觀 dedecms的相關文章、熱點文章等功能,用了靜態生成的方式直接寫入到了HTML文件中,這樣在生成HTML後,無法自動更新,需要經常手工重新生成全部HTML才能更新相關文檔和熱點文檔。但是大量的重復生成所有HTML文件效率太低下了,這方面dedecms不如php168最新添加的相關文章功能,是用JS方式實現的,不需要更新HTML就能自動索取最新的相關文章。但是使用JS方式也存在伺服器效率的問題。 dedecms的首頁、列表頁、還有文章頁都使用了單獨的模板,沒有使用header和footer模板,這樣的好處是可以產生各種風格的頁面(允許首頁、列表頁、內容頁使用不同的風格),但是缺點是修改添加頭部和底部廣告、導航條的時候,相當費勁,要一個一個模板的修改。而且dedecms的版權聲明欄位設置太小,只有250位元組,寫不進去多少內容,頂多能添加個計數器就不錯了。 dedecms起步就用了類似XML標簽方式,而且官方還提供了Dreamweaver的插件來識別標簽,應該說在國內是比較獨到的。但是這種方式也需要新手一定的時間才能適應。同時,dedecms一直缺乏比較完善的文檔,也進一步加大了菜鳥上手的難度。 dedecms最大的問題就是沒有提供類似Diypage的可視化設計方式,因為標簽比較難於上手,對新手來說做模板是很頭疼的問題。 dedecms 5.1比4.0功能有了很多進步,增加DIGG功能,還有類似分類信息之類的功能都實現了。不過也有退步,比如關鍵詞、相關帖功能都嚴重退步了,發帖也很不方便,而且dedecms在商業版本和免費版本之間做功能和代碼區分,也自然會在免費版本上有所縮水。 dedecms商業化發展以後,目前出現的問題是免費版的技術支持做的不太到位,比phpcms強不了多少

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

1.
python雖然易用,復但是內制存佔用比較多;所以如果你有C/C++/Java基礎,考慮用這些語言來實現;
2.
CF演算法需要計算大量的相似度,如果能把中間結果存起來,或者簡化計算過程(如,你可能會重復計算一個item的均值)可以省下不少內存;(個人試過計算1w個用戶Pearson是沒問題的)
3.
如果內存實在不夠用,那就用時間換空間,把中間計算結果分成小文件存到磁碟上,用的時候再讀取。
供參考。

I. 協同過濾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的文件拆分和合並過程中,要不影響線上業務是比較難的事情,很多問題值得我們去研究場景,因為不同的場景有不同的方法去解決,但是大同小異,明白思想和方法,明白內存和體系架構,明白你所面臨的是沈陽的場景,只是細節上改變可以帶來驚人的效果。

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

自從第一台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 的業務模式融合了雲計算和霧計算,實現了跨數據中心、雲和邊緣應用的實時數據監控、交互和管理,滿足賽事實時監控、場上場下互動、賽前球員積分分析、社交媒體、會員個性化數據管理等大數據分析的需求。

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

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

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

閱讀全文

與協同過濾的數據量過大相關的資料

熱點內容
所有的數據輸入做過濾 瀏覽:434
廢水生物種類 瀏覽:728
湖北凈水器哪裡有賣 瀏覽:632
18年日產騏達的空氣濾芯怎麼拆 瀏覽:260
山西家用污水提升裝置 瀏覽:736
中央電視台文昌污水 瀏覽:432
廢水常規污染物 瀏覽:143
青海學校凈化器多少錢一台 瀏覽:128
電泳超濾膜瞬間高壓 瀏覽:778
活性污泥污水處理工藝的原理 瀏覽:927
水凈化器進化什麼 瀏覽:630
碘單質與四氯化碳蒸餾 瀏覽:562
edial00是華為 瀏覽:438
反滲透膜承受最大壓力 瀏覽:82
美的的飲水機最貴的是什麼 瀏覽:332
水垢對人體有害嗎結石 瀏覽:519
含氟沖洗廢水原水池是什麼意思 瀏覽:295
智能反滲透冷熱直飲機怎麼製冷 瀏覽:451
潤通純凈水哪裡有賣的 瀏覽:392
火車空氣濾芯怎麼拆下來 瀏覽:835